Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: 4 Zeilen/40 Zeichen LCD über I²C Kategorie: Programmierung (von Andi - 30.04.2009 7:26)
Als Antwort auf Re: 4 Zeilen/40 Zeichen LCD über I²C von Michael - 29.04.2009 15:19
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, eigenes Board, OSOPT_V2
Hallo Michael,

für deine Schütze solltest du erstmal Funkenlöschung betreiben über Kondensator-Widerstand
oder Dioden(bei Gleichspannung)

und pull up widerstände an den Displayports wenn nicht schon vorhanden.....

viel Erfolg,

Andibu



> > Hallo Michael,
> >
> > > Bin gerade dabei die Funktionen in pfdlcd.c2 auf ein 4 Zeilen/40 Zeichen LCD anzupassen.
> > > Habe dazu das pfdlcd- Interface und den 4x40 LCD- Adapter von CCTools im Einsatz.
> > > Werde die R/W- Leitung als 2. Enable verwenden. Der erste LCD- Controller funktioniert schon,
> > > ...
> > > Wenn ich das 2. Display ansprechen will und dazu in den Funktionen in pfdlcd.c2 den R/W- Port
> > > aktiviere, muss ich dann den Enable- Port (E1) trotzdem auf â??highâ?? lassen oder nicht?
> >
> > Nein. Es wird nur ein High-Impuls ausgegenen.
> > Im Ruhezustand sollte Enable auf low bleiben.
> >
> > > Habe es mal so probiert, dass ich in meine Ansteuer- Funktionen immer das entsprechende Enable
> > > setze und das Andere zurücksetze. Also entweder der E-Port oder R/W-Port.
> > > Das funktioniert aber nicht.
> > > In der Doku zum  4x40 LCD- Adapter steht nur, dass man über Jumper auch das R/W- Signal
> > > als E2 verwenden kann (was ich natürlich getan habe).
> > > Aber nicht, ob das Enable in diesem Fall für beide Controller gilt und der Adapter selbstständig
> > > am Ausgang zum LCD entsprechen E1 oder E2 aktiviert.
> >
> > Doch, in der Anleitung zum 4x40 Adapter steht genau dies.
> > Enable in Deinem Fall vom PCFLCD-Adapter bleibt Enable für beide LCD-Hälften.
> > Wenn auf R/W zum umschalten gejumpert wird, dient die R/W-Leitung dazu,
> > zwischen den beiden Hälften umzuschalten. Low=obere Hälfte, High=untere Hälfte.
> >
> > Die Ports des PCF-LCD-Interfaces werden standardmä�ig so verwendet:
> > /* P0= RS                                                         */
> > /* P1= R/W                                                        */
> > /* P2= E                                                          */
> > /* P3= LCD-Light                                                  */
> > /* P4-7= Data                                                     */
> >

> >
> > In Deinem Fall ändert sich das aber zu folgendem:
> > /* P0= RS                                                         */
> > /* P1= LCD-Select                                                 */
> > /* P2= E                                                          */
> > /* P3= LCD-Light                                                  */
> > /* P4-7= Data                                                     */
> >

> >
> > Um bei Deinem Beispiel zu bleiben, welches vom Ansatz schon korrekt war:
> > function select(byte select)
> > {//wenn select true (ungleich 0) dann untere hälfte, sonst obere
> >  enable=(select!=0) and 0x02;
> > }
> >
> > function init ()
> > {
> >  light=light and 8;
> >  i2c.cstart(PCF);
> >  i2c.write(0x30 or light or enable);
> >  i2c.write(0x30 or light or enable);
> >  i2c.write(0x30 or light or enable); // Function Set 8 Bit Controller 1/2
> >  i2c.write(0x30 or light or enable);
> >  sleep 2;
> > ...
> >

> >
> > Allerdings würde ich hierfür eher die bereits vorhandene Variable "light" mi�brauchen.
> > Dann mu� nur an zwei Stellen etwas geändert werden und die Ausführungsgeschwindigkeit
> > wird nicht verlangsamt:
> > function setLight(byte state)
> > {
> >  i2c.cstart(PCF);
> > // light= (state!=0) and 8;
> >  light= ((state!=0) and 8) or (light and 2); // R/W beibehalten
> >  i2c.write(light);
> >  i2c.stop();
> > }
> >
> > function select(byte select)
> > {//wenn select true (ungleich 0) dann untere Hälfte, sonst obere
> >  light=(light and 8) or ((select!=0) and 2);
> > }
> >
> > function init ()
> > {
> > // light=light and 8;
> >  light=light and 10; //0b1010
> > ...
> >

> >
> > Mehr mu� nicht geändert werden.
> >
> > MfG André H.
>
> Ja sauber, jetzt wo ich es weiÃ? lese ich es auch so in der Beschreibung ;-)
> Aber auf jeden Fall funktioniert es so. Die Idee mit dem Verwenden der "light"- Variable war auch gut.
> So musste ich nicht das ganze Modul durch den Wolf drehen.
>
> Danke auf jeden Fall mal!
>
> Kämpfe jetzt noch mit dem Problem, dass das Display immer wenn die Schütze meiner
> Heizungssteuerung einschalten nur noch Schrott anzeigt.
> Werde wohl ein Metallgehäuse au�en rum bauen müssen.
>
> >


    Antwort schreiben


Antworten: