eeprom ansteuern hilfe!

Gast #125322
Hallo erstmal.
Ich brauch dringend eure Hilfe.
1) irgendwie kann ich mit avrstudio4 das eeprom nicht simulieren
   Ist das normal ?
2) Wuerde gerne mit einer 8bit Zahl direkt das eeprom
   ansteuern also so, als ob die 8bit Zahl als label fungiert

Vor allem zur zweiten Sache wuerd ich mich riesig ueber Hilfe
erfreuen.!!!!!!!!!!!!!!!!!
Programmiere in Assembler!!!
Gast
In dem tutorial Kapitel.7 seite 6 steht unten im Code

.eseg
daten:
.db 0b10101010

AnstattDaten wuerde ich gerne ein 8 bit Zahl verwenden um direkt was
aus dem eeprom zu holen.
Gast
OK!
Das Problem ist, dass die ich mit einer 8bit Zahl aus einer A/D
Wandlung direkt Zugriff auf eine "andere Zahl" im Eeprom haben
moechte. Also ich sag mal ich moechte mit 0b00001111 aus der A/D
Wandlung die Zahl 0b11111111 aus dem eeprom bekommen. Also so als ob
die erste binaerzahl als label fungiert.Oder kann man dass irgendwie
anders machen?
Gast
Ist nicht schlimm.
Der Zugriff auf das EEPROM geschieht mittels Zeiger "Z". Dieser
besteht aus einer 16Bit-Zahl oder genauer aus einem High-Byte und einem
Low-Byte - der Adress im EEPROM.
Benutzt du nun das Low-Byte als Referenzadresse für deine
Vergleichszahlen, kannst du so 255 "8Bit-Zahlen" lokalisieren.
Du kopierst also das ADC-Ergebnis in das Low-Byte deines Zeigers, holst
die dort hinterlegte Zahl und vergleichst sie miteinander oder stellst
sonstwas damit an.
Gast
Hmmm... - Und ich dachte immer, dass man das über das (oder die)
EEPROM-Adress-Register EEAR (EEARL, EEARH) adressiert. Also ADC-Byte
nach EEAR(L) ausgeben, dann EERE in EECR setzen...

Oder meint ihr vielleicht den Programmspeicher (Flash)? Dann würde ich
auch Y-Pointer und LPM nehmen...
Gast
Den gibt es in den Atmel-Appnotes, heißt irgendwie so ähnlich wie
"using eeprom"...

ansonsten (so ohne Datenblatt aus dem Hut):

 out eear,adcbyte    ;Adressregister setzen
 sbi eecr,eewe       ;EEPROM-Read-Enabled in EE-Steuerregister
 in neubyte,eedr     ;Datenbyte aus EEPROM lesen

Hat der EEPROM mehr als 256 Bytes (größere AVRs), dann müssen beide
EEPROM-Adressregister (EEARL und EEARH) gresetzt werden.
Gast
Weil nur die "Steuerfunktionen" rund ums EEPROM behandelt werden und
die Daten selbst für eine Simulation relativ unwichtig sind.
Bei einer Simulation gehts ja im Grunde nur darum, Funktionen eines
Bausteins und dessen Programm(ierung) zu testen und nicht irgendwelche
Daten, die entweder während Programmablaufs erst generiert werden oder
größtenteils nur der Visualisierung dienen (Texte,Meßwerte o.ä.)
Gast
Achja, du musst ja noch Werte im EEPROM ablegen...

.eseg        ;EEPROM-Segment
ein_Label:   ;oder auch nicht...
.db byte1    ;erstes Byte (statt byte1 Wert eintragen)
.db byte2    ;wieder nur 1 Byte
...
.db byte27,byte28,byte29...  ;gleich mehrere Bytes
.db 112,0b10010110,0x7f,255  ;dec,bin,hex,dec, wie es gerade passt

Wird .db im Flash (.cseg) verwendet, sollte die Anzahl der Bytes pro
Zeile aber immer geradzahlig sein...
Gast
Achja, es gibt da ein Memoryfenster (habe ich immer unten rechts), da
kann man den Inhalt von Register, Programm, EEPROM usw sehen. Kann
sein, dass da die Werte erscheinen, die du im EEPROM hast. Habe ich
aber noch nicht weiter überprüft, ich lasse mir da immer die Register
drin zeigen. Dann habe ich links mehr Platz für die I/Os...
Gast
Wie ist das nun wenn ich mit dem Atmega 8 arbeite der hat doch 512byte.
super die sache mit dem eeprom die dur mir gerade gezeigt hast war
schon wieder ein bisschen am verzweifeln gewesen.Ist eearl von dem
ersten byte dann zum Beispiel 0b00000000 und eearh dann 0b00000000.
Oder ich stell dir mal ne frage wie ist eearh und eearl von byte 270?
Please help amigo!
Gast
Na EEARL (Low-Byte) und EEARH (High-Byte) ergeben zusammen eine 16-Bit
Zahl.

Bei den 512 Bytes des Mega8 adressierst du mit EEARL die unteren 256
Bytes wenn EEARH=0 ist und die oberen 512 Bytes wenn EEARH=1 ist.
Andere Werte für EEARH sind nicht erlaubt, da EEARH bei 512 Byte EEP
nur das untere Bit unterstützt. Bei größeren EEPs sind es dann mehr...
Gast
Wenn du eine Tabelle zur Umwandlung von 256 Werten brauchst, so geht das
mit dem Flash besser und einfacher.

 ldi r1,0              ;(oder clr r1)
 ldi zl,low(tabelle)   ;Pointer setzen
 ldi zh,high(tabelle)  ;High-Teil vom Pointer
 add zl,r16            ;ADC-Wert sei in R16
 adc zh,r1             ;Null und Carry ins ZH addieren (Übertrag)
 lpm                   ;Ergebnis steht jetzt in r0

...

tabelle:               ;am Ende des Programmcodes
.db 1,2                ;Wert 1 und 2,
.db 3,5                ;Wert 3 und 4,
.db 8,4,2,5            ;Wert 5 bis 8 (da muss man schon etwas
mitzählen)

...

.db 22,9               ;vorletzter und letzter Wert (256 Werte)
Gast
Hamme muss ich morgen unbedingt mal ausprobieren .Ich danke Dir
tausendfach !!!!
.db 1,2 bedeutet das ich die ersten beide werte nebeneinander
hinschreibe. Ist es wieder egal ob binaer oder hex.
Ist das moeglich
eseg
.db 0b11111111,0b10000000 ;Wert1 und Wert2
Gast
Du kannst alle gültigen Schreibweisen von 8-Bit-Zahlen mischen, der
Assembler macht eh binär draus weil für jedes Bit ein Flipflop zum
Speichern zur Verfügung steht... (grins)

Ja, Programm steht im Flash, und da ist .cseg
Bytes im EEPROM sind nichtflüchtige Datenbytes .eseg
Bytes im SRAM können mit .dseg und .byte reserviert werden

Steht aber alles in der Hilfe zum AVR-Studio (Tools, AVR-Assembler)
Gast
Hi!

< ldi zl,low(tabelle)   ;Pointer setzen
< ldi zh,high(tabelle)  ;High-Teil vom Pointer

ist fasch! Muss lauten:

 ldi zl,low(tabelle*2)   ;Pointer setzen
 ldi zh,high(tabelle*2)  ;High-Teil vom Pointer

MfG Uwe

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.