Data opslaan in microcontroller. Hoe zit dat nou precies?

Goed, ik ben aan het wachten op mijn bestelde At Mega 163, en ben dus nog (bijna) nietswetend over microcontrollers.

De tutorial op de site heb ik ook al gelezen, maar ik snap het niet qua dataopslag in de Mega163

Ik wil dus straks dat de microcontroller een waarde opslaat als deze veranderd, en de laatste veranderde waarde moet -als de stroom er is afgegaan- na een power up/reset weer kunnen worden afgelezen.

Waar word deze waarde opgeslagen? In EEPROM van de 163 toch?

Zo ja : Maar er staat toch wel vaak "EEPROM tot 10000x beschrijfbaar", en wat gebeurt er daarna dan? Beetje onhandig natuurlijk als de waarde heel vaak veranderd. Maargoed, het zou onlogisch zijn, maar ik snap dit gedeelte niet..

Ik gebruik PonyProg voor het "uploaden" van m'n geschreven progjes. Als ik de *.hex wil openen, dan moet ik toch kiezen voor "Open Program(FLASH) file"?

Op 9 november 2002 22:34:16 schreef Nofri:
Ik wil dus straks dat de microcontroller een waarde opslaat als deze veranderd, en de laatste veranderde waarde moet -als de stroom er is afgegaan- na een power up/reset weer kunnen worden afgelezen.

Waar word deze waarde opgeslagen? In EEPROM van de 163 toch?

Een controller heeft 3 soorten geheugen, ROM, RAM en EEPROM. Het ROM is het geheugen waar je programma in staat en daar kun je tijdens het runnen van je programma niks aan veranderen. Het RAM is het tijdelijke geheugen waarin je waardes kunt opslaan die je even wilt laten onthouden, deze zijn echter weg als de spanning eraf gaat. Dan blijft er nog het EEPROM over. Dit is een geheugen wat trager is dan het RAM geheugen maar wat wel zijn waardes behoud als de spanning wegvalt (door wat voor reden dan ook).

Dus jij moet gebruik gaan maken van het EEPROM geheugen. Lees daarvoor eens zorgvuldig het specifieke stukje door in de datasheet wat daarover gaat.

Zo ja : Maar er staat toch wel vaak "EEPROM tot 10000x beschrijfbaar", en wat gebeurt er daarna dan? Beetje onhandig natuurlijk als de waarde heel vaak veranderd. Maargoed, het zou onlogisch zijn, maar ik snap dit gedeelte niet..

Dat gegeven heeft te maken met de opbouw en de hardware van dat geheugen. EEPROM staat voor Elektrical Erasable Programmable Read Only Memory. Oftwel het wordt met behulp van elektrische stroompjes zo gemanipuleerd dat het een bepaalde waarde gaat vertegenwoordigen. Alles slijt, ook dit geheugen. Na zoveel keer het te hebben gewijzigt zal het niet meer betrouwbaar zijn. Zie het als een videoband die op den duur niet meer met statische energie zijn beelden kan vasthouden en dus gewoon is versleten, op is. Je krijgt dan meestal gebieden op die videoband die vaag beeld geven, zwart/wit, geen beeld of ruis.

Lees trouwens eens goed wat er precies staat in de datasheet, namelijk: "Eproximately 10000x", dus niet precies 10000x maar ergens in de buurt ervan. Dit omdat niet alles altijd even sterk/zwak is. De ene persoon sterft op zijn 70e een natuurlijke dood de ander op zijn 110e om ff een voorbeeld te nemen zodat je het snapt.

Ik gebruik PonyProg voor het "uploaden" van m'n geschreven progjes. Als ik de *.hex wil openen, dan moet ik toch kiezen voor "Open Program(FLASH) file"?

Wat je zegt is correct.
Gelukkig weet ik wat PonyProg is anders had ik je vreemd aangekeken en gedacht dat je je paard een AVR implantaat wilde geven :)

Even nog wat extra info, EEPROM is meer bedoelt voor langdurige opslag. Voor bijvoorbeeld tellers die elke paar mS veranderen gebruik je gewoon het RAM geheugen (de registers). Voor bijvoorbeeld toegangs- of statuscodes gebruik je EEPROM. Moet je natuurlijk zelf weten, je mag ermee doen wat je wilt, maar zo weet je een beetje hoe het hoort. :)

Aha dus toch in het EEPROM. Maar de AT Mega 163 heeft toch ook Flash geheugen? Kan ik hier niets mee, of is de data dan ook weg als er geen stroom meer is?

Wat ik ook zou kunnen doen is, de veranderende waardes eerst in het RAM zetten, en vlak voor een shutdown/stroom uitval de waardes naar het EEPROM zetten, als dat mogelijk is. Maarjah dan zou ik em maar om en nabij de 1000x kunnen uitzetten....

Hoe zou ik dit anders kunnen aanpakken? (de waardes zijn zeg maar variabele instellingen)

Misschien iets van externe opslag?

Je zou bijv een externe RAM kunnen gebruiken met een backup battery. Zo'n battery kan over het algemeen wel een paar jaar mee. Zo gaat het bijvoorbeeld met de BIOS instellingen van een computer.

Marcel

De AVR's hebben Flash programma geheugen, een stukkie EEPROM meestal 64 of 128 bytes, en een stukkie ram.

In de EEPROM kun je data kwijt m.b.v. het bijbehorende commando, dat kun je terugvinden in de laatste pagina's van de uC datasheet

Suc6
Antoine

AVR Rulezzz :)

Op 10 november 2002 10:04:40 schreef Nofri:
Aha dus toch in het EEPROM. Maar de AT Mega 163 heeft toch ook Flash geheugen? Kan ik hier niets mee, of is de data dan ook weg als er geen stroom meer is?

Wat ik ook zou kunnen doen is, de veranderende waardes eerst in het RAM zetten, en vlak voor een shutdown/stroom uitval de waardes naar het EEPROM zetten, als dat mogelijk is. Maarjah dan zou ik em maar om en nabij de 1000x kunnen uitzetten....

Hoe zou ik dit anders kunnen aanpakken? (de waardes zijn zeg maar variabele instellingen)

Misschien iets van externe opslag?

Het Flash geheugen is minder keren te beschrijven. Wil je vaak en veel geheugen inhoud wijzigen, dan is het beter een los geheugen te gebruiken. (zie www.atmel.com).

Groeten,

Rob

10.000 keer is dus zeg maar 1x per dag, 30 jaar lang.

Dat zit precies zo:

Je kan data bewerken (opslaan/schrijven/lezen) in 4 plekken in een AVR:

1. Flash geheugen
programma en/of vaste data -> dumpen

2. EEPROM geheugen
data -> dumpen of via programma

3. SRAM
momentele data -> via programma

4. registers
programma en momentele data -> via programma