mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik eeprom ansteuern hilfe!


Autor: Tony (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!!

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie meinst Du das mit dem Label???

Autor: Tony (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähmmm....
<daten:
.db 0b10101010>

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

Autor: Tony (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Wolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tony (Gast)
Datum:

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

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Tony (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du mir vielleicht einen code dazu posten waere super super super
nett!

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.ä.)

Autor: Tony (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke werde es mal versuchen

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Tony (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Wolle (Gast)
Datum:

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

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Tony (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tony (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach sorry jetzt versteh ich bin ich doof kein eeprom sondern flash:

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast recht,
danke,

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

Sorry...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.