Forum: Mikrocontroller und Digitale Elektronik EEPROM via I2C beschreiben


von Simon (Gast)


Lesenswert?

Hallo,

ich mache gerade ein Praktikum und bin ziemlich ratlos... ich soll Daten 
auf ein EEPROM (24C02) schreiben. Und zwar per I2C.

Wie der I2C arbeitet, mit Adresszuweisung, R/W, Acknowledge usw hab ich 
mittlerweile verstanden.
Aber was ich einfach nicht raus bekomm ist auf welche weiße ich die 
Daten jetzt auch per I2C verarbeiten kann.

Ich finde immer wieder Code ausschnitte mit I2C "Befehlen" werde daraus 
aber nicht schlau... sind das C Programme oder was genau IST das? o0

Also grundsätzlich..was muss ich mit meinen Daten machen um sie per I2C 
in das EEPROM zu bekommen?

Wahrscheinlich alles total banal, aber wäre fü Hilfe sehr dankbar!

Simon

von Falk B. (falk)


Lesenswert?

@  Simon (Gast)

>Wie der I2C arbeitet, mit Adresszuweisung, R/W, Acknowledge usw hab ich
>mittlerweile verstanden.

Wirklich?

>Aber was ich einfach nicht raus bekomm ist auf welche weiße ich die
>Daten jetzt auch per I2C verarbeiten kann.

Hä?

>Ich finde immer wieder Code ausschnitte mit I2C "Befehlen" werde daraus
>aber nicht schlau... sind das C Programme oder was genau IST das?

Das sind allegmeine Befehlsabläfe. Ob man das in C, BASCOM oder Sonstwas 
programmiert ist egal.

>Also grundsätzlich..was muss ich mit meinen Daten machen um sie per I2C
>in das EEPROM zu bekommen?

Du braucht passende Funktionen in deiner Programmiersprache. Ein 
einfaches Beispiel gibt es hier

http://www.mikrocontroller.net/articles/Port-Expander_PCF8574

http://www.mikrocontroller.net/mc-project/Pages/Projekte/ICs/Port%20Expander/Portexpander%20Beispiel.zip

MFG
Falk

von Cyblord -. (cyblord)


Lesenswert?

Simon schrieb:

> Wie der I2C arbeitet, mit Adresszuweisung, R/W, Acknowledge usw hab ich
> mittlerweile verstanden.

Wie dein Posting eindrucksvoll zeigt, würde ich diese Aussage vehemment 
anzweifeln.

> Also grundsätzlich..was muss ich mit meinen Daten machen um sie per I2C
> in das EEPROM zu bekommen?

Grundsätzlich sagt I2C wie du einzelne Bytes überträgst. Mehr sagt I2C 
nicht aus. Das ist die unterste Ebene. Darüber baut ein 24er EEProm ein 
Protokoll. Und das geht grundsätzlich so, dass du erst die Adresse 
schickst, welche du schreiben willst, und danach die Daten welche dort 
hin sollen.

Aber erstmal musst du I2C an sich verstehen. Danach ins Datenblatt des 
EEPRoms gucken.

gruß cyblord

von Simon (Gast)


Lesenswert?

Mit dem I2C übertrag ich Byteweise meine Daten, dazu brauch ich eine 
Zuweisung auf die Device/Slave Adresse, die Word Adresse und dann die 
Daten. Start/Stop usw zu Begin und Ende ist ebenfalls klar.

Steht ja zB auch im Datasheet des EEPROM 
(http://www.datasheetcatalog.org/datasheet/fairchild/NM24C02.pdf)

aber wie bekomm ich meine Daten in verarbeitbare Byte happen (entspricht 
.hex File?)

Wie beschreib ich daraufhin den Processablauf (zB in C) um diese dann 
auf das EEPROM zu übertragen? hat es dafür extra I2C Commands? Falls ja, 
gibts eine Übersischt über diese Commands?

Das ganze soll später von einem PowerPC verarbeitet werden und in das 
EEprom geschrieben...

Gruß Simon

von Karl H. (kbuchegg)


Lesenswert?

Simon schrieb:

> aber wie bekomm ich meine Daten in verarbeitbare Byte happen (entspricht
> .hex File?)

Hier weiß doch niemand wo du deine Daten herbekommst. Das musst du schon 
selber wissen!

Wenn du Werte von einem ADC aufzeichnen sollst, zb Temperaturwerte, dann 
kriegst du die eben vom ADC. Wenn das digitale Werte sind, dann 
vielleicht von einem Port. Vielleicht werden die Werte aber auch 
berechnet, wie zb die Amplitudenwerte einer Sinusschwingung. Oder der 
Benutzer hat sie eingegeben. Oder ....

Das musst du schon selber wissen, wo die Daten herkommen sollen, die ins 
EEPROM gespeichert werden.


> Wie beschreib ich daraufhin den Processablauf (zB in C) um diese dann
> auf das EEPROM zu übertragen? hat es dafür extra I2C Commands? Falls ja,
> gibts eine Übersischt über diese Commands?

Ich denke du hast das Datenblatt schon studiert?

Im einfachsten Fall

   for( i = 0; i < Anzahl der Datenbytes; i++ )
     schreibe_per_i2c_ins_eeprom( StartAdresse + i, Datenwert[i] );

> Das ganze soll später von einem PowerPC verarbeitet werden und in das
> EEprom geschrieben...

Dann solltest du vielleicht erst mal nach einer I2C Library Ausschau 
halten, die auf deiner konkreten Hardware läuft. Auf einem Power-PC 
wirst du mit der Fleury Lib nicht glücklich werden.

von Simon (Gast)


Lesenswert?

Ok, die Daten hab ich auf einen einfachen Bitstring reduziert, mehr 
brauchts nicht. Das sie irgendwo her kommen müssen ist schon klar ;)
Ich meinte eig, falls ich zB ein Bild habe und das speichern will.
Dann muss ich doch den Bitcode herausfinden durch den das Bild 
beschrieben wird damit es dann per I2C übertragbar ist. Oder versteh ich 
das falsch?

