![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo, das 2-Draht-LCDisplay wurde in einem Elektor-Projekt mit Atmel-Controllern vorgestellt. Anbei zwei Links: Der Elektor-Artikel: http://www.cczwei.de/atm18_downloads/071148-D%20CC2-AVR-board-2.pdf Tips und Tricks im Computer-Club 2 Wiki: http://www.cc-zwei.de/wiki/index.php/ATM18::Projekt::2-Draht_LCD Wie gesagt, ich habe zwei Änderungen an der Beschaltung vornehmen müssen: 1. 1N4148 Diode zwischen Pin 8 des 74HCT4094 und GND, um den Baustein zum Schieben zu bekommen (Alternative wäre eine Spannungsversorgung >5.25V gewesen). Laut Datenblatt sollte der IC allerdings zwischen 4.75V und 5.25V arbeiten (?? ;-]) 2. Ich habe statt der SMD Schottky-Diode BAS70 ebenfalls eine 1N4148 (nichts anderes da) verwendet, funktioniert, sollte aber mit Vorsicht genossen werden. Den BASCOM-Code für den Atmel habe ich auf Anfrage von Thomas0815 auf CCBASIC umgesetzt. Nachdem einige Ungereimtheiten aus dem BASCOM-Code geklärt wurden, läuft nun das CCBASIC-Programm auf der CC1. Anbei der CCBASIC-Sourcecode für ein 2x16 LCD. Das 4x16 LCD Programm muss etwas anders aussehen, kann es noch nicht ausprobieren, da das LCD bei mir noch eingepackt liegt (SC1604ASLB 4x16 mit Hintergrundbeleuchtung für €7.95 bei Pollin). Bei Fragen bitte melden (am besten unter Email): MfG, Mak '****************************************** '* * '* Demo-Programm zur Ansteuerung * '* eines 2x16 LC-Displays mit * '* HD44780 kompatiblen Controller * '* * '* Version: 1.0 * '* Author: Mak * '* Datum: 15.06.2009 * '* Referenzen: * '* elektor artikel 05/2008 * '* Conrad Electronic LCD3.BAS * '* * '****************************************** DEFINE Rs BYTE[1] 'Variablendefinition ähnlich zu Elektor BASCOM-Programm DEFINE Mask BYTE[2] DEFINE N BYTE[3] DEFINE I BYTE[4] DEFINE J BYTE[5] DEFINE D BYTE[6] DEFINE State BYTE[7] DEFINE Low_nibble BYTE[8] DEFINE High_nibble BYTE[9] DEFINE X BYTE[10] 'notwendige Variablen - im BASCOM-Programm lokal definiert DEFINE Z BYTE[11] DEFINE Pos BYTE[12] DEFINE Pe_clock Port[16] 'CC1-Pins fuer Clock und Daten DEFINE Pe_data Port[15] '*** ASCII-Codes *** 'Definition der LCD-Charakter lt. LCD3.BAS bzw. LCD-Datenblatt 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 NULL &H30 DEFINE EINS &H31 DEFINE ZWEI &H32 DEFINE DREI &H33 DEFINE VIER &H34 DEFINE FUENF &H35 DEFINE SECHS &H36 DEFINE SIEBEN &H37 DEFINE ACHT &H38 DEFINE NEUN &H39 DEFINE LEERZ &H20 DEFINE MINUS &H2D DEFINE GLEICH &H3D DEFINE PUNKT &H2E 'LCD-Ausgabe 'Routine zur Ausgabe eines Textes #Main GOSUB Lcd_init 'LC-Display initialisieren X=1:Z=1 'Position des Cursors auf LCD festlegen GOSUB Lcd_Pos 'und setzen Pos=0:J=15+Pos 'Anfangsposition und Laenge des Textes in Look-Up Table uebermitteln GOSUB Lcd_text 'Text ausgeben X=1:Z=2 'und das machen wir in allen 4 Zeilen GOSUB Lcd_Pos Pos=16:J=15+Pos GOSUB Lcd_text PAUSE 150 '3s warten Rs=0 'auf Befehl umschalten D=&H01 'Befehl GOSUB Lcd_write_byte 'uebertragen 'Beende Demo-Programm END 'hier Programm beenden >>>keine ADC-Wert-Ausgabe wie bei BASCOM-Prog realisiert 'Unterprogramme #Lcd_write_nibble Pe_clock=0 Pe_data=0 'Clear all stages of shift register FOR N=1 TO 8 Pe_clock=1 Pe_clock=0 NEXT 'Set Low-Level at Q7 Pe_data=0 Pe_clock=1 Pe_clock=0 'Set E-Level at Q6 Pe_data=1 Pe_clock=1 Pe_clock=0 'Set level for RS at Q5 Pe_data=Rs Pe_clock=1 Pe_clock=0 ' 'Shift in 4 bits Mask=8 FOR N=1 TO 4 State=D AND Mask IF State=0 THEN Pe_data=0 ELSE Pe_data=1 'Clock in data with rising edge Pe_clock=1 Pe_clock=0 Mask=Mask SHR 1 NEXT 'Shift in 0-Bit Pe_data=0 Pe_clock=1 Pe_clock=0 'Set E Pe_data=1 Pe_data=0 RETURN #Lcd_write_byte Low_nibble=D AND 15 High_nibble=D SHR 4 D=High_nibble GOSUB Lcd_write_nibble D=Low_nibble GOSUB Lcd_write_nibble RETURN #Lcd_init Rs=0 'command mode PAUSE 5 'Delay for power up time D=&H20 GOSUB Lcd_write_byte D=&H20 GOSUB Lcd_write_byte D=&H28 GOSUB Lcd_write_byte D=&H0C GOSUB Lcd_write_byte D=&H01 GOSUB Lcd_write_byte RETURN #Lcd_pos Rs=0 'write CTRL D=127+X IF Z=2 THEN D=D+64 IF Z=3 THEN D=D+20 IF Z=4 THEN D=D+84 GOSUB Lcd_write_byte RETURN #Lcd_text Rs=1 'Daten-Modus FOR I=Pos TO J 'Text aus Look-Up Table entspr. der Position und Laenge LOOKTAB Text,I,D 'auslesen GOSUB Lcd_write_byte 'und auf LCD ausgeben NEXT I 'das tun wir fuer den interessierenden Textabschnitt RETURN 'Zurueck zum Hauptprogramm 'Tabellen mit Text TABLE Text C_ C_ O_ N_ T_ R_ O_ L_ EINS PUNKT EINS LEERZ ZWEI X_ EINS SECHS Z_ W_ E_ I_ D_ R_ A_ H_ T_ D_ I_ S_ P_ L_ A_ Y_ TABEND > Hallo, > > zwar habe ich die Ansteuerschaltung mit dem 4094 nicht, an Software für die 1er bin ich aber immer interessiert. > > Hilfreich wäre der Schaltplan für den Aufbau besagter Schaltung, da mir der entsprechende Elektor-Artikel nicht vorliegt. > > > > Gruss Nurmalso |
Antwort schreiben |