Tag werte Gemeinde, seit 2 Tagen suche ich nach meinem Fehler beim EEPROM Zugriff. Intensives nachdenken, Recherche hier und im Datenblatt des 4433 haben mir leider nicht weitergeholfen, weshalb ich nun hier fragen möchte. Ich möchte ein byte ins EEPROM schreiben und aus Redundanzgründen auf 2 weiteren Zellen in festem Abstand ablegen. Mein Programm legt jedoch die Daten immer nur auf der ersten Adrese im EEPROM ab, die beiden übrigen Zellen bleiben unbeschrieben. Wo ist mein Denkfehler ? Gruss Stefan Kneller beispielhafter Auszug aus der Hauptroutine: (alle 6 ms wird diese durch einen TimerInterrupt unterbrochen, in dem aber die Registerinhalte als erstes gerettet werden) ldi temp,0x00AA ;lade AA ldi temp1,01 ;lade Adresse 1 rcall eewrite3 ;und schreibe Datentripel ins EEPROM ;******* Unterprogramm schreibt die Daten aus temp ************** ;******* als Tripel auf die Adresse in temp1, ************** ;******* temp1 + 80 und temp1 +160 ************* eewrite3: rcall eewrite ;schreibe Daten in temp nach Adresse temp1 subi temp1,-80 ;erhöhe adresse um 80 rcall eewrite ;und schreibe gleiche Daten dorthin subi temp1,-80 ;Adresse nochmal um 80 erhöhen und rcall eewrite ;gleiche Daten jetzt dort ablegen ret ;fetig ;******* Unterprogramm schreibt die Daten in temp ************** ;******* auf die EEPROM Adresse von temp1 ************* eewrite: sbic EECR,EEWE ;wird momentan noch geschrieben ? rjmp eewrite ;dann warten out EEAR,temp1 ;sonst hole Adresse out EEDR,temp ;und Datem cli ;sperre Interrupts sbi EECR,EEMWE ;setze MasterWriteEnable sbi EECR,EEWE ;und strobe EEPROM sei ;Interrupts wieder freigeben ret ;fertig
Hi, in deinem Proggi kann ich keinen Fehler finden (in der Simulation läufts einwadfrei) Allerdings fehlt das initialisieren des Stacks Gruß -=jens=-
ich oute mich hier gerne als Trottel, in der Hoffnung, dass andere Leser aus meinen Fehlern lernen: Das Programm funktioniert so, wie unten gelistet, in den Assemblercode auf dem Controller hatte sich durch meine Unachtsamkeit ein M zuviel eingeschlichen: eewrite: sbic EECR,EEMWE ;HIER MUSS NATÜRLICH "EEWE" HIN, Grrrr rjmp eewrite ;dann warten out EEAR,temp1 ;sonst hole Adresse out EEDR,temp ;und Datem cli ;sperre Interrupts sbi EECR,EEMWE ;setze MasterWriteEnable sbi EECR,EEWE ;und strobe EEPROM sei ;Interrupts wieder freigeben ret ;fertig
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.