Forum: Mikrocontroller und Digitale Elektronik I2C 24c64 Externe Daten


von Mario G. (estummel)


Lesenswert?

Hallo,

Folgende Siduation:
Ich möchte Daten mit dem USBASP Programmer über den mega8 gleich in das 
Externe eeprom schreiben.

Die Daten liegen im Intel HEX-Format vor. Die Kommunikation zwischen 
mega8 und dem eeprom funktionieren. Wenn ich Daten in das eeprom des 
mega8 mittels avrdude schreiben will, mache ich das so:

avrdude -p m8 -P usb -c usbasp -U eeprom:w:daten.hex

das funktioniert prima.

Ich möchte jetzt diese Daten aber gleich in des externe eeprom 24c64 
speichern.

Ist das möglich ohne die Daten erst in das eerpom vom mega8 zu 
speichern?
Mir fehlt irgendwie die Idee wie das gehen soll!

Kann mir jemand helfen??

von Falk B. (falk)


Lesenswert?

@ Mario Günther (estummel)

>Ich möchte jetzt diese Daten aber gleich in des externe eeprom 24c64
>speichern.
>Ist das möglich ohne die Daten erst in das eerpom vom mega8 zu
>speichern?

Nein. Du könntest Ponyprog mit einem zusätlichen Adapter verwenden, um 
das EEPROM per PC zu programmieren.

MfG
Falk

von Mario G. (estummel)


Lesenswert?

Schade....
Ein zusätzlichen Adapter möchte ich nicht verwenden. Da bleibt mir wohl 
nichts anderes übrig, als erst in das eeprom vom mega8 zuschreiben.

Meine Idee wäre folgende:
- daten mit avrdude in das eeprom vom mega8 schreinen
- nun in Abständen schauen, ob da was drinne steht
- wenn gefüllt, dann daten in das externe eeprom 24c64 verschieben

So richtig gefällt mir die Abfolge noch nicht. Geht das auch eleganter?

von Falk B. (falk)


Lesenswert?

@ Mario Günther (estummel)

>So richtig gefällt mir die Abfolge noch nicht. Geht das auch eleganter?

Schreib ein extra Programm, in welchem deine EEPROM Daten im FLASH oder 
EEPROM des MEGA8 stehen hat. Das Programm hat nur die Aufgabe, das 
externe EEPROM zu programmieren.

Ablauf

- Programm zur EEPROM-Programmierung brennen
- Reset, Programm wird ausgfeführt und programiiert den EEPROM
- Normales Programm brennen

MFG
Falk

von Mario G. (estummel)


Lesenswert?

Falk Brunner wrote:
> @ Mario Günther (estummel)
>
>>So richtig gefällt mir die Abfolge noch nicht. Geht das auch eleganter?
>
> Schreib ein extra Programm, in welchem deine EEPROM Daten im FLASH oder
> EEPROM des MEGA8 stehen hat.

ok, ich generiere mir aus mein Daten schon das .hex file und schiebe 
dann - wie schon erwähnt - das hex file auf den MC.

>Das Programm hat nur die Aufgabe, das
> externe EEPROM zu programmieren.

Geht aber alles über den mega8 ja??

>
> Ablauf
>
> - Programm zur EEPROM-Programmierung brennen
Du meinst in mein eeprom vom mega8 schreiben? - Hast du ja geschrieben 
das ich da nicht drumherum komme.
> - Reset, Programm wird ausgfeführt und programiiert den EEPROM
Ok, dass wäre nur die Erkennung, dass ich nicht in Abständen das eeprom 
pollen muss.
> - Normales Programm brennen
Das bräuchte ich dann nicht, weil ich ja nur Daten im eeprom hinterlegen 
will. Flash bleibt unverändert.
>
> MFG
> Falk

von Falk B. (falk)


Lesenswert?

@ Mario Günther (estummel)

>ok, ich generiere mir aus mein Daten schon das .hex file und schiebe
>dann - wie schon erwähnt - das hex file auf den MC.

Ja, aber wohin denn? In den INTERENEN EPROM? Wenn die Daten dort rein 
passen, wozu brauchst du dann einen exteren EEPROM?

>>Das Programm hat nur die Aufgabe, das
>> externe EEPROM zu programmieren.

>Geht aber alles über den mega8 ja??

Sicher. Der PC programmiert den AVR via Kabel + avrdude, der AVR 
programmiert dann den exeteren EEPROM.

