Hi,
ich wollt emich mal erkundigen, wie man mehrere Daten ins EEPROM des
ATmega8 speichert.
Ein Bitmuster bringt ja keine Probleme mit sich, aber geht das auch mit
mehreren?
Im AVR-Studio hab ich folgenden code dazu genommen:
EEPROM_write:
; Wait for completion of previous write
sbic EECR,EEWE
rjmp EEPROM_write
; Set up address (r18:r17) in address register
out EEARH, r18
out EEARL, r17
; Write data (r16) to data register
out EEDR,r16
; Write logical one to EEMWE
sbi EECR,EEMWE
; Start eeprom write by setting EEWE
sbi EECR,EEWE
ret
8Dieser Auszug ist im manual vom ATmega8 enthalten)
kann jemand helfen?
Danke schon mal
Jeder Wert hat doch seine eigene Adresse!
Ist wie im Freibad:
Jeder Gast bekommt sein Kästchen für seine Utensilien. Und wer mehr
Platz braucht nimmt einfach 2. Jedes Kästchen hat eine Nummer, seine
Adresse
Und jetzt vergleich mal
Kopfschlag.
Nein. Regíster enthalten Werte!
Der Wert der in r18:r17 gespeichert ist, ist die Adresse im EEPROM, an
der das 1 Byte, welches in r16 steht abgelegt wird.
In r18:r17 steht 0000 -> das Byte in r16 wird an der EEPROM Adresse
0 abgelegt
in r18:r17 steht 0001 -> das Byte in r16 wird an der EEPROM Adresse
1 abgelegt
in r18:r17 steht 10A8 -> das Byte in r16 wird an der EEPROM Adresse
10A8 abgelegt
Bist du sicher, dass du das Tutorial von Anfang an durchgemacht hast?
Dann sollte dir die Bedeutung des Befehls OUT eigenlich klar sein. Am
Anfang wars
OUT PORTB, r16
mit der Bedeutung: transferiere den Inhalt von r16 auf das Output
Register mit dem Namen PORTB
hier ist es
OUT EERH, r18
mit der Bedeutung: transferiere den Inhalt von r18 auf das Output
Register mit dem Namen EERH
Im ersten Fall ist PORTB so verschaltet, dass es auf Pins des µC
herausgelegt wird. Im letzten Fall ist EERH so verschaltet, dass es der
EEPROM Mechanismus als (Teil des) Adressregister benutzt, von wo die
nächste EEPROM Aktion lesen bzw. schreiben soll.
*ein schlag auf den Hinterkopf fördert das Denkvermögen^^*
also ändere ich einfach die werte in den registern r 17 und r18 von
00:00 auf zB 01:01 und ändere so die zieladresse..?
hoff dass das jetz richtig ist
MB schrieb:> also ändere ich einfach die werte in den registern r 17 und r18 von> 00:00 auf zB 01:01 und ändere so die zieladresse..?
Theoretisch würde das funktionieren. Ist aber ein schlechtes Beispiel -
man könnte denken du hast keine Ahnung davon, wozu man die beiden
Register kombiniert. Wenn du nämlich die Werte von 00:00 auf 01:01
änderst, änderst du die resultierende Adresse von 0 auf 257 (übersprings
also 256 Bytes, wo du hättest was speichern können).
Guck dir am besten das AVR-Tutorial zum Speicher an:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Speicher
serh gut, danke;
das Tutorial hab ich mir auch schon durchgelesen, aber ich hatte halt
ein paar probleme danach...
noch ein andere Frage:
ist es möglich, im EEPROM eine Routine zu speichern (zb ein Lauflicht
oder ein abwechselndes blinken jeder 2. LED am Ausgang von 01010101 auf
10101010 und wieder zurück) und diese dann wieder abzurufen?
wenn ja wie?
danke
MB schrieb:> serh gut, danke;> das Tutorial hab ich mir auch schon durchgelesen, aber ich hatte halt> ein paar probleme danach...
Wenn ich mir das so ansehe, dann sind deine Probleme eher allgmeiner
Natur und treten beim Anwenden auf die spezielle Situation EEPROM
lesen/schreiben nur ganz besonders zu Tage.
Das Tutorial setzt schon vorraus, das ein gewisser Grundstock an
C-Wissen vorhanden ist. Das Tutorial ist kein C Tutorial in dem Sinne,
das dort C gelehrt wird, sondern ein Tutorial über die Besonderheiten,
die einem auf einem AVR in der C Programmierung begegnen.
> noch ein andere Frage:> ist es möglich, im EEPROM eine Routine zu speichern (zb ein Lauflicht> oder ein abwechselndes blinken jeder 2. LED am Ausgang von 01010101 auf> 10101010 und wieder zurück) und diese dann wieder abzurufen?> wenn ja wie?
Nein.
Code der ausgeführt wird, steht im Flash. Immer.
Aber es hindert dich natürlich nichts und niemand daran, dir ein
Programm auszudenken, welches durch Daten gesteuert bestimmte
Blinksequenzen ausführt. Und diese Daten stehen können wiederrum im
EEPROM stehen.
ja gut aber wenn ich mir zig verschiedene bitmuster im eeprom speicher
um dann immer irgendwelche wieder auszulesen dann kann ich das mit dem
EEPROM auch lassen, weil das ja ziemlich überflüssig wäre oder?
>ja gut aber wenn ich mir zig verschiedene bitmuster im eeprom speicher>um dann immer irgendwelche wieder auszulesen dann kann ich das mit dem>EEPROM auch lassen, weil das ja ziemlich überflüssig wäre oder?
Naja, man würde ein Ausleseroutine schreiben (die gibt es sogar schon),
und eine Ausgaberoutine, die man immer nur mit den gewünschten Werte
füttert.
Eine Art Programmsteuerung kann man darüber dann auch machen.
Sowas macht schon Sinn.
Ich hab sowas für eine LED-Matrix mit externen I²C EEPROMs gemacht.
Dabei werden die "Bilder" die angezeigt werden sollen aus dem EEPROM
gelesen und danach angezeigt.
Anderes EEPROM "einlegen", schon läuft was anderes ab.
STK500-Besitzer schrieb:>>Anderes EEPROM "einlegen">> Damit meinst du jetzt das Umprogrammieren, oder?> Jedes Mal einen Chip wechseln ist etwas unspaßig.
Sagt wer?
Er kann sich ja kleine Stecker gebaut haben, mit jeweils einem EEPROM
drinnen. So wie die Kartuschen, in denen Gameboyspiele ausgeliefert
wurden.
Möglichkeiten gibt es viele.
Man kann ja zb auch eine UART einbauen und das Muster über die serielle
Schnittstelle vom PC aus einspielen.
Oder über Infrarot oder ....
Egal wie es ins EEPROM kommt. Das EEPROM ist der Speicher, wenn es darum
geht Daten variabel zu halten aber doch dauerhaft, so dass sie Strom
abschalten überleben
>Er kann sich ja kleine Stecker gebaut haben, mit jeweils einem EEPROM>drinnen.
Stimmt.
Dafür hat man früher aber eher EPROMs genommen.
>So wie die Kartuschen, in denen Gameboyspiele ausgeliefert wurden.
Hatte ich nie...
STK500-Besitzer schrieb:> Eine Art Programmsteuerung kann man darüber dann auch machen.>
Ja kann man,
in grauer Vorzeit hat man so ganze Produktionsanlagen gesteuert.
Automatiesierungssysteme wie PROMODUL-K, PROMODUL-M, PDPS der Fa.
Schleicher oder die 150U der Fa. Siemens waren so aufgebaut.
MfG
genau!
Ich habe einen 4pol. Stecker (+/-/SDA/SCL) und darin ist ein kleines
8pol. SO SMD Teilchen.
Prinzipiell wie beim GameBoy.
Mehrere "Filmchen" für den "Player".
Mit UART muss ich mal noch erweitern.