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

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> Hallo Rolf, > > > ich fürchte, da ist in pcflcd.c2 doch was nicht ganz ok. > > Und zwar in der Initialisierung für das Display fast am Ende der Funktion. > > Bevor Du jetzt wieder anfängst von nicht vorhandenen Fehlern > zu schreiben, schlage ich einmal vor, daß Du Dir eine > <a href="http://www.lcd-module.de/deu/pdf/doma/4_16.pdf"</a>Doku zum HD44780</a> durchliest. :-) > > In der Initialisierungs-Sequenz der LCD-Module sind keinerlei Fehler. > > > Wenn Du die Website http://www.sprut.de/electronic/lcd/ (hatte Link gepostet) > > anschaust, gibt es dort unten die Tabelle zum initialisieren eines 4-Bit-Displays. > > Schon dort in dieser Tabelle hat sich ein Fehler eingeschlichen, der anscheinend nie > > gefixt und von vielen Leuten ohne Prüfung einfach kopiert wurde. Ich hab erst geglaubt, ich könne > > selbst nicht mehr zählen aber ich komme immer auf den Fehler.... > > Das ist der Grund, warum ich mich nur aus Infos von Originaldatenblättern verlasse. :-) > > > Vergleichst Du Deine Befehlssequenz nicht mit der fehlerhaften Tabelle sondern mit den richtigen > > Befehlen aus der Tabelle weiter oben oder den Datenblättern, merkst Du, das sich da jemand beim > > Zählen von Bits bei der Nibleaufteilung für den Entry-Mode verzählt hat. > > > > Einfach und nachvollziehbar, weiter oben gehst Du das Register zum Einschalten vom Display > > und Cursor mit: 00 C0 an. > > > > i2c.write(0x04 or light); // Display Control > > i2c.write(0x00 or light); // Set highnibble > > i2c.write(0xC4 or light); // Cursor Off, display On > > i2c.write(0xC0 or light); // Set lownibble > > > > an, dann kann aber folgendes nicht stimmen. 00 60 > > > > i2c.write(0x04 or light); // Entry-Mode > > i2c.write(0x00 or light); > > i2c.write(0x64 or light); // inkrement, Cursor-shift > > i2c.write(0x60 or light); > > Ähhh. Hier ist alles korrekt. Schau bitte mal in die Dokus von HD44780. > Erst High-Nibble, dann Low-nibble !! im 4-Bit-Mode. > > So entsprechen die beiden Befehle oben genau diesem: > 0x0C = 0b00001100 = Register Display On/Off control: > Display ein, kein Cursor, Cursor als Unterstrich(:wird ignoriert, da kein Cursor) > 0x06 = 0b00000110 = Entry-Mode: inkrementieren, Cursor autom. schieben. > > Also, was soll daran nicht stimmen ?? > Sonst hätte die letzten zwei Jahre kein Display gefunzt. > Und das währe mir bei ein paar gewerblichen Projekten, teils Kleinserien, schnell aufgefallen. :-) > > > So ist's richtig: 10 C0 > > > > i2c.write(0x14 or light); // Entry-Mode > > i2c.write(0x10 or light); > > i2c.write(0xC4 or light); // inkrement, Cursor-shift > > i2c.write(0xC0 or light); > > > > Ein wirklich interssanter Fehler da er nicht nur bei Dir auftaucht.... :-) :-) :-) > > Also, das wäre ein Fehler ! > 0x1C = 0b00011100 = Cursor/Display Shift: Display einmal nach rechts schieben. > > Warum willst Du den Displayinhalt beim Init einmal nach rechts schieben? :-) > Hier kann ich nur wieder sagen: Den HD44780 Befehlssatz lesen ! > > > Dann wollte ich noch wissen, warum Du am Anfang mehrmals die gleichen Bytefolgen in das > > PCF schreibst... das mit dem Low-Nibble 4 hab ich verstanden, Datenübergabe bei fallendem E... > > > > i2c.write(0x30 or light); //??? > > i2c.write(0x30 or light); //??? > > i2c.write(0x34 or light); // Function Set 8 Bit > > i2c.write(0x30 or light); > > sleep 2; > > > > i2c.write(0x30 or light); //??? > > i2c.write(0x34 or light); // Function Set 8 Bit > > i2c.write(0x30 or light); //??? > > i2c.write(0x30 or light); > > > > Das ist Funktion-Set im 8Bit Mode, um den 8-Bit-Mode zu aktivieren. > (Wird genauso bei lcdext.c2 und rblcd.c2 gemacht) > Dies wird im Ganzen dreimal gesendet. > Der Sinn ist ganz einfach erklärt: > Bei einem Reset weist Du nicht, ob ein Kommando (beide Nibbles im 4-Nbit-Mode) > komplett gesendet wurde, oder nur ein Nibble. Bei letzterem mußt man > Das Display auf jeden Fall wieder "syncronisieren". > Das geht, indem man das Display geziehlt in den 8-Bit-Mode versetzt, und das öfters. > Die Anzahl muß dabei ungerade sein, da es drei Möglichkeiten für den > Zustand des Display gibt: > 8-Bit Mode: Hier wird bereits das erste Funktion-Set erfasst. > Die beiden nachfolgenden Function-Set wiederholen lediglich dieses Kommando. > 4-Bit-Mode: Hier werden zwei 8-Bit-Befehle benötigt(=2 Nibbles), um zuerst > in den 8-Bit-Mode zu schalten. Das dritte Function-Set wird als 8-Bit-Kommando > erfasst. > 4-Bit-Mode/half Byte: Hier wurde vor einem Reset des Controllers > noch ein Nibble im 4-Bit-Mode gesendet. Das erste Funktion-Set hat hier > keine Auswirkung =&gt; Low-Nibble nach Abbruch durch Reset. > Das zweite Function-Set ist das High-Nibble. Das dritte Function-Set > muß noch gesendet werden, damit Zwei Nibbles gesendet wurden. > > Erst jetzt kann man mit der "normalen" initialisierung beginnen, da das Display > sich nun auf jeden Fall im 8-Bit-Mode befindet. > Hier der Init im Klartext: > > 0x30 Function-Set 8Bit als 8Bit-Kommando > 0x30 Function-Set 8Bit als 8Bit-Kommando > 0x30 Function-Set 8Bit als 8Bit-Kommando > // spätestens ab hier befindet sich das Display garantiert im 8-Bit-Mode > 0x20 Function-Set 4Bit als 8Bit-Kommando > // ab hier: Display befindet sich im 4-Bit-Mode > 0x24 Function-Set 4Bit, 2 Zeilen, 5x7Dots, als 4Bit-Kommando > 0x0C Display On/Off-Control, Cursor Off, Display on, als 4Bit-Kommando > 0x01 Display Clear, als 4Bit-Kommando > 0x06 Entry-Mode, Auto increment, Cursor-Shift, als 4Bit-Kommando > > > > Mein Display macht immer noch nicht was es soll, ich bin mir aber jetzt sicher, das ich es nicht falsch rum > > (also SEIKO-Zählweise) angeschlossen hab.... wenn dem so wäre, lägen auf D6 und D7 Masse und + 5V an... > > ich glaube nicht, das sich das Display dann ausser mit einer Qualmwolke gemeldet hätte ;-) > > Anscheinend ist der Controller aber doch etwas anders / empfindlicher als der übliche 44780 > > Falsch angeschlossene Hardware endet nicht immer in Rauchwolken. > Gerade Displays kann man durch Falschanschluß sehr leicht schrotten. > Wahrscheinlich ist bei Dir irgendeine Datenleitung des Displays durchgebrannt. > Mein Tip: Versuch' einmal die Original-Doku zu Deinem Display ausfindig zu machen, > damit Du weist, wie die Pinbelegung wirklich lautet. > Auf den meisten Display steht auf der Platine eine Herstellerbezeichnung. > Mit Hilfe dieser sollte sich leicht das passende Datenblatt zum Display > (nicht zum Controller !) finden lassen. > > > Dann möchte ich noch eine Änderung des Funktionskopes von init anregen. > > Man muß vor jedem init ein setpcf machen da byte PCF; nicht initialisiert ist. > > Bei mehreren Displays entsprechend jedesmal vor dem init und dann pro LCD ein init... > > mit: > > > > function init (byte pcfnr) //!!! > > { > > if pcfnr > 7 PCF=((pcfnr+16) shl 1)or 64; else PCF=(pcfnr shl 1) or 64; //!!! > > light=light and 8; > > i2c.start(PCF); > > > > könnte man sich das sparen und es kommt keiner auf die Idee, das setpcf vor dem init zu vergessen... > > denn dann muß ja pcflcd.init(displaynr); aufgerufen werden und byte PCF; bekommt damit zwangsweise > > ein Wert. Die Funktion setpcf muß aber bleiben damit im Betrieb die Displays umgeschaltet werden können. > > Das sehe ich nicht als Fehler sondern eher als "Verbesserungsvorschlag". > > Ich hatte das Anfangs(vor zwei Jahren) auch überlegt. Jedoch habe ich aus Kompatibilitätsgründen > zu den anderen LCD-Modulen die Init-Funktion ohne Parameter gelassen. > Außerdem benötigt man init() nicht nur beim Systemstart, sondern auch > während dem Betrieb, wenn man mit längeren Leitungen arbeitet. > Hin und wieder ein Zwangs-Init kann hier nicht schaden. > z.B. gibt's bei meinen Anwendungen immer einen Init, wenn ich von > der Standardanzeige ins Menü wechsle. > (Es kann immer eine Störung geben, bei der ein Nibble "untergeht") > > > MfG André H.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB