www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Programmierung: EEPROM


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

ich beginne gerade mich in die Programmierung von AVRs in Bascom Basic 
einzulesen:

Ich habe die "grundlegensten Grundlagen" bei diesem Thema wohl jetzt 
drauf, jetzt möchte ich den EEPROM des atmega32 benutzen:

Mal angenommen es werden 100 verschiedene Zahlen an den Controller 
gesendet und ich möchte die alle systematisch abspeichern, wie mache ich 
das?

Mit nur einer Zahl ist das ja einfach:

"Dim E As Eram Byte
E = 5"

Natürlich möchte ich nicht 100 Variablen deklarieren, jedes Zeichen soll 
abgespeichert werden, wenn es ankommt.


Und wie kann ich die Daten wieder (systematisch) auslesen?

Christian

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

> Dim E As Eram Byte
> E = 5

wird so auch nicht gehen, da du mit Bascom erst den Wert in eine 
RAM-Vaiable lesen muss, und du nur RAM-Variablen in das EEPROM speichern 
kannst.

Also eher:

Dim E1 As Byte
Dim E2 As Eram Byte
E1=5
E2=E1

Zu deiner eigentlichen Frage, arebite mit Arrays, und wenn deine Daten 
immer die gleiche Speicherposition haben, also du immer deine 100 Werte 
speicherst, dann kannst du die so auch wieder lesen.

Dim E1(100) As Byte , I As Byte
Dim E2(100) As Eram Byte

For I = 1 To 100
  E1(I) = I
  E2(I) = E1(I)
Next I

Kleine Routine die die Werte 1..100 an 100 Speicherstellen im EEPROM 
ablegt.
Das ganze nun noch mit einer Empfangsroutine kombinieren, und los gehts, 
wenns komplizierter werden soll, wie z.B. einzelne Werte ändern, kannst 
du das auch leicht einfliessen lassen.

Grüße
Addy

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich komm aus der ASM-Ecke, aber

>Dim E1(100) As Byte , I As Byte
>Dim E2(100) As Eram Byte
>
>For I = 1 To 100
>  E1(I) = I
>  E2(I) = E1(I)
>Next I

ist doch pure Speicherverschwendung?! Wie wärs damit:

Dim Ex As Byte , I As Byte
Dim E2(100) As Eram Byte

For I = 1 To 100
  Ex = I
  E2(I) = Ex
Next I

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die ausführliche Antwort.

Eine Frage habe ich aber noch: Wie geht das lesen?
Geht das einfach umgekehrt also irgendwie so:

Dim E1(100) As Byte , I As Byte
Dim E2(100) As Eram Byte

For I = 1 To 100
  E1(I) = E2(I)
Next I



Geht das so?

Christian

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Sven

;-)
klar logisch, den RAM kann man sich sparen, wenn du aber evtl. noch 
nachbearbeiten willst oder ordnen oder was auch immer kann man das aber 
temporär über ein Arrayfeld im RAM lösen.

@ Christian

Genau so liest du dir die EEPROM-Werte temporär ins RAM, aber wie eben 
oben beschrieben auf die speicherfressende Variante, wenn du weißt 
welche Werte du brauchst kanns du die auch einzeln aus dem EEPROM laden.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mh, das Auslesen der Werte klappt irgendwie nicht. Zwischendurch habe 
ich den COntroller aber auch kurz ausgeschaltet, aber das sollte ja 
nicht weiter stören, oder?

Was mir aufgefallen ist:
Woher weiß der Controller eigentlich bei Aufruf von

Dim E1(100) As Byte , I As Byte
Dim E2(100) As Eram Byte

For I = 1 To 100
  E1(I) = E2(I)
Next I


wo er das herauslesen soll?



Danke für eure Hilfe,
Christian

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.