Die Information im Datenblatt fand ich sehr verwirrend, glaube aber ich 
habs jetzt verstanden. Das Datenblatt sagt mir, wo in meinem Register 
ich die Information(Adresse, Daten, .. ) ablegen muss, damit der I2C es 
als Adresse, Daten, R/W Anweisung usw erkennt. Seh ich das richtig?


Das ich eine I2C Library benötige habe ich gerade durch zufall auch 
rausgefunden, trotzdem danke für den Hinweis!
Diese reduziert den Programmieraufwand dann von C Code zu sowas?(siehe 
Code)
1
int main(void)
2
 {
3
     unsigned char ret;
4
5
     i2c_init();                             // initialize I2C library
6
7
     // write 0x75 to EEPROM address 5 (Byte Write) 
8
     i2c_start_wait(Dev24C02+I2C_WRITE);     // set device address and write mode
9
     i2c_write(0x05);                        // write address = 5
10
     i2c_write(0x75);                        // write value 0x75 to EEPROM
11
     i2c_stop();

Dann werd ich mal schauen wo ich eine für den PPC Virtex4 finde.

Danke

von Falk B. (falk)


Lesenswert?

@  Simon (Gast)

>Dann werd ich mal schauen wo ich eine für den PPC Virtex4 finde.

Mas macht jemand wie du mit einem PPC im einem FPGA? Solltest du nicht 
erstmal lieber nen LED-Bliker bauen?

von Karl H. (kbuchegg)


Lesenswert?

Simon schrieb:

> Ich meinte eig, falls ich zB ein Bild habe und das speichern will.

Auch ein Bild ist nichts anderes als ein Abfolge von Bytes, die irgendwo 
gespeichert ist.


ALLES in einem Computer ist nichts anderes als eine Abfolge von Bytes. 
Sogar Musik ist nichts anders.

Dein Funktion schreibt eine Abfolge von Bytes ab einer bestimmten 
Speicheradresse ins EEprom. Da ausnahmslos alles in einem Computer eine 
einfach nur als Abfolge von Bytes gesehen werden kann, folgt daraus, 
dass man einzig und alleine diese eine Funktion benötigt um alles was in 
einem Computer vorkommen kann in einem EEPROM zu speichern. Das heißt: 
solange es da drinn Platz hat.

von Uwe (Gast)


Lesenswert?

> Ich meinte eig, falls ich zB ein Bild habe und das speichern will.
> Dann muss ich doch den Bitcode herausfinden durch den das Bild
> beschrieben wird damit es dann per I2C übertragbar ist.

Alles in einem Computer ist eine abfolge von Nulle nund Einsen, also 
dein sogenannter "Bitcode". Ein Bild sieht auf unterster Ebene genauso 
aus wie ein mp3 File oder deine Telefonliste in einem Worddokument, 
sprich du brauchst gar nichts zu konvertieren. Bit ist Bit und Ende. Ob 
die Software die Bits richtig interpretiert ist eine andere Sache. Du 
kannst ja auch eine html datei mit einem Browser oder mit einem 
texteditor öffnen, je nachdem wird die Datei interpretiert und dir wird 
eine Webseite angezeigt oder der Sourcecode.

von Mike (Gast)


Lesenswert?

Hallo Simon,

In einem 24C02 wirst Du kaum ein Bild speichern können, das grösser als 
ein Fingernagel ist, denn die Speicherkapazität beträgt gerade mal 256 
byte. Ich denke Dein Problem ist die praktische Umsetzung der 
theoretischen Funktion des I2C in ein reales Programm. Dazu sind 
zunächst folgende Informationen wichtig:

* Welchen Mikrocontroller benutzt Du zur Ansteuerung des EEPROMS?
* Hast Du Baisroutinen zur I2C-Kommunikation zur Verfügung (z.B. 
I2C_write), oder willst Du  alles selbst programmieren?

Der erste Schritt zur Lösung ist das Studium der Datenblätter des 
Controllers, Abschnitt I2C - manchmal auch unter SSI etc. zu finden- und 
des 24C02. Dort wirst Du finden, wie man ein Startbit sendet, die 
Adresse auf den Bus ausgibt, ein Acknowledge-Signal empfängt, etc..

Mike

von Simon (Gast)


Lesenswert?

Das alle Dateien aus Nullen und Einsen aufgebaut sind ist mir klar. Es 
ging auch mehr um die richtige interpretation.

Ich mach mit dem PPC im FPGA das was mein Supervisor will. Ich soll mit 
dem PPC eine Information in das EEPROM schreiben. Das Blinken einer LED 
ist ne VHDL Sache von 5 min...

@ Mike: Ich habe nur den PPC Virtex 4 aus meinem FPGA um das EEPROM 
anzusteuern.
Eine Library um Basisroutinen auszuführen hab ich bisher nicht gefunden. 
Scheint also auf "per Hand" hinauszulaufen.

Die Datenblätter für das EEPROM und den I2C Controller des PPC versuche 
ich gerade zu verstehen. Besonders wie die Registerbeschreibung im PPC 
ist für mich nicht so einfach zu verstehen.

Simon

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.