Forum: Mikrocontroller und Digitale Elektronik I2C Übertragungsproblem


von Peter M. (Gast)


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.

von Rene H. (ballibou)


Lesenswert?

Hi,

zeig mal die ISR deines Slaves. Mit einem Protokoll ist das ganze ne 
kleinigkeit. Ich könnte dir da was fixes basteln aber vll ist es ja auch 
nur ne Kleinigkeit in deinem Code.

Poste mal die Sende und Empfangsroutine.

von Parabol1337 (Gast)


Angehängte Dateien:

Lesenswert?

hier mal die Codes =)

von Peter M. (Gast)


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.

von Parabol1337 (Gast)


Lesenswert?

Problem hat sich erledigt, SCL war zu langsam

von Pete K. (pete77)


Lesenswert?

Schreib mal das F_CPU in das Makefile, so dass alle Files davon etwas 
haben.

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.