>> - Programm zur EEPROM-Programmierung brennen
>Du meinst in mein eeprom vom mega8 schreiben? - Hast du ja geschrieben
>das ich da nicht drumherum komme.

Genau. Aber die DATEN kann man entweder im FLASH ODER EEPROM ablegen.

>Das bräuchte ich dann nicht, weil ich ja nur Daten im eeprom hinterlegen
>will. Flash bleibt unverändert.

Naja, wenn genug Platz im FLASH ist kannst du alles in ein Programm 
packen. Die Version mit zwei geteilten Programmen braucht man nur, wenn 
es mit dem Speicherplatz eng wird.

MFG
Falk

von Mario G. (estummel)


Lesenswert?

Falk Brunner wrote:
> @ Mario Günther (estummel)
>
>>ok, ich generiere mir aus mein Daten schon das .hex file und schiebe
>>dann - wie schon erwähnt - das hex file auf den MC.
>
> Ja, aber wohin denn? In den INTERENEN EPROM? Wenn die Daten dort rein
> passen, wozu brauchst du dann einen exteren EEPROM?
Es werden mehrere Daten im externen eeprom abgelegt.
Beispiel:
- eine Liste mit Namen
- eine Liste mit sonstigen Informationen
- eine Liste mit Meßdaten
- ...
Alles in einer Größe, die in das eigene eeprom passen und dann halt ins 
externe eeprom verschoben werden sollen. Die Listen werden einzeln und 
nicht gleichzeitig ins eeprom programmiert. Daher brauche ich das eigene 
eeprom als Pufferspeicher.
Ok Falk ich danke dir ersteinmal für deine schnelle Hilfe.
Mal sehen wie ich das Problem löse.
Noch eine Frage: ist es möglich eine Kombination der Lock-Bits zu 
setzen, wo man nur auf den eeprom Zugriff hat und nicht das Programm des 
MC auslesen kann??

>
>>>Das Programm hat nur die Aufgabe, das
>>> externe EEPROM zu programmieren.
>
>>Geht aber alles über den mega8 ja??
>
> Sicher. Der PC programmiert den AVR via Kabel + avrdude, der AVR
> programmiert dann den exeteren EEPROM.
>
>>> - Programm zur EEPROM-Programmierung brennen
>>Du meinst in mein eeprom vom mega8 schreiben? - Hast du ja geschrieben
>>das ich da nicht drumherum komme.
>
> Genau. Aber die DATEN kann man entweder im FLASH ODER EEPROM ablegen.
>
>>Das bräuchte ich dann nicht, weil ich ja nur Daten im eeprom hinterlegen
>>will. Flash bleibt unverändert.
>
> Naja, wenn genug Platz im FLASH ist kannst du alles in ein Programm
> packen. Die Version mit zwei geteilten Programmen braucht man nur, wenn
> es mit dem Speicherplatz eng wird.
>
> MFG
> Falk

von Falk B. (falk)


Lesenswert?

@ Mario Günther (estummel)

>Alles in einer Größe, die in das eigene eeprom passen und dann halt ins
>externe eeprom verschoben werden sollen. Die Listen werden einzeln und
>nicht gleichzeitig ins eeprom programmiert. Daher brauche ich das eigene
>eeprom als Pufferspeicher.

Das klingt aber nicht so gut. Puffern sollte man besser im RAM, das 
verträgt beliebig viele Schreibzugriffe.

>Noch eine Frage: ist es möglich eine Kombination der Lock-Bits zu
>setzen, wo man nur auf den eeprom Zugriff hat und nicht das Programm des
>MC auslesen kann??

AFAIK nein. Wozu?

MFG
Falk

von Mario G. (estummel)


Lesenswert?

>Das klingt aber nicht so gut. Puffern sollte man besser im RAM, das
>verträgt beliebig viele Schreibzugriffe.

Ich glaube du hast mich jetzt misverstanden. Mit Zwischenpuffern meinte 
ich das was aus den .hex Dateien in den externen eeprom soll. Wenn das 
ginge, dass ich mittels AVRDUDE ins RAM schreiben könnte wäre mein 
Problem gelöst! Da könnte ich gleich die Daten in das externe eeprom 
schieben.

Mario.

von Falk B. (falk)


Lesenswert?

@ Mario Günther (estummel)

>Ich glaube du hast mich jetzt misverstanden. Mit Zwischenpuffern meinte
>ich das was aus den .hex Dateien in den externen eeprom soll. Wenn das

