Forum: Mikrocontroller und Digitale Elektronik Attiny2313 eeprom Fragen


von Denno (Gast)


Lesenswert?

Hallo Leute,

ich habe hier eine Schaltung mit einem ATtiny2313. Im Quellcode (C) wird 
eine Konstante festgelegt:
1
const gesCard_Struct eegesCard[NUMBER_OF_CARDS] EEMEM ={
2
                                                    {0x01, {0x2A, 0x00, 0x24, 0x91, 0xFD}},
3
                                                    {0x02, {0x4F, 0x00, 0x88, 0x59, 0xB0}},
4
                                                    {0x03, {0x4F, 0x00, 0x88, 0x59, 0xB1}},
5
                                                    {0x04, {0x4F, 0x00, 0x88, 0x59, 0xB1}},
6
};

Ich habe schon ein wenig über EEProm gesucht, vor allem in Zusammenhang 
mit dem Attiny der ja 128 Bytes zur Verfügung hat. Allerdings verstehe 
ich das Code-Beispiel nicht so genau.
Wieviele Bytes werden da pro Zeile belegt? Wie funktioniert das mit der 
Adressierung? Ich hätte ja gesagt, dass z.B. 0x01 den ersten Eintrag 
bestimmt, wobei die Daten dann in 0x2A, 0x00, 0x24, 0x91 und 0xFD 
liegen. Aber 0x00 z.B. taucht ja mehrmals auf, was für mich heißen 
würde, dass es auch mehrmals benutzt/beschrieben wird.
Mag mich jemand aufklären?

Grüße

von Juergen G. (jup)


Lesenswert?

Wenn Du wissen willst wie man den EEPROM eines AVR mit avr-gcc benutzt 
ist die avr-libc der richtige Platz um nachzulesen.

http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html

Denno schrieb:
> Wieviele Bytes werden da pro Zeile belegt?

pro Zeile 6 Byte
* 4 Zeilen = 24 Bytes hintereinander im EEPROM

Das was in dem Code-Beispiel in den EEPROM geschrieben wird ist ein 
mehrdimensionales array und es sind alles Daten.
Ein array fangt bei Index 0 an.

also ist an index
0x00 der Wert 0x01
und an index
0x06 der Wert 0x02

von Denno (Gast)


Lesenswert?

Hi,

Juergen G. schrieb:
> Wenn Du wissen willst wie man den EEPROM eines AVR mit avr-gcc benutzt
> ist die avr-libc der richtige Platz um nachzulesen.

Danke für den Verweis, das werde ich mir mal genau anschauen! :)

Juergen G. schrieb:
> also ist an index
> 0x00 der Wert 0x01
> und an index
> 0x06 der Wert 0x02

Okay, also Index 3 wäre dann 0x24, richtig?

Juergen G. schrieb:
> pro Zeile 6 Byte
> * 4 Zeilen = 24 Bytes hintereinander im EEPROM

Das heißt ja, das im eeprom noch genügend Platz sein sollte, richtig?
Wie müsste dann die nächste Zeile ausschauen, damit noch ein fünfter 
Datensatz gespeichert werden könnte? Angangen wohl definitiv mit 0x05, 
richtig? Was mich immer noch irritiert, ist, dass die jeweils dritte 
Stelle z.B. in jeder Zeile gleich aussieht. Weiter im Programm wird die 
ID einer RFID-Karte in das eeprom geschrieben. Wie oben schon erwähnt, 
könnte ich ja das ganze auf mehr als vier IDs erweitern...das ist 
erstmal mein Ziel.

Grüße

P.S. Ich bin mir nicht sicher wie das ausschaut mit "fremden Code" hier 
reinstellen. Damit Ihr euch aber vielleicht besser ein Bild davon machen 
könnt, verweise ich mal auf die Quelle: 
http://www.projektsammlung.de/projekte/rfid-reader-modul/

von Thomas E. (thomase)


Lesenswert?

Denno schrieb:
> Hi,
>
> Juergen G. schrieb:
>> Wenn Du wissen willst wie man den EEPROM eines AVR mit avr-gcc benutzt
>> ist die avr-libc der richtige Platz um nachzulesen.
>
> Danke für den Verweis, das werde ich mir mal genau anschauen! :)
>
> Juergen G. schrieb:
>> also ist an index
>> 0x00 der Wert 0x01
>> und an index
>> 0x06 der Wert 0x02
>
> Okay, also Index 3 wäre dann 0x24, richtig?
Nein.
Der Inhalt von Index 3 ist 0x04, 0x4F, 0x00, 0x88, 0x59, 0xB1.
Das ist ein Struct und das Ganze ist ein Array of Structs.

