![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Haloo, es gibt noch ein Problem beim Einschalten der CC1 bzw. nach einem Reset. Die Anfangszustände an den Ports Unter Umständen beeinflussen auch die beiden genutzen Dioden die Logikpegel, die ggf. nicht immer korrekt vom Display erkannt werden (ebenfalls Vermutung). Arbeite noch dran. Mak > 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 > > '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 |