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
@ 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_PCF8574http://www.mikrocontroller.net/mc-project/Pages/Projekte/ICs/Port%20Expander/Portexpander%20Beispiel.zip
MFG
Falk
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
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
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.
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
intmain(void)
2
{
3
unsignedcharret;
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
@ 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?
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.
> 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.
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
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