www.mikrocontroller.net

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


Autor: Olli (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)

Autor: Peter Freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Beda Ruedi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ^^.

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: guenter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Olli

Bitte um Zusendung des ASM-Codes für TWI

Vielen Dank

Günter

Autor: Jörg Maaßen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Olli,

mir bitte auch.

Gruß Jörg

Autor: DerInder (Gast)
Datum:

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

Gruß
-=jens=-

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.