Unerklärliches (zumindest für mich) TWI-Verhalten

orb

Neues Mitglied
31. Mai 2013
2
0
0
Sprachen
  1. ANSI C
  2. Assembler
Hallo, ich bin der neue und hab gleich was zum knobeln.

Da ich mein Aquarium auf LED-Beleuchtung umgestellt hab dachte ich mir, ich könnte die alte mechanische Schaltuhr rauswerfen und gleich was hübsches mit Temperaturanzeige, Sonnenauf- und Untergang und Heizungsteuerung bauen.
Also nen Mega32 gegriffen, DS1307 RTC und nen 240x64Pixel Display lagen auch noch rum.
Irgendwann nach dem Aufräumen des Programmcodes und einem Testlauf der PWM-Routine lief das Programm nicht mehr an. Ein Durchlauf mit Debugausgaben auf der seriellen Schnittstelle zeigte, daß das Programm beim Auslesen der RTC hängen blieb.
Also Oszi angeklemmt zum mitlesen.
Schaltung läuft. Oszi abgenommen. Schaltung hängt. LA angeschlossen. Schaltung hängt.
Jetzt hab ich mich in der Fehlersuche verrannt und mit allem möglichen RC-Kombinationen versucht das Verhalten ohne Oszi nachzustellen.
Ohne Erfolg. Diverse Mega32 ,Mega664, Mega664P probiert, alle das gleiche Verhalten. (was hätte ich in der Woche alles sinnvolles machen können *grmpf*)
Letztendlich war es doch ein Programmfehler, beim Aufräumen hatte ich eine Routine die auf den TWI zugreift vor den TWI-Init geschoben.
Also hatte ich ein
TWCR=(1<<TWEN)|(1<<TWINT)
bevor ich TWBR und TWSR gesetzt habe.

Die Frage die ich mir jetzt stelle ist, warum ein Fluke 123 das Setzen der Busgeschwindigkeit ersetzen kann? Ist da schon mal jemand drüber gestolpert?
 
Die beiden Register sind mit (für Dich) falschen Werten (vor)initialisiert. Mal am Mega32 durchgespielt:
TWBR ist 0b00000000 also=0
In TWSR kannst Du eh nur den Prescaler beeinflussen - der ist default=1.

Nach der Formel von S.175 bliebe also SclClock=MainClock/16. Ob der Sensor die schafft, weiß ich nicht.
ABER normalerweise sollte man ja die Pullups an die SCL-Frequenz anpassen. Vielleicht hilft Dir da das Oszi?
Hast Du mal mit den Pullups "gespielt"?
 
Davon bin ich auch ausgegangen, bei 20Mhz/16 liege ich bei 1,25Mhz I2C-Takt. Der DS1307 mag aber nur 100kHz und Clockstretching macht er nach Datenblatt auch nicht. Ich muß das ganze nochmal aufbauen und die Clockfrequenz messen. Getan: 540kHz.

Der Oszieingang mit 1MOhm, 12 pF sollte am Pullup (getestet 4k7, 10k und 2k2) eigendlich nicht viel ändern, sie liegen ja nicht parallel sondern in Reihe. Ich hatte auch versucht das Verhalten bis 100k 1nF runter nachzustellen aber ohne Erfolg.
Ach ja, ein 24c64 EEProm das ich mit auf den Bus gehängt hatte, änderte auch nichts an dem Verhalten.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)