Forum: Mikrocontroller und Digitale Elektronik Attiny84a speichert nicht in das Eprom


von Torsten B. (torsten12345)


Angehängte Dateien:

Lesenswert?

Moin zusammen,

GG:
- ATtiny84a (Breadboard Aufbau)
- TSOP 4838
- IRMP vom 10.09.2018
- LED 3 Stk, KontrollLED funktioniert wie irmp_callback angegeben.
- Diamex All AVR-Programmer
- Microchip Studio 7.0.2452

Frage:
Das IR Signal wird erkannt, die Timer funktionieren, wenn ich allerdings 
in den 'teachmodus' via langem Tastendruck wechsele, dann werden die 
IR-Werte nicht im Eprom gespeichert.
Den Code habe ich zum Teil von einem Kollegen auf Github.
Allerdings bin ich kein Profi mit AVR's, ich mag diese kleinen Dinger 
einfach . Meine C Kenntnisse sind eher bei x86 zu suchen.

villeicht fällt jemandem auf was bei meinem (unfertigem) Projekt falsch 
läuft.

Danke.

Gruß Torsten

von Messknecht (Gast)


Lesenswert?

Ich würde auf jeden Fall die vorgefertigten Routinen von
Atmel verwenden. Hier zwei Beispiele aus <eeprom.h>
1
void eeprom_write_byte (uint8_t *__p, uint8_t __value);
2
void eeprom_write_word (uint16_t *__p, uint16_t __value);

Bei EEPROM schreiben und lesen ist ausserdem zu beachten dass
die zu schreibende Adresse eine solche aus dem EEPROM-Bereich
ist. Also z.B.
1
  EEMEM  uint16_t  val16; // das ist eine EEPROM Speicherstelle
2
  uint16_t current_value = 12345; // das ist ein aktueller Wert
3
  eeprom_write_word (&val16, current_value); // aktuellen Wert schreiben

von Christian S. (roehrenvorheizer)


Lesenswert?

Hallo,


siehe hier:
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM


oder Seite 22:

http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7701_Automotive-Microcontrollers-ATtiny24-44-84_Datasheet.pdf


>EEAR = ucAddress;             /* Set up address and data registers */
außerdem gibt es high und low - Adressregister

mfg

: Bearbeitet durch User
von Torsten B. (torsten12345)


Lesenswert?

Moin Christian,

> siehe hier:
> https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM
Habe ich gelesen.....

> 
http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7701_Automotive-Microcontrollers-ATtiny24-44-84_Datasheet.pdf
... oben benannt, auch gelesen. Die Eprom-Speicherrutinen stammen aus 
dem Datenblatt zum Attiny84a.

>>EEAR = ucAddress;             /* Set up address and data registers */
> außerdem gibt es high und low - Adressregister
Auch dies ist mir bekannt, hilft mir nur nicht viel, weil ich es gewohnt 
bin, durchgehende Datentypen und Zeiger zu haben. Siehe im 
Ursprungsposting der Hinweiß zur X86 Plattform.

Daher fehlt mir ein kleiner Schupps in die Richtung, wo der konkrete 
Fehler in dem Code liegen kann.

Gruß Torsten

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

vermutlich ... timing verstoß durch isr, daher muss eeprom_write_byte 
atomic sein (device description page17)!

Atomic Byte Programming
If the EEPMn bits are zero, writing EEPE (within four cycles after EEMPE 
is written) will trigger the erase/write operation.

!!! das gilt auch für dein

uint32_t millis(){
return systemtime;
}

verwende einfach die aufrufe aus #include <util/atomic.h>

von Torsten B. (torsten12345)


Lesenswert?

Moin,

> vermutlich ... timing verstoß durch isr, daher muss eeprom_write_byte
> atomic sein (device description page17)!
Timing wars, und ein ziemlich dummer Fehler. Zum einen stimmte der 
Teiler nicht, zum anderen hatte ich einen neuen Attiny84a zum testen 
verwendet, aber nicht den internen Clockteiler per fuses deaktiviert.

> Atomic Byte Programming
> If the EEPMn bits are zero, writing EEPE (within four cycles after EEMPE
> is written) will trigger the erase/write operation.
>
> !!! das gilt auch für dein
>
> uint32_t millis(){
> return systemtime;
> }
>
> verwende einfach die aufrufe aus #include <util/atomic.h>
Habe ich umgesetzt.

Vielen Dank für eure Tipps. :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.