Hallo !!! Es klappt nicht. Ich will einen IC2 Bus zum laufen bringen. Ich arbeite mit CodeVision. Der uC gibt die Startbedingung aus. Danach wartet er auf das TWINT flag. Vergebens. TWSR=0xF8. Ich habe den uC auf dem STK501. Die Pins ziehe ich mit einem 100 ohm Widerstand nach oben. Das Oszi zeigt mir eine Startbedingung an. Sie wird ständig wiederholt. Wisst ihr was ? Joe
Hab mir jetzt zwar deinen Sourcecode noch nicht angeschaut, aber 100 ohm ist sehr wenig als Pullup! Wenn du rechnest 5/100=0,05A =50mA! Wenn du jetzt in den Maximum Ratings vom µC schaust siehst du, dass du max. 40mA ziehen darfst! Als ich das letzte Mal I2C verwendet habe habe ich 10k verwendet. => Hat einwandfrei funktioniert Grüße
gibt es da einen zusammenhang,dass das TWINT nicht gesetzt wird ? ich werde trotzdem mal die wiederstände ändern.
Was für einen Baustein(I²C Slave) willst Du den ansprechen ? 400kHz sind für viele ein bisschen heftig ! Die meisten Bausteine (8574 usw.) können nur 100kHz ! Der 100 R Pullup ist definitiv viel zu klein. 10K oder 4,7K funzt sicher ! MfG Uwe
na ja, der slave ist noch nicht dran. trotzdem, nach datenblatt muß doch das TWINT flag gesetzt werden, wenn die die Startbedingung auf den Bus gesetzt wurde. bin leider noch nicht dazugekommen die R zuwechseln.
ich habe jetzt die R geändert. ich habe einen LM75 temperatursensor von national semiconductors angeschlossen. nach dem senden der startbedingung wirt das TWINT flag gesetzt. TWSR=$08 zeigt dann das eine Startbedingung gesendet wurde. das ist schon mehr als vorher. das kann man auch auf dem oszi sehen. sda geht auf low, kurz später folgt scl. nun die adresse: #define TWINT 7 #define TWSTA 5 #define TWEN 2 #define TWSTO 4 #define TWEA 6 #define START 0x08 #define MT_SLA_ACK 0x18 //Sende adresse printf("\nSende adresse\r\n"); TWDR=0x4F; TWCR=(1<<TWINT)|(1<<TWEN); //warte auf Twint flag, adresse wurde gesendt while (!(TWCR&(1<<TWINT))); printf("TWINT Flag Set\r\n"); //check start condition if((TWSR&0xF8)!=MT_SLA_ACK) printf("Ack NOT received\r\n"); else printf("Ack received\r\n"); das TWINT flag wird gesetzt, aber weder bekomme ich ein ack noch sehe ich was auf dem oszi(müsste ich doch?). in der doc über den mega64 wird etwas von einer 9 bit adresse geschrienben (7data,1R/W,1Ack). TWDR hat doch nur 8 bit. wie schreibe ich den die anderern zwei (R/W , Ack) ? joe
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.