Forum: Mikrocontroller und Digitale Elektronik AVR Programmierung: EEPROM


von Christian (Gast)


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

von Addy (Gast)


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

von Sven P. (Gast)


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

von Christian (Gast)


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

von Addy (Gast)


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.

von Christian (Gast)


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

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
Noch kein Account? Hier anmelden.