Probleme mit I2C in Visual Basic

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
Reply to
Christof Rueß
Loading thread data ...

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

Reply to
Hendrik van der Heijden

"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

Reply to
Christof Rueß

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.