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
ja speichert der dann mehrere verschiedene rein? die ich dann einzeln wieder auslesen kann?
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
1 | ... |
2 | ; Set up address (r18:r17) in address register |
3 | out EEARH, r18 |
4 | out EEARL, r17 |
5 | ; Write data (r16) to data register |
6 | out EEDR,r16 |
7 | ... |
lies die Kommentare.
ahh... dass heisst ich kann kann die hight und low adressden verändern und so mehrere daten einspeichern (also hier r17 und r18 in r27 und r28 zB)?
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.
>Anderes EEPROM "einlegen"
Damit meinst du jetzt das Umprogrammieren, oder?
Jedes Mal einen Chip wechseln ist etwas unspaßig.
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.
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.