Countdown Timer EEprom

OP #2215248
Lesenswert?

Hallo,

Bascom Programm und schaltpläne sind angehängt.

In diesem Programm läuft ein Timer ab, nach ablauf wird ein Relais 
geschaltet und ein Alarmton ausgegeben.

Soweit funktioniert alles.

Im Programm gint es eine Vartiable " C " je nachdem welchen Wert ich für 
C eingebe, wird dieser im Internen EEprom des Atmega 8 gespeichert, 
dieser Wert wird nach dem Reset aus dem EEprom geholt und der Timer 
starte von vorne.

Programm funktioniert Tadelos, falls es jemand Brauchen kann Prog ist im 
Anhang.


So nun zu meinem Problem, ich möchte diesen Wert nicht im Internen 
EEprom sondern im Externen I²C EEprom abspeichern,
hat jemand evtl eine Idee wie ich das bewerksteligen Kann?

EEprom ist ein 24C02

Lg Kai
Angehängte Dateien:
OP #2215618
Lesenswert?

Hallo Joachim,

versuch gleich mal aus.

Das wird eine art Timer der jede minute den wert auf dem eeprom 
zurückschreiben soll bzw. abziehen.

Da ich den Internen eeprom nur 100.000 mal sprich 100.000 Minuten 
beschreiben kann und den Externen 1.000.000 mal bietet sich das 
natürlich an diesen zu verwenden.

Danke werd es mal testen.
#2215633
Lesenswert?

@  Kai Burghart (tekasiko)

>Da ich den Internen eeprom nur 100.000 mal sprich 100.000 Minuten

Das sind 70 Tage, etwas mehr als 2 Monate.

>beschreiben kann und den Externen 1.000.000 mal bietet sich das

Das sind 700 Tage, knapp zwei Jahre.

Und wenn man es richtig macht, reicht auch der interne EEPROM ewig.

http://www.mikrocontroller.net/articles/Speicher#EEPROM_Schreibzugriffe_minimieren

MFG
Falk
OP #2216193
Lesenswert?

Hallo zusammen,

So der EEprom läuft.

Nun möchte ich statt dem 24C02 EEprom einen 14C02 EEprom (Chipkarte)
Beschreiben und lesen.

Das funktioniert nicht mit dem oben genannten Programm.

Ich denke das die Adressen &HA0 und HA1 in diesem Fall nicht korekt 
sind, da ich als Ausgabe immer 255 habe, das bedeutet ja die Karte ist 
leer.

Weis jemand von euch was die korekte adresse ist?

Datenblatt der Karte habe ich angehängt.

Vielen Dank schon mal.
Angehängte Dateien:
Gast #2216232
Lesenswert?

>wenn ich aber
>
>I2cwbyte &0XA0                                        'Sende Slave
>
>eingebe, habe ich immer eine Fehlermeldung

>Invalid Datatype [[0011]0[&0XA0]]
>Variable not dimensioned [0->0]

Nimm halt

I2cwbyte &HA0                                        'Sende Slave

Wenns damit nicht geht schliess die Karte richtig an;)
OP #2217743
Lesenswert?

Hallo nochmal,

so das Schreiben funktioniert jetzt,

Code ist angehängt, Datenblatt in meinem vorherigen Beitrag.

Jetzt möchte Ich C als Variable Haben (irgend ein Wert zwischen 0-99)

Zudem möchte ich noch einen Namen einfügen.

Sprich wenn ich die Karte einschiebe, start drücke sollte er die Karte 
beschreiben mit

Bsp:

Kai Burghart
60

Momentan kann ich ja nur den Wert "60" schreiben, und diesen wieder 
auslesen.

Wenn ich aber "Kai Burghart" schreiben will und die "60" in einen 
anderen Block und den wieder auslesen will, wie kann ich das machen?

Die Adresse &HA0 und &HA1 sind für die Variable belegt in diesem Fall 
"60"

Jetzt brauche ich eine andere Adresse für "Kai Burghart"

Bitte helft mir ich verzweifle hier.

Vielen dank schon mal für eure mühe.
Angehängte Dateien:
#2217770
Lesenswert?

Mir scheint, du hast die Funktionsweise noch nicht verstanden...
0xA0 und 0xA1 sind die Adressen des Bausteins, nicht die der einzelnen 
Speicherplätze.
Sinnvollerweise drehst du die Sache rum, da die Zeit eine feste Breite 
(Integer, 2 Byte?) hat.
Anschliessend kommt der string mit dem Namen, die Länge ist naturgemäss 
variabel.
Also den Zahlenwert schreibst/liest du aus Adresse 0 und 1 (oder nur 0, 
falls nur ein Byte.
Der string beginnt entsprechend bei Adresse 1 (oder 2) und wird mit 
einer 0 beendet.
Für den Namen schreibst du einfach die ASCII-Codes der Zeichenkette ins 
EEPROM, anschliessend eine 0 (Stringende).
Lesen beginnt dann bei 1 (oder 2), solange bis die 0 erreicht wird.
Bei der Stringverarbeitung von Bascom muss ich jetzt allerdings passen.
#2217855
Lesenswert?

Stell die eine Schublade mit 256 Fächern vor, an eine bestimmte Stelle 
willst du was legen oder herausnehmen.
Blöderweise gibt es mehrere solche Schubladen - und nun stehst du dumm 
da. Ohne zu wissen, welche Schublade und welches Fach kannst du damit 
nichts anfangen.
Auch wenn es bei dir nur eine Schublade (dein EEPROM) gibt, es könnten 
sich noch andere Dinge dort befinden.
Der übliche Weg: gehe zur richtigen Schublade (0xA0) und lege was in das 
richtige Fach (Byteadresse), wie im richtigen Leben. Für den Fall, dass 
du etwas herausnehmen möchtest, heisst die Adresse nicht mehr 0xA0, 
sondern 0xA1, um dem Baustein mitzuteilen, dass du lesen willst.

Jetzt gibt es oft die Fälle, dass du nicht nur eine Sache schreiben oder 
lesen willst, sondern mehrere hintereinander. Dazu muss dann nicht jedes 
Mal die ganze Prozedur (gehe in den Raum, suche die Schublade, suche das 
Fach, lege oder nimm was aus dem Fach) gemacht werden, sondern es kann 
hintereinander mehreres getan werden. Das geht sowohl beim Schreiben 
(page write) als auch beim Lesen.

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