PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit dem I2C Bus



zizou
16.09.2008, 14:19
Hallo,
ich möchte für zuhause eine Heizungssteuerung bauen. Dazu verwende ich das RN-Control Board und das Touchdisplay EAeDip240-7. Das Display steuer ich mit dem I2C-Bus an. Es funktioniert eigentlich alles einwandfrei, kann die Makro aufrufen und die Tastendrücke auswerten. Das Problem ist nur, dass sich bei irgendwelchen Tastendrücken das RN-Control Board bzw. der I2C-Bus aufhängt. Ich denk es liegt an dem I2C-Bus, weil immer die LED von der SCL-Leitung leuchtet, das heißt die SCL-leitung hat einen LOW-Zustand. Das komische ist halt auch, dass bei 95% der Tastendrücke alles funktioniert und dann hängt er sich wieder auf.
Wäre super wenn mir jemand weiterhelfen könnte?! Danke!!

Mit freundlichen Grüßen
Christoph

Dirk
16.09.2008, 20:52
Hallo Christoph,

ich rate 'mal, dass irgendwas (Software, Hardware) nicht stimmt.

Gruß Dirk

Jaecko
16.09.2008, 21:35
Hm wäre mal interessant, herauszufinden, welches Gerät dort "spinnt".
Hast du ne Möglichkeit, das Display über nen anderen Controller anzusteuern? Bzw. irgend ein Gerät, dass du statt dem Display ansteuern kannst? So würde sich der Ort des Fehlers eingrenzen lassen.

zizou
16.09.2008, 22:33
Hallo
Danke für eure Antworten!
Ich denk eher dass es an der Software liegt, bei der Hardware sind es ja nur die beiden Leitungen SDA und SCL, die ich miteinander verbinden muss. Oder kann es daran liegen, dass ich keine Masse an dem Display bei der Bus-Verbindung angelegt hab?
Ich hab noch einen DS1631 Temperatursensor da, werd den morgen mal noch anschließen und in Betrieb nehmen. Mal schauen ob dieser ohne Störung läuft.
Eine andere Möglichkeit wäre noch, das RN-Control Board mit Bascom zu programmieren und schauen wie sich da das Display verhält.
Mit freundlichen Grüßen
Christoph

Jaecko
17.09.2008, 10:31
im Prinzip sollte es egal sein, wo die Masse ist, solange alle Gerätemassen verbunden sind.
Ohne das RN-Control zu kennen: Sind Pullups für SCL/SDA nach 5V vorhanden?

zizou
17.09.2008, 12:39
Ich denk die sind schon vorhanden.
Für den I2C Bus verwende ich die Libs von Peter Fleury, muss ich eigentlich die Ports dem Bus noch extra zuweisen oder macht der des automatisch.
Muss ich die Pullups dann noch aktivieren?

Hab des so gemacht:

(Portc.0 ist SCL und Portc.1 ist SDA)

DDRC |= 0xFF;
PORTC = 00000011;

Aber die Aktivierung der Pullup-Widerstände nützt doch gar nichts, weil ich ja vorher PortC als Ausgänge definiert hab. Oder?

Hab da noch ne frage zu der Lib von Peter Fleury, ist es sinnvoller die Funktion i2c_start_wait zu nehmen, als ständig i2c_start?

Gruß Christoph

Jaecko
17.09.2008, 13:37
Also die I2C-Pins müssen nicht gesetzt werden; Die Pins werden hier ja nicht als normale Pins verwendet, sondern die dahinterliegende TWI-Hardware steuert diese. Also einfach ungesetzt lassen.
Die Pullups müssen dann irgendwo als Hardwareteile = Widerstände am I2C-Bus liegen. Idealerweise beim Master.

Hab auch die von P.Fleury. Ich nehm da immer das normale I2C_Start:



ui8_t retval = 0;
retval = I2C_Start(SlaveID);
if (retval)
{
I2C_Stop();
}
else
{
// ...Daten senden...
I2C_Stop();
}