PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Software I2C bzw. TWI



simple
18.10.2006, 14:06
Hi zusammen,

ich programmiere einen Atmega16 in C. Ich versuche einen I2C softwaretechische zu implementieren. Der µC wird der Busmaster sein. Es stehen soweit alle Funktionen (startbedingung, stopbedingung, writebyte, readbyte). Allgemein habe ich mich an dem Code der Procyon Lib orientiert. Wenn ich habe der Slave auslesen möchte (also SDA realease und mit dem Master 8 (bzw 9) Clockimpulse erzeuge), dann will der Slave die Dataline partout nicht runterziehen. SDA bleibt unter allen Umständen high.

Hat jmd damit erfahrung?
Wäre suuper dankbar für Eure Tips!

Danke, simple.

m.a.r.v.i.n
18.10.2006, 14:21
Hi simple,

gibt es Pullup Widerstände am I2C Bus an Takt und Datenleitung?

Gruß m.a.r.v.i.n

simple
18.10.2006, 14:52
Ja. Ich verwende die internen des µC.

Zusatzinfo: ich hab an denselben Ports schon mal mit der Hardwareunterstützung des I2C vom µC mit meinem Slave tadellos zum laufen gebracht.
Meine Softwareimplementierung dagegen funktioniert nicht :(

simple
18.10.2006, 15:41
Ich habe mal versucht die Messung zu skizzieren (siehe Anhang).
Was mich beunruhigt ist
a) dieser kleine Peak der zwischen dem LSB und dem ACK Impuls auftritt (v.a. die Pegelhöhe ist genau mittig)
b) Dass beim 9. Clockimpuls die Dataline gegen Ende des Impulses von 0->1 wechselt.

Bernhard667
21.10.2006, 16:36
Hallo,

schaltest Du im Master, wenn der Slave ziehen darf, auch wirklich den High Treiber ab?
Also ist der SDA Pin des Masters auf Input?
Sonst versucht der Slave runterzuziehen, aber der Master hält dagegen und es gibt einen Kampf der Treiber.
Kannst auch mal in Serie einen Wiederstand einbauen in die SDA Leitung. Dann kannst Du den Treiberkampf mit dem Oszi sehen

PS:
Bei mir geht der Software I2C

Bernhard

simple
21.10.2006, 20:07
Hi,

es war tatsächlich so, dass ich nach probieren herausgefunden habe, dass sowohl master als auch slave am bus treiben.

Aber sagt mir mal wie das im AVR intern an den hardwareunterstützten I2C ports funktioniert?

Vielen Dank für Eure Tip oben,
simple.

Bernhard667
27.10.2006, 19:21
Hallo,

wie das die Hardware TWI macht.
Die bedient einfach nur den Pulldown Fet des Ausgangs.
Der Hightreiber bleibt aus. Damit kann der externe (oder interne) Pullup nach oben ziehen.
Wenn 1 oder mehrere Busteilnehmer runter ziehen, gibt es ein low auf dem Bus.


Berhard