
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo, konnte endlich das Problem lösen und kann das Thema hoffentlich bald beenden: Folgender Zusatz zu den vorangegangenen Notizen: 1. Habe den 74HCT4049, der wiederholbar nicht mit der spezifizierten Vs gearbeitet hat, rausgehauen und somit habe ich auch die Diode auf Massepotential entfernt --> saubere Lösung. Der neue IC 74HCT4094 arbeitet nach Spec. 2. Die 1N4148 Wald- und Wiesen-Diode an Pin 12 des Schieberegisters für eine UND-Verknüfung zur Erzeugung des Enable-Signals fürs LCD habe ich nun doch gegen eine Schottky-Diode BAT43 getauscht. Das reicht für die Anforderungen und diskreten Aufbau. 3. Das Problem, dass das LCD nach Power-On oder auch nach Reset nicht permanent richtig funktionierte, lag an der nicht ausreichenden Initialisierung des Display-Controllers. Ein Blick in das Datenblatt des HD44780 hat erfolgreich weitergeholfen. Ich habe die Conrad-Beispiele zur CC1-MainUnit lcdx.bas auf das Zweidraht-LCD für das Conrad 2x16LCD (MC1602E-TGR) umgesetzt. Hier ein Beispiel zur Textausgabe (wie bereits gepostet), nun aber mit korrekter Initialisierung, für ein 2x16LC-Display: '****************************************** '* * '* Textausgabe auf * '* einem 2x16 HD44780 kompatiblen * '* 2-Draht-LC-Display * '* * '* Version: 1.1 * '* Author: M.Piering * '* Datum: 10.07.2009 * '* Referenzen: * '* elektor artikel 05/2008 * '* Conrad Electronic LCD3.BAS * '* * '****************************************** ' *** Daten-Definition *** DEFINE i BYTE DEFINE k BYTE DEFINE lcd_param BYTE DEFINE lcd_rs BYTE ' *** Definition LCD-Ports *** DEFINE lcd_data PORT[15] DEFINE lcd_clock PORT[16] '*** ASCII-Codes *** define A_ &H41 define B_ &H42 define C_ &H43 define D_ &H44 define E_ &H45 define F_ &H46 define G_ &H47 define H_ &H48 define I_ &H49 define J_ &H4A define K_ &H4B define L_ &H4C define M_ &H4D define N_ &H4E define O_ &H4F define P_ &H50 define Q_ &H51 define R_ &H52 define S_ &H53 define T_ &H54 define U_ &H55 define V_ &H56 define W_ &H57 define X_ &H58 define Y_ &H59 define Z_ &H5A DEFINE MINUS &H2D '*** Programmoperationen *** GOSUB LCD_INIT PAUSE 5 'Ausgabe von Zweidraht LC-Display am Display lcd_param = Z_ : GOSUB LCD_WRITECHAR 'ZWEIDRAHT lcd_param = W_ : GOSUB LCD_WRITECHAR lcd_param = E_ : GOSUB LCD_WRITECHAR lcd_param = I_ : GOSUB LCD_WRITECHAR lcd_param = D_ : GOSUB LCD_WRITECHAR lcd_param = R_ : GOSUB LCD_WRITECHAR lcd_param = A_ : GOSUB LCD_WRITECHAR lcd_param = H_ : GOSUB LCD_WRITECHAR lcd_param = T_ : GOSUB LCD_WRITECHAR lcd_param = 2 : GOSUB LCD_GOTOLINE 'Wechsel in die zweite Zeile lcd_param = L_ : GOSUB LCD_WRITECHAR 'LC-DISPLAY lcd_param = C_ : GOSUB LCD_WRITECHAR lcd_param = MINUS : GOSUB LCD_WRITECHAR lcd_param = D_ : GOSUB LCD_WRITECHAR lcd_param = I_ : GOSUB LCD_WRITECHAR lcd_param = S_ : GOSUB LCD_WRITECHAR lcd_param = P_ : GOSUB LCD_WRITECHAR lcd_param = L_ : GOSUB LCD_WRITECHAR lcd_param = A_ : GOSUB LCD_WRITECHAR lcd_param = Y_ : GOSUB LCD_WRITECHAR END '*** LCD_Interface *** '( muss in jedes Programm mit LCD-Ausgabe eingefuegt werden) #LCD_INIT '8-Bit-Kommandos lt. HD44780 Datenblatt lcd_param = &H33 : GOSUB LCD_WRITECMD 'Initialisierung durch externen Controller lcd_param = &H32 : GOSUB LCD_WRITECMD '4-Bit-Modus aktivieren lcd_param = &H28 : GOSUB LCD_WRITECMD '4Bit-modus, zwei Zeilen lcd_param = &H0C : GOSUB LCD_WRITECMD 'Display an, Cursor+Blinken aus 'Display loeschen #LCD_CLS lcd_param = &H01 : GOSUB LCD_WRITECMD 'Display loeschen RETURN 'Zeilenwechsel #LCD_GOTOLINE IF lcd_param = 1 THEN lcd_param = &H80 IF lcd_param = 2 THEN lcd_param = &HC0 'LCD-Kommando #LCD_WRITECMD lcd_rs = 0 GOTO LCD_WRITE_BYTE 'Zeichenausgabe #LCD_WRITECHAR lcd_rs = 1 'Kommando oder Zeichen an Display senden #LCD_WRITE_BYTE 'teile Datenbyte in High- und Low-Nibble auf und sende es an LCD im 4Bit-Mode k = lcd_param SHR 4 'High-Nibble durch Rechtsschieben separieren GOSUB LCD_WRITE_NIBBLE 'und ausgeben k = lcd_param AND 15 'Low-Nibble durch UND-Verknuepfung bilden GOSUB LCD_WRITE_NIBBLE 'und ausgeben RETURN #LCD_WRITE_NIBBLE lcd_clock=0 lcd_data=0 'Clear all stages of shift register FOR i=1 TO 8 lcd_clock=1 lcd_clock=0 NEXT 'Zustand in Q7 des Schieberegisters ist egal und wird nicht bewußt gesetzt 'Set E-Level at Q6 lcd_data=1 lcd_clock=1 lcd_clock=0 'Set level for RS at Q5 lcd_data=lcd_rs lcd_clock=1 lcd_clock=0 ' 'Shift in 4 bits FOR i=1 TO 4 IF (k AND 8) = 0 THEN lcd_data=0 ELSE lcd_data=1 'Clock in data with rising edge lcd_clock=1 lcd_clock=0 k=k SHL 1 NEXT 'Shift in 0-Bit lcd_data=0 lcd_clock=1 lcd_clock=0 'Set E lcd_data=1 lcd_data=0 RETURN Falls jemand Fragen hat oder die anderen Beispiele brauchen sollte, bitte einfach melden. An der Umsetzung auf ein 4x16 bzw. 4x20 LCD bin ich noch dran - der Knoten ist geplatzt. MfG, Mak |
| Antwort schreiben |