Forum: Mikrocontroller und Digitale Elektronik LCD an PCF8574: Suche C-Biblio


von Sirko (Gast)


Lesenswert?

Hallo,

das Thema wurde zwar sehr häufig diskutiert, aber Code gibt's dazu
leider wenig.
Ich möchte an einen Atmega32 über einen PCF8574 ein
4x20-HD44780-Display von Reichelt anschließen.
Da I2C mit der Bibliothek von Peter Fleury läuft, hab ich die Routinen
von
http://www.scriptkiller.de/avr_pcf8574_hd44780_display.php
genommen und angepasst.
Aus
1
void lcdOut(unsigned char c) {
2
   i2cMasterSendNI(LCD_I2C_ADDR, 1, &c);
3
}
wurde nur
1
void lcdOut(unsigned char c) {
2
   i2c_start_wait(LCD_I2C_ADDR +I2C_WRITE);     
3
   i2c_write(c);                     
4
   i2c_stop();
5
}
Leider zeigt das Display nur in der 1. und 3. Zeiile schwarze Balken
an, die beim Init gelöscht werden. Außerdem können die Routinen wohl
nur 2zeilige Diplays ansprechen.
Da wohl viele auch Ihre Displays so anschließen und ich das
Programmieren wohl nie richtig hinbekommen würde, suche ich eigentlich
ne Biblio dafür.

Hoffentlich könnt Ihr mir helfen.
Danke
Sirko

von Jörg Z. (controller_jo)


Lesenswert?

Hallo Sirko,

läuft das Projekt bei Dir wirklich?
Ich möchte auch ein I2C-LCD am Mega 32 betreiben. Doch leider klappt das 
bei mir nicht. Es fehlt z.B. die Datei i2c.h.
Könntest Du das komplette Projekt mal zur Verfügung stellen?

Gruß Jo

von Peter D. (peda)


Lesenswert?

Jörg Zinke schrieb:
> Ich möchte auch ein I2C-LCD am Mega 32 betreiben. Doch leider klappt das
> bei mir nicht.

Warum?
Der ATmega32 hat doch massig IO-Pins, da sollten doch leicht 6 für das 
LCD übrig sein.

I2C ist in etwa, wie von hinten durch die Brust ins Auge. Du nimmst 
einen Bus, um einen anderen zu simulieren. Und eventuell simulierst Du 
dann das I2C auch erstmal in Software.

Ein direktes Ansteuern eines LCD im 4Bit-Mode benötigt nur eine einzige 
IO-Funktion, das Senden eines Nibble. Alles andere baut darauf auf.

Du mußt Dir in I2C nur eine Nibble-Funktion basteln, das sind dann 
Start, 4 Byte I2C-Senden und Stop. Man sieht also, über I2C wird das LCD 
schon recht CPU-intensiv.


Peter

von Jörg Z. (controller_jo)


Angehängte Dateien:

Lesenswert?

Hallo Peter,

da muss ich Dir Recht geben. Zeitlich gibt's da gar keine Frage. 
Praktisch habe ich das ja nun auch gesehen, dass alleine das Senden 
eines Zeichens mit Setzen und Rücksetzen des Enable im 4-bit-Modus ein 
Wahnsinnsakt ist rund 6 Byte über den I2C).
Mir gefiel der einfache Umgang mit dem I2C-Bus bei anderen Systemen 
(z.B. C-Control-II /Softwarebibos für C von A. Helbig). Nun wollte ich 
gern mit dem AVR einige Aufgaben erschlagen wie z.B. den PID-Regler von 
Atmel (App-Note) für einen Heizungsmischer, Datensammler auf SD-Karte. 
Dort bieten sich die AVRs an, da sie diese Einzelfunktionen schnell 
verarbeiten können und auch mittlerweile günstige Hardware z.B. bei 
Pollin zu kriegen ist. Nun möchte ich gern diese Einzelanwendungen über 
I2C verbinden um z.B. Temperaturwerte und Sollwerte auszutauschen.

Sozuagen zum Warmwerden möchte ich den I2C-Bus am Portextender mit LCD 
als Testgrundlage aufbauen. Bis jetzt kriege ich hier überhaupt noch 
nicht die Kurve. Praktisch kann ich bei dieser Konstellation Mega32, I2C 
und LCD nie genau sagen was nicht geht. Im Endeffekt sehe ich nur, dass 
am LCD nichts herauskommt.

Im Anhang mal eine Version eines Versuchs (bis jetzt natürlich 
erfolglos).

von holger (Gast)


Lesenswert?

>Nun möchte ich gern diese Einzelanwendungen über
>I2C verbinden um z.B. Temperaturwerte und Sollwerte auszutauschen.

I2C ist ein Bus für Fernsehgeräte und ähnliches
Multimedia Gedöns. Den führt man am besten nicht
mal aus dem Gehäuse heraus.

von Andreas D. (rackandboneman)


Lesenswert?

Vor allem bei Nibble Mode sehr, sehr genau auf die Initialisierung 
achten. Man kann beim tatsächlich modusumschaltenden Befehl schon so tun 
als ob man im 4-Bit Modus ist, muss ihn dann aber zweimal schicken weil 
die Optionen zerhackt werden bzw dem Tageszustand von D0-D3 enstprechen. 
Wer jedes Byte zweimal umdrehen muss kann die Optionen an diesen Pins 
natürllich festverdrahten :)

von Jörg Z. (controller_jo)


Lesenswert?

Kann man so sehen. Aber an meinem Beispiel Haussteuerung verbindet ein 
I2C-Bus verschiedene 8574-Bausteine und andere "Feldgeräte". Für den Bus 
gibt es Transceiverbausteine. Dann sind mit Cat5 locker 50 bis 100m 
drin. Busstruktur ist stern- und linienförmig aufbaubar. 
Gewschwindikgkeit reicht locker aus. Das System ist für home-automation 
absolut preiswert und stabil. Master ist hier wie schon erwähnt ein 
C-Control-II. Auf die Atmels bin ich gekommen, da in den Applikationen 
I2C-Anbindungen sehr oft dabei sind.
Meine Heizungs-/ Solarsteuerung läuft jetzt schon rund 4 Jahre. Was mir 
hier eben noch fehlt, ist z.B. das Net-IO-Board von Pollin an den 
I2C-Bus zu bringen, um das Ganze ans Net zu bringen.
Alternative wären sonst immer die RS232-Schnittstellen der Controller, 
aber die sind auf keinen Fall besser und meist schon belegt.

Gruß Jo

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.