Forum: Mikrocontroller und Digitale Elektronik eeprom ansteuern hilfe!


von Tony (Gast)


Lesenswert?

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!!!

von thkais (Gast)


Lesenswert?

Wie meinst Du das mit dem Label???

von Tony (Gast)


Lesenswert?

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.

von Wolle (Gast)


Lesenswert?

Ähmmm....
<daten:
.db 0b10101010>

was meinst du, was das ist ??
Genau...eine 8Bit-Zahl ! Wo ist das Problem ?

von Tony (Gast)


Lesenswert?

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?

von Wolle (Gast)


Lesenswert?

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.

von Tony (Gast)


Lesenswert?

Vielen Dank! Weist Du vielleicht warum das mit dem simulieren mit dem
eeprom mit avrstudio nicht klappt?

von ...HanneS... (Gast)


Lesenswert?

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...

von Tony (Gast)


Lesenswert?

Kannst du mir vielleicht einen code dazu posten waere super super super
nett!

von ...HanneS... (Gast)


Lesenswert?

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.

von Wolle (Gast)


Lesenswert?

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.ä.)

von Tony (Gast)


Lesenswert?

Danke werde es mal versuchen

von ...HanneS... (Gast)


Lesenswert?

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...

von ...HanneS... (Gast)


Lesenswert?

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...

von Tony (Gast)


Lesenswert?

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!

von ...HanneS... (Gast)


Lesenswert?

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...

von Wolle (Gast)


Lesenswert?

EEARL = 0E(hex) = 14(dez)
EEARH = 01(hex) = 256(dez)

von ...HanneS... (Gast)


Lesenswert?

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)

von Tony (Gast)


Lesenswert?

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

von Tony (Gast)


Lesenswert?

Ach sorry jetzt versteh ich bin ich doof kein eeprom sondern flash:

von ...HanneS... (Gast)


Lesenswert?

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)

von Uwe (Gast)


Lesenswert?

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

von ...HanneS... (Gast)


Lesenswert?

Hast recht,
danke,

kommt davon, wenn man schnell mal was aus dem Hut zaubert...

Sorry...

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.