Vraag:
EEPROM-waarde keert terug naar 255
MoKaM
2015-04-12 02:36:00 UTC
view on stackexchange narkive permalink

Als ik '13' naar de EEPROM schrijf en het direct lees nadat het correct werkt.

Wanneer ik echter commentaar geef op het schrijfgedeelte van de code en probeer gewoon de gegevens te lezen, is de waarde niet meer 13 zoals het was, maar keert terug naar 255. Wat is er aan de hand?

Ik gebruik een stand-alone atmega328 op een breadboard met een 16mhz-kristal, geprogrammeerd door een Nano R3.

  void setup () {Serial.begin (9600); pinMode (2, OUTPUT); // EEPROM.write (1,13);} void loop () {scoreBinary ();} void scoreBinary () {int score = EEPROM.read (1); if (score == 13) {digitalWrite (2, HIGH);} delay (10000);}  
Een antwoord:
Ignacio Vazquez-Abrams
2015-04-12 02:46:21 UTC
view on stackexchange narkive permalink

Standaard wordt de EEPROM in de MCU gewist (naar 0xff) wanneer de chip wordt gewist voordat er naar flash wordt geschreven. Als u dit wilt voorkomen, moet u EESAVE in de fuse-bits programmeren, wat bit 3 is in de hoge fuse-byte van de '328.

Ah! Dank je! Klinkt logisch! Moet ik nu de waarde in boards.txt veranderen om het zekeringbit te veranderen? Momenteel is de hoge zekeringbyte diecimila.menu.cpu.atmega328.bootloader.high_fuses = 0xDA (1101 1010 in binair) En ik zou dit moeten veranderen in diecimila.menu.cpu.atmega328.bootloader.high_fuses = 0xFA (1111 0111 in binair) Is dat juist = /?
Of misschien is er iets dat ik in de cmd kan typen met avrdude?
Lees de huidige hoge zekeringswaarde (`avrdude ... -U hfuse: r: -: h`) bitsgewijs - en het met 0xf7, en schrijf het weer weg.


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...