AVR Programmierung: EEPROM

Gast #806540
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
Gast #806552
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
Gast #806572
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
Gast #806576
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
Gast #806582
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.
Gast #807841
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren