Forum: Mikrocontroller und Digitale Elektronik Problem mit inetrnem Eeprom auslesen


von Pfi (Gast)


Lesenswert?

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!

von Olaf Kindel (Gast)


Lesenswert?

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

von Pfi (Gast)


Lesenswert?

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

von Olaf Kindel (Gast)


Lesenswert?

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

von Pfi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.