Probleme mit I2C in Visual Basic

Oct 07, 2004 2 Replies

Hallo NG!



Ich versuche mich gerade ein bisschen in I2C, da ich ein LC-Display (DSM-0822A mit PCF8576) geschenkt bekam, das sich nur über den 2-Wire-Bus ansteuern lässt.



Arne Rossius hat ja auf seiner Homepage schon ein Beispiel - nur leider hat mein PC keine serielle Schnittstelle mehr frei und der Parallelport hat es mir einfach angetan...



Deswegen habe ich mein Glück probiert und selbst etwas in Richtung I2C-Ansteuerung geschrieben. Es ist wieder so, wie es sein muss: Der PC werkelt zwar herum, am LCD tut sich hingegen nichts.



Wahrscheinlich steckt wieder einmal der Teufel im Detail - deshalb habe ich einen Auszug aus dem Modul hochgeladen:

formatting link
formatting link
(mit Syntax-Highlighting)



IMO ist die Ausgabe vom I2C Low- und High-Bit richtig - beim Start- und Stoppbit bin ich mir nicht so ganz sicher. Spätestens in der Funktion Init() müsste/sollte/könnte der Fehler stecken. Zum Testen des LCDs wird einfach mal "wild" in den Speicher geschrieben...



Dabei habe ich mich ein wenig an

formatting link
gehalten.



Die Wait-Befehle lassen die Funktion x ms schlafen, damit der Controller die Daten abarbeiten kann. (Die Werte sind momentan noch prophylaktisch etwas hoch gesetzt, da das ACK-Bit vom LCD nicht ausgelesen wird)



Ich hoffe, ihr findet meinen Fehler :)



TIA



Chris


www.hobby-elektronik.de.vu Achtung: E-Mail-Adresse im "From" ungültig! Verwendet hobbyelektronik at gmx dot net

Dein Startbit stimmt schon nicht.

aus'm Source, gekürzt: PortOut32 Port, SCLhi + SDAhi PortOut32 Port, SCLhi + SDAlo PortOut32 Port, SCLlo + SDAhi

Korrekt: PortOut32 Port, SCLhi + SDAhi PortOut32 Port, SCLhi + SDAlo PortOut32 Port, SCLlo + SDAlo

I2C_LoBit(), I2C_HiBit() und I2C_Stoppbit() sehen ok aus.

Nach jedem Datenbyte mußt du ein neuntes Lo-Bit schicken (ACK). Danach noch ein PortOut32 Port, SCLlo + SDAlo

Guck dir das Protokoll in einem Datenblatt an. Wenn du für deine Hardware kein passendes hast, gibt's z.B. in Datenblättern von I2C-EEPROMs (ST24C16) nette Diagramme.

Evtl. brauchst du nach jedem PortOut32-Befehl eine kurze Wartezeit, damit es funktioniert, schon 1ms reicht.

hth Hendrik vdH

"Hendrik van der Heijden" schrieb:

...nur gutes!

Vielen Dank!

Das LCD gibt jetzt schon einmal etwas aus - Sinn ist noch nicht dahinter, kommt aber noch :)

Die Pausen werde ich eh noch optimieren.

Mfg - YMMD!

Chris

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required