Ach soooo. Klar. Aber dann gehts doch noch einfacher. Wenn genug Platz 
im FLASH ist, leg deine Daten im FLASH ab. Im Programm wird geprüft, ob 
schon sinnvolle Daten im exteren EEPROM stehen (Einfache Prüfsumme). 
Wenn nein, dann werden die Standardwerte aus dem FLASH ins exteren 
EEPROM geschrieben, sozusagen ein automatischer Reset. Dami hast du nur 
ein Programm und musst nur das einmal in den AVR programmieren. 
Einfacher gehts nimmer.

MFG
Falk

von Mario G. (estummel)


Lesenswert?

Falk Brunner wrote:
> @ Mario Günther (estummel)
>
...
> Wenn nein, dann werden die Standardwerte aus dem FLASH ins exteren
> EEPROM geschrieben, sozusagen ein automatischer Reset. Dami hast du nur
> ein Programm und musst nur das einmal in den AVR programmieren.
> Einfacher gehts nimmer.

Das stimmt, aber die Daten ändern sich in einen gewissen Zeitraum und 
sollen von dem Benutzer mittels meines Programmes (Konfigurations - 
Programm) sozusagen upgedated werden. Und da sich der Flash ja nur etwa 
10.000 mal programmieren lässt ehe er den Geist aufgibt ist doch der 
eerpom besser oder?
Mario.

von Falk B. (falk)


Lesenswert?

@ Mario Günther (estummel)

>Das stimmt, aber die Daten ändern sich in einen gewissen Zeitraum und
>sollen von dem Benutzer mittels meines Programmes (Konfigurations -
>Programm) sozusagen upgedated werden. Und da sich der Flash ja nur etwa

Naja, dann wird das nix mit dem FLASH. Aber wenn es sowieso ein 
Update-Programm gibt, warum dann der Umweg über den interen EEPROM? Die 
Daten kommen vom Benutzer sicherlicher per RS232/USB, da kann der 
Prozessor sie auch gleich direkt ins exteren EEPROM schreiben.

MFG
Falk

von Mario G. (estummel)


Lesenswert?

Falk Brunner wrote:
> @ Mario Günther (estummel)
>
..
> Daten kommen vom Benutzer sicherlicher per RS232/USB, da kann der
> Prozessor sie auch gleich direkt ins exteren EEPROM schreiben.

Falk, wenn ich das wüste wie ich das machen soll, wäre ich glücklich. 
Die Daten kommen mittels usbasp Programmer, angeschlossen an die ISP vom 
MC.
Hast du ne Idee wie das geht? Oder kann man mit den usbasp Programmer 
direkt das 24c64 programmieren?
Ich glaube ich seh jetzt total im Wald!

Mario.

von Falk B. (falk)


Lesenswert?

@ Mario Günther (estummel)

>Falk, wenn ich das wüste wie ich das machen soll, wäre ich glücklich.
>Die Daten kommen mittels usbasp Programmer, angeschlossen an die ISP vom
>MC.

Na erstmal sollte man sich über ein paar grundlegende Sachen klar 
werden. Z.B. deine Update-Schnittstelle. Du willst also deinem Anwender 
die Möglichkeit geben, neue Daten ist EEPROM zu schreiben.

1.) Wie oft soll dass im Normalfall passieren?

2.) Mit welcher Schnittstelle soll der Anwender hantieren? USBASP über 
die ISP-Schnittstelle? Was selbstprogrammiertes per USB/RS232 über den 
UART des AVRs?

3.) Wie wird der neue Datensatz generiert? Mittels Textdatei vom User? 
Von dir als Servicepaket?


>Hast du ne Idee wie das geht? Oder kann man mit den usbasp Programmer
>direkt das 24c64 programmieren?

NEIN!

>Ich glaube ich seh jetzt total im Wald!

JA. Tief Luft holen, bis zehn zählen, Ruhe bewahren.

MFG
Falk

P.S. So wie ich es bisher verstanden habe, willst du nur ab und zu einen 
Anwenderupdate machen (1 mal pro Tag). Wenn du dem User als Servicepaket 
die Daten bereit stellst, kannst du das alles in ein Programm und damit 
HEX-File packen, der Anwender brennt es per USBasp und fertig.

von Mario G. (estummel)


Lesenswert?

Falk Brunner wrote:
> @ Mario Günther (estummel)
>

> Na erstmal sollte man sich über ein paar grundlegende Sachen klar
> werden. Z.B. deine Update-Schnittstelle. Du willst also deinem Anwender
> die Möglichkeit geben, neue Daten ist EEPROM zu schreiben.
ja
>
> 1.) Wie oft soll dass im Normalfall passieren?

