Forum: Mikrocontroller und Digitale Elektronik Datenformat i2c Routine


von Tim S. (169)


Lesenswert?

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 :)

von Karl H. (kbuchegg)


Lesenswert?

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.

von Tim S. (169)


Lesenswert?

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.

von Tim S. (169)


Lesenswert?

...

von ... (Gast)


Lesenswert?

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);

von Matthias (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.