Hallo Leser, kann mir jemand hier bei meinem Anfängeproblem weiterhelfen: Ich habe eine Routine zum versenden von Daten über den I2C Bus. Nun möchte ich einen Hex-Wert von 0x51 (binär=1010001) schicken und die routine hat die gestallt: i2csend(unsigned char adress,unsigned char* data) Wenn ich nun diese Routine von meiner main Methode aus aufrufe wie sieht dann der 2. Übergabewert für meinen Hex-Wert aus? Vielen Dank fürs Lesen und eure Bemühungen :)
Tim S. schrieb: > Hallo Leser, > kann mir jemand hier bei meinem Anfängeproblem weiterhelfen: > > Ich habe eine Routine zum versenden von Daten über den I2C Bus. Nun > möchte ich einen Hex-Wert von 0x51 (binär=1010001) schicken und die > routine hat die gestallt: > > i2csend(unsigned char adress,unsigned char* data) > > Wenn ich nun diese Routine von meiner main Methode aus aufrufe wie sieht > dann der 2. Übergabewert für meinen Hex-Wert aus? ein Array von unsigned char. Da die Funktion keine Längenangabe haben will, gehe ich mal davon aus, dass die Funktion einen ganz banalen C-String haben will oder zumindest eine ähnliche Konvention benutzt, an der die Funktion erkennt, wo das Ende der Daten im Array liegt.
Hallo Karl Heinz Buchegger, danke für deine Antwort. Ich habe vergessen zu erwähnen das diese Routine noch einen dritten Parameter für die Länge hat also: i2csend(unsigned char adress,unsigned char* data, int length) wenn ich nun den hex-wert 0x51 senden möchte soll es dann so aussehen: #define adress 0xE7 int main() { ... i2csend(adress,data[0x51],1) //der 3. Übergabewert steht für 1 Byte ... } ist das nun so richtig? ich kann das leider nicht testen.
Tim S. schrieb: > ist das nun so richtig? Nö. Du solltest Dir mal ein C-Buch zu Gemüte führen, da steht sowas drin.
1 | unsigned char b = 0x51; |
2 | i2csend(0xe7,&b,1); |
bzw.
1 | unsigned char b[1] = { 0x51 }; |
2 | i2csend(0xe7,b,1); |
Hallo Tim, das was du da als Adressbyte übergibst, kann so nicht richtig sein. Der I2C-Slave hat eine 7 Bit Adresse, die zusammen mit dem R/W Bit als erstes Byte auf den Bus geschoben wird. R/W ist beim Schreibzugriff immer 0, d.h. das übergebene Adressbyte (incl. R/W-Bit) muß gerade sein.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.