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
Gast
#6612879
Ich würde auf jeden Fall die vorgefertigten Routinen von Atmel verwenden. Hier zwei Beispiele aus <eeprom.h>
1 | |
2 | |
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 | |
2 | |
3 | |
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
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
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>
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. :-)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.