Arbeite in deinem C-Buch die Kapitel über Arrays und Structs durch. Dann 
verstehst du das auch.

> Das heißt ja, das im eeprom noch genügend Platz sein sollte, richtig?
Vielleicht. Im EEPROM steht aber auch noch eine ganze Menge Prosa fürs 
Display.

mfg.

: Bearbeitet durch User
von Denno (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Nein.
> Der Inhalt von Index 3 ist 0x04, 0x4F, 0x00, 0x88, 0x59, 0xB1.
> Das ist ein Struct und das Ganze ist ein Array of Structs.
>
> Arbeite in deinem C-Buch die Kapitel über Arrays und Structs durch. Dann
> verstehst du das auch.

Hm, ich schau mir das noch mal genau an...

Thomas Eckmann schrieb:
> Vielleicht. Im EEPROM steht aber auch noch eine ganze Menge Prosa fürs
> Display.

Nicht mehr, hab den ganzen Display-Kram rausgeschmissen.

von Karl H. (kbuchegg)


Lesenswert?

Denno schrieb:

> Thomas Eckmann schrieb:
>> Vielleicht. Im EEPROM steht aber auch noch eine ganze Menge Prosa fürs
>> Display.
>
> Nicht mehr, hab den ganzen Display-Kram rausgeschmissen.

Das könnte man entscheiden, wenn du deinen eigenen Code gezeigt hättest 
und nicht nur einen Link auf das Original.
Das ist sowieso immer etwas befremdlich, wenn eine Frage zu einem Code 
kommt, klitzekleine Ausschnitte präsentiert werden und für den Rest wird 
auf einen Link verwiesen. Dann sieht man sich den Link an, holt von dort 
ein Zip-File, macht es auf, sucht sich das betreffende C-File (wobei man 
erst mal suchen muss, welches es dann eigentlich ist), sieht da drinn 
nach und dann stimmt der dort vorgefundene Code nicht mit dem 
präsentierten Mikroausschnitt überein.

Tja. was soll man da machen?
Ich für meinen Teil geh immer mehr dazu über, dann ganz einfach nichts 
mehr zu machen. Du bist der, der Hilfe braucht. Nicht ich. Also mach es 
mir leicht, dir zu helfen. Das bedeutet: präsentiere DEINEN Code und 
nicht einen Link auf irgendwelchen Code, der mit deinem Code nur noch 
rudimentär zu tun hat.

: Bearbeitet durch User
von Denno (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

Karl Heinz,
sorry, es war nicht meine Absicht euch Schwierigkeiten bei der Hilfe für 
mich zu bereiten, ganz im Gegenteil. Meine Befürchtung war nur, dass es 
problematisch sei, fremden Code zu veröffentlichen, verändert oder 
nicht.
Aber da das hier nicht problematisch zu sein scheint, meine modifizierte 
Version im Anhang.
Die RFID-Display* sind komplett weg.

Grüße

von Thomas E. (thomase)


Lesenswert?

Und was ist jetzt die Frage?
Wieviel Bytes werden im EEPROM belegt?

Dein Struct
1
typedef struct {    uint8_t ID;
2
                    uint8_t TagByte[5];
3
} gesTagKarten_Struct;

besteht aus einem (überflüssigen)Byte für die ID und 5 Bytes für das 
TagByte-Array.
Das Tageskarte-Array besteht aus ANZAHL_KARTEN_IDs_IM_EEPROM dieser 
Structs.

Jetzt nimmst du deinen Taschenrechner und rechnest das aus.

mfg.

von Karl H. (kbuchegg)


Lesenswert?

Thomas Eckmann schrieb:
> Und was ist jetzt die Frage?

:-)
Soll ich mal raten?

Die eigentlich Frage dürfte lauten:
Was zum Teufel ist ein struct, was zum Henker macht ein typedef und 
warum kann ich mit ...
1
   .... gesTagKarten_Struct eegesTagKarten[ANZAHL_KARTEN_IDs_IM_EEPROM] ...
... nichts anfangen?

:-)

: Bearbeitet durch User
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.