Forum: Mikrocontroller und Digitale Elektronik atmel mega64 ic2 codevision


von joe patterno (Gast)


Angehängte Dateien:

Lesenswert?

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

von Clemens (Gast)


Lesenswert?

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

von joe patterno (Gast)


Lesenswert?

gibt es da einen zusammenhang,dass das TWINT nicht gesetzt wird ?
ich werde trotzdem mal die wiederstände ändern.

von U.Bleile (Gast)


Lesenswert?

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

von joe patterno (Gast)


Lesenswert?

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.

von joe patterno (Gast)


Lesenswert?

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