1 - 2 mal pro Tag - maximal

> 2.) Mit welcher Schnittstelle soll der Anwender hantieren? USBASP über
> die ISP-Schnittstelle? Was selbstprogrammiertes per USB/RS232 über den
> UART des AVRs?

usbasp über die ISP Schnittstelle

> 3.) Wie wird der neue Datensatz generiert? Mittels Textdatei vom User?
> Von dir als Servicepaket?

Aus einer generierten hex Datei - macht der user über das Konfigurations 
- Programm (Windowsprogramm - GUI Oberfläche). Da kann er die Daten 
verändern. Im Moment schreibe ich die Daten in das eeprom des mega8, das 
geht ja wie erähnt mit avrdude ... usbasp -U eeprom:w:data.hex . Im hex 
file stehen ja die Adressen drinne an welcher Stelle die Daten dann im 
eeprom reingeschrieben werden.

...
>kannst du das alles in ein Programm und damit
> HEX-File packen, der Anwender brennt es per USBasp und fertig.

Ja so solls ja sein. Aber wie kann ich mittels dieses hex-files direkt 
den externen eeprom programmieren ohne erst ins eeprom ooder im flash zu 
schreiben? Ich glaube ich komme nicht umhin die externen eeprom Daten 
erst ins eeprom vom mega8 zu schreiben!

Mario.

von Falk B. (falk)


Lesenswert?

@ Mario Günther (estummel)

>Aus einer generierten hex Datei - macht der user über das Konfigurations
>- Programm (Windowsprogramm - GUI Oberfläche). Da kann er die Daten
>verändern. Im Moment schreibe ich die Daten in das eeprom des mega8, das
>geht ja wie erähnt mit avrdude ... usbasp -U eeprom:w:data.hex . Im hex
>file stehen ja die Adressen drinne an welcher Stelle die Daten dann im
>eeprom reingeschrieben werden.

Na dann mach es doch so. Dein Windowsprogramm generiert (intern) das 
HEXfile und verbindet es gleichzeitig mit dem Hexfile des Programms (die 
Daten stehen dann im FLASH). Dieses HEXfile wird gebrannt. Zum 
Programmstart wird, wie bereits gechrieben, geprüft ob die Daten im 
exteren EEPROM sinnvoll sind bzw. ob neue Daten im FLASH vorliegen 
(Datum, Prüfsumme etc.). Wenn ja werden die Daten aus demm FLASH ins 
exteren EEPROM kopiert.

>schreiben? Ich glaube ich komme nicht umhin die externen eeprom Daten
>erst ins eeprom vom mega8 zu schreiben!

JA! Das hab ich doch nun schon dreimal gesagt!

MfG
Falk

von Εrnst B. (ernst)


Lesenswert?

Der USBasp legt ja noch zwei zusätzliche Pins auf den ISP-Adapter, sind 
ursprünglich eigentlich fürs Debuggen der Zielschaltung über UART 
vorgesehen.
Pack auf deinen USBasp einfach eine angepasste Firmware drauf, und 
Verkabel in deiner Schaltung das I2C-Eeprom zusätzlich mit diesen Pins 
am ISP-Anschluss.

Der USBasp könnte dann über I2C dein externes EEProm beschreiben, ohne 
dass der Ziel-AVR davon was mitkriegt oder gar mithelfen müsste.
Sicherheitshalber könnte man den im Reset halten, dann sind dessen I2C 
Ausgänge hochohmig.

Das I2C Protokoll müsste der USBasp dann aber in Software machen, an den 
ISP-Stecker sind dort nur die RX/TX Leitungen des UARTs dran, IIRC.

von Mario G. (estummel)


Lesenswert?

Ok, das werde ich versuchen. Danke für deine Antworten.
Mario.

von Mario G. (estummel)


Lesenswert?

Ernst Bachmann wrote:
..
> Pack auf deinen USBasp einfach eine angepasste Firmware drauf, und
> Verkabel in deiner Schaltung das I2C-Eeprom zusätzlich mit diesen Pins
> am ISP-Anschluss.

Cool das ist doch eigentlich die Idee ...
Mit der angepassten Firmware - ich weis nicht ob ich das hin kriege...
i2c routinen habe ich ja schon ...

> Der USBasp könnte dann über I2C dein externes EEProm beschreiben, ohne
> dass der Ziel-AVR davon was mitkriegt oder gar mithelfen müsste.

genau das ist es doch!

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.