Forum: Mikrocontroller und Digitale Elektronik ATmega und TWI (SCL-Taktgenerierung)


von Olli (Gast)


Angehängte Dateien:

Lesenswert?

Servus,

ich versuche gerade mit dem ATmega8535 via TWI (I2C) nen PCF8583
anzusteuern.
Allerdings immer nachdem die Slaveadresse gesendet wurde steht der Wert
0x38 im TWStatusRegister. (Arbitration lost in SLA+W or DATA bytes)

Um Hardwarefehler weitgehendst auszuschließen habe ich im Moment am Bus
nur die PullUP-Wiederstände angeschlossen. Der uC sollte also
eigentlich ein NACK zurückbekommen, da die Leitung wärend des 9.
SCL-Taktes ja auf HIGH gezogen wird.

Noch eine weitere Frage: Muss ich selbst die Taktrate für SCL
einstellen? Irgendwie wird mir das aus dem Datenblatt nicht so ganz
klar. Ich habe nach der Formel nun mal 10 ins TWBR geschrieben und TWPS
auf 1 gesetzt. (100kHz bei 8MHz Clock)

Aber auch wenn ich das weglasse, ändert das nix am Ergebnis.

Wäre nett, wenn mir da jemand weiterhelfen könnte.

Gruss Olli

PS: Auf dem Display steht dann 125 (also DEBUG1, DEBUG2 und
arbitration)

von Peter Freund (Gast)


Lesenswert?

Die Dokumentation der TWI Funktionen ist wirklich sehr schlecht. Das
erlebe ich im moment auch gerade.

Zur SCL Frequenz kann ich nur soviel sagen, das man sie selbst
einstellen sollte wenn man Master --> Slave Kommunikation wünscht.
Steht so jedenfalls im Datasheet.
Die Initialwerte von TWBR und TWPS sind alle 0 (bei meinem Mega16).Wenn
ich es richtig verstanden habe kann TWBR maximal 256 (2^8) sein und
TWPS 64 (4³).
Die Statuscodes beziehen sich aber immer auf die Initial-Werte. Ich
frage mich auch wie man denn eine Verbindung zwischen Master/Slave
herstellen soll ohne TWBR/TWPS zu ändern, wenn gleichzeitig gesagt wird
das sich die Statuscodes dann auch ändern. Soll man sich die
Statuscodes dann aus den Fingern saugen oder hab ich da was
missverstanden ?

von Beda Ruedi (Gast)


Lesenswert?

Hallo,

Wenn ich richtig gerechnet und verstanden habe arbeitest Du mit 222kHz
CL Clock Speed

8MHz / (16+(2*10*1)) = 222'222.222 Hz

Gruss Ruedi

von Olli (Gast)


Lesenswert?

Im Datenblatt vom ATmega8535 sieht die Formel so aus:

CLOCK / (16+(2*TWBR*4^TWPS)) = SCL-Takt

Bei mir also

8MHz / (16+(2*10*4)) = 83.333,33..Hz

Das sind zwar keine exakten 100kHz aber näher komme ich an die 100
nicht ran. 4^1 ist schon das niedrigste und für TWBR sollte kein Wert
kleiner 10 ins Register geschrieben werden.


"Note: TWBR should be 10 or higher if the TWI operates in Master mode.
If TWBR is lower than
10, the Master may produce an incorrect output on SDA and SCL for the
reminder of the
byte. The problem occurs when operating the TWI in Master mode, sending
Start + SLA
+ R/W to a Slave (a Slave does not need to be connected to the bus for
the condition to
happen)."

Aber irgendwie passt da was nicht. (entweder hab ich da nen Denkfehler
oder die Angaben sind falsch) Im Datenblatt steht, dass ein Bustakt bis
400kHz möglich sei. Mit meinem 8MHz Quarz komme ich bei der Formel aber
nie über die 83kHz.

von Peter Freund (Gast)


Lesenswert?

Der kleinste Wert für TWPS ist 1 (4^0).(Beide Bits in TWPS sind dann
0).
Die Rechnung von Beda Ruedi stimmt also ^^.

von Olli (Gast)


Lesenswert?

Ich hab mich heute nochmal damit befasst.

@Peter: Du hast recht. Ich hab das im Datenblatt so verstanden, dass
bei 00 für TWPS der prescalar Value 1 ist und dann gerechnet 4^1.
Wenn ich nun mit 4^0 rechne, ergibt das für TWBR 32 und somit exakt
100kHz.

Ich hab auch noch nen anderen Fehler gefunden. Ich habe TWSTA beim
senden der Slaveadresse ausversehen wieder auf 1 gesetzt.

Fehler behoben und jetzt läufts. Zumindest antwortet der Baustein mit
einem ACK. (Displayausgabe 1233)

Vielen Dank für eure Hilfe.

Gruss Olli


PS: Wen der ASM-Code interessiert kann sich bei mir per eMail melden.
Dateianhang ist zur Zeit leider deaktiviert.

von guenter (Gast)


Lesenswert?

Hallo Olli

Bitte um Zusendung des ASM-Codes für TWI

Vielen Dank

Günter

von Jörg Maaßen (Gast)


Lesenswert?

Hallo Olli,

mir bitte auch.

Gruß Jörg

von DerInder (Gast)


Lesenswert?

Hallo Olli,
da ich z.Zt. ähnliche Probleme mit dem TWI habe hätte ich auch gerne
deinen ASM-Code

Gruß
-=jens=-

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.