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!!!
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.
Ähmmm.... <daten: .db 0b10101010> was meinst du, was das ist ?? Genau...eine 8Bit-Zahl ! Wo ist das Problem ?
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?
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.
Vielen Dank! Weist Du vielleicht warum das mit dem simulieren mit dem eeprom mit avrstudio nicht klappt?
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...
Kannst du mir vielleicht einen code dazu posten waere super super super nett!
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.
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.ä.)
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...
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...
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!
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...
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)
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
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)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.