mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Speichern im ATmega8 EEPROM


Autor: MB (Gast)
Datum:

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

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

eventuell eine Schleife drum bauen?

MfG

Autor: MB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja speichert der dann mehrere verschiedene rein?
die ich dann einzeln wieder auslesen kann?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
  ...
     ; Set up address (r18:r17) in address register
  out EEARH, r18
  out EEARL, r17
     ; Write data (r16) to data register
  out EEDR,r16
  ...
lies die Kommentare.

Autor: MB (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: MB (Gast)
Datum:

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

Autor: Ziegenpeter (Gast)
Datum:

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

Autor: MB (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: MB (Gast)
Datum:

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

Autor: STK500-Besitzer (Gast)
Datum:

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

Autor: Bastler (Gast)
Datum:

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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Anderes EEPROM "einlegen"

Damit meinst du jetzt das Umprogrammieren, oder?
Jedes Mal einen Chip wechseln ist etwas unspaßig.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: STK500-Besitzer (Gast)
Datum:

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

Autor: Sauger (Gast)
Datum:

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

Autor: Bastler (Gast)
Datum:

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

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.