I2C Übertragungsproblem

Gast #4020556
Lesenswert?

Guten abend,

Ich habe folgendes Problem:

Ich habe ein Master slave System aufgebaut. Der slave ist ein attiny45 
mit einer rgb Led. Der Master ein atmega64. Kommunikation über I2C 
funktioniert soweit in folgender Situation:

Atmega sendet via I2C einen rgb farbcode. Slave verarbeitet diesen auch 
richtig.

Nun will ich aber den farbcode senden und erst nach dem senden eines 
enable Codes die led einschalten. Also die led Datenverarbeitung in eine 
if Anweisung gepackt.
Nun mein Problem:

Ich sende vom Master den farbcode Über folgende Funktion:

void rgb_send(uint8_t adr, uint8_t red, uint8_t green, uint8_t blue){

If(!I2C_start((adr+I2C_write))){
I2C_write(0x01); //startbyte
I2C_write(red);
I2C_write(green);
I2C_write(blue);
I2C_stop();}}

Diese Funktion funktioniert auch Wenn der enable Code nicht benutzt wird
Nun sende ich nach dem selben Prinzip der obigen Funktion den enable 
Code in das nullte Byte. Dort schreibe ich zb eine 1 dezimal rein.
In der abfrage wird diese 1 über die if geprüft.

Im master sieht das folgendermaßen aus:

In einer Dauer while :

Status_send(1); //1=slaveadresse
Rgb_send(1,255,2255,255);

Hierbei hängt sich das Programm im Status sind auf. Der statuswert ist 
jedoch übermittelt. Jedoch läuft das Programm nicht mehr weiter somit 
erhält der slave keinen farbcode mehr.

Woran kann das liegen? Kann es eventuell dann liegen das ich nur ein 
Byte sende? Ansonsten sind die beiden sende Funktionen ja gleich.
Gast #4020662
Lesenswert?

Kommentar zu den Codes:

Sende ich vom Master einen ein rot also: rgb_send(1,255,0,0);
Hängt sich das Master Programm in diesem Schritt auf.
Sendet man jedoch rgb_send send(1,255,255,0); dann bleibt es nicht 
hängen.
Das selbe bei dem Status Send. Da hängt sich der Master auf wenn ich nur 
ein Byte schicke. Schicke ich jedoch noch 1 farbcode Byte dann bleibt es 
nicht hängen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren