Geimel
26.07.2009, 12:00
Hallo,
ich habe mal eine Frage. Und zwar will ich einen Helligkeitssensor von Intersil ISL29001 benutzen. Dieser kommuniziert per I²C.
Ich habe schonmal mit I²C gearbeitet, mit der Bibliothek von Peter Fleury (I2C-Master-Bibliothek von Peter Fleury).
Der Unterschied beim Intersil Chip ist, das beim Schreiben des Kommandobytes an den ISL29001 keine Bufferadresse mitgesendet wird, beim Lesen auch nicht.
Dh, es wird quasi nur die Empfängeradresse des ISL29001 (in diesem Fall 0x44+Write Bit und das Kommandobyte gesendet, beim Lesen ähnlich (also nur Empfängeradresse und Lesebit) und dann werden 4 Datenbytes gelesen.
Leider funktioniert das irgendwie mit meinem Code nicht, beim Lesen hängt sich alles auf.
void schreiben //Schreibt einen 8 Bit Wert per I²C
(char slaveaddr,int8_t daten){
if(!(i2c_start(slaveaddr+I2C_WRITE))) //Slave bereit zum
i2c_write(daten);}
uint16_t lesen16(char slaveaddr){int low=0,high=0;int16_t rueck;
if(!(i2c_start(slaveaddr+I2C_READ))) //Slave bereit zum lesen?
{ low= i2c_readAck();//liest das 0 byte
high=i2c_readAck();//liest das 1 byte
c1=i2c_readAck(); // liest das 2 byte c1=globale Variable
c2=i2c_readAck(); //liest das 3 byte c2=globale Variable
i2c_readNak();
i2c_stop();} //signal für letztes byte leses
rueck=(high<<8)|low;
return rueck;
}
Hat jemand einen Tip für mich warum es nicht funktioniert?
Das Hauptprogramm besteht nur aus dem Aufruf der Sendefunktion mit Senden des Kommandobytes 0x00 an Adresse 0x44, einem delay(500) und dem Aufruf der Lesefunktion
ich habe mal eine Frage. Und zwar will ich einen Helligkeitssensor von Intersil ISL29001 benutzen. Dieser kommuniziert per I²C.
Ich habe schonmal mit I²C gearbeitet, mit der Bibliothek von Peter Fleury (I2C-Master-Bibliothek von Peter Fleury).
Der Unterschied beim Intersil Chip ist, das beim Schreiben des Kommandobytes an den ISL29001 keine Bufferadresse mitgesendet wird, beim Lesen auch nicht.
Dh, es wird quasi nur die Empfängeradresse des ISL29001 (in diesem Fall 0x44+Write Bit und das Kommandobyte gesendet, beim Lesen ähnlich (also nur Empfängeradresse und Lesebit) und dann werden 4 Datenbytes gelesen.
Leider funktioniert das irgendwie mit meinem Code nicht, beim Lesen hängt sich alles auf.
void schreiben //Schreibt einen 8 Bit Wert per I²C
(char slaveaddr,int8_t daten){
if(!(i2c_start(slaveaddr+I2C_WRITE))) //Slave bereit zum
i2c_write(daten);}
uint16_t lesen16(char slaveaddr){int low=0,high=0;int16_t rueck;
if(!(i2c_start(slaveaddr+I2C_READ))) //Slave bereit zum lesen?
{ low= i2c_readAck();//liest das 0 byte
high=i2c_readAck();//liest das 1 byte
c1=i2c_readAck(); // liest das 2 byte c1=globale Variable
c2=i2c_readAck(); //liest das 3 byte c2=globale Variable
i2c_readNak();
i2c_stop();} //signal für letztes byte leses
rueck=(high<<8)|low;
return rueck;
}
Hat jemand einen Tip für mich warum es nicht funktioniert?
Das Hauptprogramm besteht nur aus dem Aufruf der Sendefunktion mit Senden des Kommandobytes 0x00 an Adresse 0x44, einem delay(500) und dem Aufruf der Lesefunktion