Hallo! Habe ein Problem mit dem Eeprom. Ich habe da drin Werte gespeichert, die ausgelesen werden müssen. Die Werte sind jeweils 12bit gross, belegen also nicht ganze 2 Byte. Der Eeprom wird in mehrere Teile unterteilt, der AVR soll dann jeweils erkennen wo ein neuer Bereich beginnt, das ist wenn bei den geraden Adressen ein ein 1 im MSB steht. Beim Neustart wird zuerst überprüft, wieviele solcher Bereiche vorhanden sind. Es werden also einfach alle geraden Adressen im Eeprom abgeklappert um zusehen ob das MSB eins oder null ist. Wenn in einer geraden Adresse FF steht, bedeutet das, dass hier der beschriebene Teil fertig ist und nur noch FFs folgen. Nun mein Problem. Der folgende Code funktioniert im AVR nicht richtig. Beim Simulieren mit AVRStudio klappt das so wie ich das will, nur im AVR scheint er immer FF zu lesen und bricht die Suche deshalb schon nach der ersten Stelle ab. Hab ich einen Fehler gemacht? Ich verwende die Lese-Routine aus dem Tutorial und die funktioniert auch. Der Eeprom ist korrekt beschriben, ich erhalte beim Auslesen mit Ponypro dasselbe, das ich herein geschrieben habe. Hier nun der Code; start: ldi adressel,0x00 ldi adresseh,0x00 ldi prognr,0x00 suchen: rcall eeprom_read ldi temp2,0xff cp daten,temp2 ;falls FF dann speicher ab hier leer breq fertig_gesucht ldi temp2,0b10000000 and daten,temp2 tst daten breq weitersuchen inc prognr ;ein Bereich mehr gefunden weitersuchen: inc adressel ;adresse um zwei erhöhen brne kein_uebertrag inc adresseh kein_uebertrag: inc adressel brne kein_uebertrag2 inc adresseh kein_uebertrag2: rjmp suchen fertig_gesucht: Achja, verwende den AtMega 8 und habe am Anfang eine halbe Sekunde Pause, der Eeprom sollte also angelaufen sein... Danke für jede Hilfe!
Hallo, bei Ponyprog muß man zuerst das .hex-File mit dem Flash-Programmcode öffnen, dann das .eep-File für den EEPROM. Dabei wird kein 2. Fenster geöffnet, sondern EEPROM und Flash werden zusammengemischt, d.h. der Adreßbereich für den EEPROM schließt sich an den Flash an. Wenn man im PonyProg nur das .hex-File lädt und "Write Flash" macht, wird das EEPROM trotzdem gelöscht und mit FF überschrieben. Ich hab das auch erst gemerkt, als ein Programm nicht laufen wollte, weil ich davon ausging, daß da noch Daten im EEPROM sein müßten. MfG Olaf
Hallo! Aber es müsste doch möglich sein, den Eeprom nach dem schreiben des Flash zu programmieren, mit einem neuen Fenster in PonyProg? Habs trotzdem mal mit deiner Methode probiert, tatsächlich ist kein zweites Fenster aufgegangen, jedoch auch nichts am Flashprogramm geändert oder angehängt worden:( Was benutzt du für einen Hexeditor um das File für den Eeprom zu schreiben? Kannst du mir nochmals genau erklären wie du das machst mit PonyProg? mUss ich das <Hexfile zuerst in .eep umwandeln oder geht das auch so? Gruss und dake für die Hilfe
Hallo, das .eep-File erzeuge ich zusammen mit dem Assemblercode, z.B. .equ EEP_TEXT 0x000 ;Text im EEPROM .equ EEP_TABLE 0x100 ;Daten im EEPROM .cseg ;<hier steht das Assemblerprogramm> .eseg ;Hier beginnen die EEPROM-Daten .org EEP_TEXT .db "Dies ist ein String",0 ;Nullterminierter String .org EEP_TABLE .db 12,213,23,243,123,233,0,12 ;irgendwelche Daten Danach spuckt der Assembler nebem dem .hex-File ein .eep-File aus, das ich dann einfach wie beschrieben in Ponyprog öffne. MfG Olaf
Hallo! Danke für die Tipps, es liegt aber nicht daran, dass es nicht ins Eeprom gelangt, es liegt auch nicht an der Leseroutine. Hab mal ne kleine Testsoftware geschrieben um das zu testen, hat geklappt. Nur mit obiger Software nicht. Das komische, er geht immer gleich bei breq fertig_gesucht raus, auch wenn nicht 0xFF im Daten-Register war. Ich kann diese paar Zeilen nicht mehr sehen. Sieht niemand einen Fehler? Oder hat noch einen Tipp. Mit simulieren hats auch wunderbar geklappt so wie ich das will. Für jede Hilfe bin ich sehr dankbar, ich weiss echt nicht mehr an was es liegen könnte!!! Gruss
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.