PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD-Display HLM8070 - Probleme



frank090464
02.10.2007, 23:59
Hallo, ich benötige mal wieder Euere Hilfe !!!
Ich habe mir von POLLIN ein 16*4-Display besorgt. Dieses angeschlossen an einem Atmega16.

Das Display hat folgende Anschlüsse:

LCD-Pin Funktion

1 GND
2 VDD +5V
3 Kontrast
4 I/OC1
5 R/W
6 ex
7 DB0
8 DB1
9 DB2
10 DB3
11 DB4
12 DB5
13 DB6
14 DB7
15 I/OC2


Im Folgenden habe ich es so beschaltet:
LCD-Pin 1 ---> GND
LCD-Pin 2 ---> +5V
LCD-Pin 3 ---> mittels regelbaren Widerstand der Kontrast
LCD-Pin 5 ---> GND
LCD-Pin 6 ---> PB5
LCD-Pin 11 ---> PB0
LCD-Pin 12 ---> PB1
LCD-Pin 13 ---> PB2
LCD-Pin 14 ---> PB3
LCD-Pin 15 ---> PB4

Sobald Spannung anliegt, erscheint in der ersten Zeile alles Balken. Dies' deutet ja darauf hin, daß es erst mal soweit funktioniert. Aber sonst passiert nichts !!! Kein bischen bewegt sich da.

Und so sieht in grober Version mein kleines Testprogramm aus (das auf einem zweizeiligen Display funktioniert):

$regfile = "m32def.dat"
$crystal = 1000000
Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , Rs = Portb.4 , E = Portb.5
Do
Initlcd
Waitms 500
Cls
Cursor Blink
Locate 1 , 1
LCD "Zeile 1"
Locate 2 , 1
Lcd "Zeile 2"
waitms 500
loop
end

Nun weiß ich nicht mehr weiter. Ich war auch auf der Seite:
https://www.roboternetz.de/wissen/index.php/LCD-Modul_am_AVR
Die Schaltung "4-Bit Ansteuerung ohne Busy(I/O Mode)", wie dort beschrieben ist, ist mit meiner Identisch.
Kann mir da jemand helfen? Für jeden Ratschlag bin ich sehr dankbar.

Gento
03.10.2007, 00:31
An DB0-3 MUß 0V / GND.

Gento

linux_80
03.10.2007, 01:35
Hallo,

hast du in diesem DB nachgelesen ob sich der dort verwendete Controller auch zum HD44780 kompatibel verhält, und hat der einen 4-Bit-Modus ?
Bascom will einen HD... Kompatiblen haben.

frank090464
03.10.2007, 09:53
An DB0-3 MUß 0V / GND.

Gento

Gleiches Problem in Grün, wenn ich DB0...DB3 gegen GND schalte! Hat es wvt. etwas mit I/OC1 und I/OC2 zu tun? Bei mir ist I/OC2 nicht angeschlossen. Habe auch einen anderen IC genommen; hätte ja sein können, daß der IC einen Schuß weg hat.
Bei dem anderen Display (16*2) wanderen wirre Zeichen beim Programmieren und vergleichen. Bei diesem Display jedoch ändert sich nichts; die Balken bleiben wie angewurzelt.

frank090464
03.10.2007, 09:57
Hallo,

hast du in diesem DB nachgelesen ob sich der dort verwendete Controller auch zum HD44780 kompatibel verhält, und hat der einen 4-Bit-Modus ?
Bascom will einen HD... Kompatiblen haben.

Aus diesem Datenblatt werde ich nicht schlau. In diesem Forum gibt es einen Beitrag darüber, daß auch jemand das gleiche Problem hatte. Er hat es auch hinbekommen, schrieb aber nicht, wie er es gemacht hat. Irgendwie mit Widerständen probiert. Keine Ahnung, was damit gemeint war. Also gehe ich stark davon aus, daß dieser kompatibel ist.

In der Produktbeschreibung von Pollin steht drin:
4-zeiliges LC-Display mit M50530 Controller. Das Display verfügt pro Zeile über je 16 Zeichen.
Technische Daten:
- 4 Zeilen x 16 Zeichen Text
- integrierter M50530 Controller
- Betriebsspannung +5 V
- Anzeigefläche 61x18,5 mm
Maße (BxHxT): 86x51x10 mm.

Ich stehe vor einem Rätsel ...

linux_80
03.10.2007, 11:08
Hallo,

diese Angaben beim Pollin lassen ja noch nicht auf die Kompatibilität schliessen, ich hab das DB nur mal überflogen, und ich würde sagen, das es nicht passt !
Man kommt ja auch mit den Leitungen nicht hin die man braucht.
Dieser Kontroller hat anscheinend 4 Register (über IO1, IO2), ein HD-kompatibler nur 2 welche über RS ausgewählt werden.

Da wirds eine extra Lib unter Bascom brauchen.

Edit:
von einen 4-Bit-Modus hab ich jetzt gelesen, aber das wird trotzdem nicht HD-Kompatibel werden :-k

Hier hab ich was gefunden:
http://www.mikrocontroller.net/topic/9903#65281

noch'n Edit:
http://www.google.de/search?hl=de&q=Bascom+LCD+M50530&btnG=Google-Suche&meta=
Der 3. Link (http://www.frickelfritze.de/index.html)hat ein Beispiel dafür auf der Seite in ASM und Bascom.

mikro-VIIV
14.10.2007, 12:30
Hallo,

hab jetzt unter dem Link (von linux_80):
http://www.frickelfritze.de/elektronik/lcd/index.html

das hier gefunden




'*******************************************
';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
';; LCD-Routinen für M50530 ;;
';; ======================= ;;
';; ;;
';; Titel : 4 Bit LCD M50530 ;;
';; Autor : Arno Schweißinger ;;
';; Datum : 28.01.2007 ;;
';; MC : AtMega 8515 1MHz ;;
';; Stromversorgung: MC 5V; LCD 5V & 8,2V ;;
';; ;;
';; 4bit-Interface M50530 ;;
';; ;;
';; DB4: PC0 ;;
';; DB5: PC1 ;;
';; DB6: PC2 ;;
';; DB7: PC3 ;;
';; OC1: PC4 ;;
';; OC2: PC5 ;;
';; EX: PC6 ;;
';; ;;
';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
'*****************************************

$regfile = "m8515.dat"
$crystal = 1000000 'CPU 1MHz

Declare Sub Lcd_m50530_init() 'declare the SUB program
Declare Sub Lcd_m50530_chr(ch As Byte)
Declare Sub Lcd_m50530_command(command As Byte)
Declare Sub Lcd_m50530_gotoxy(lcd_x As Byte , Lcd_y As Byte)
Declare Sub Lcd_m50530_clear()
Declare Sub Lcd_m50530_enable

Lcd_m50530 Alias Portc
Config Lcd_m50530 = Output
_oc1 Alias 4
_oc2 Alias 5
_ex Alias 6

Dim I As Byte ' Zählschleife
Dim Lcd_temp As Byte ' Temp im Unterprogramm
Dim Lcd_parameter As Byte ' wird an LCD gesendet
Dim _x As Byte ' Cursor x Position
Dim _y As Byte ' Cursor y Position

'-------------------------
' Begin Hauptprogramm
'-------------------------

Call Lcd_m50530_init

_x = 10 : _y = 7
Call Lcd_m50530_gotoxy(_x , _y)

For I = 33 To 48
Call Lcd_m50530_chr(i)
Next I

Do
Toggle Portb.0 ' Takt für Spannungskaskade
Loop
End ' ende Hauptprogramm

'-------------------------
' End Hauptprogramm
'-------------------------
'-------------------------------------------------------------------------------
Sub Lcd_m50530_init

Lcd_parameter = $d8 'set function mode (SF) 0b11011000
Call Lcd_m50530_command(lcd_parameter) '4bit-Modus einstellen 11 -4/8bit-FONT-2xDUTY-2xRAM

Lcd_parameter = $50 'set entry mode (SE) 0b01010000
Call Lcd_m50530_command(lcd_parameter) 'Cursor selbst setzen

Lcd_parameter = $33 'set display mode (SD) 0b00110011
Call Lcd_m50530_command(lcd_parameter) 'Display ein, Cursor nicht anzeigen

Call Lcd_m50530_clear
End Sub

'-------------------------------------------------------------------------------
Sub Lcd_m50530_chr(ch As Byte)
Lcd_temp = Ch
Shift Lcd_temp , Right , 4
Set Lcd_temp._oc2
Lcd_m50530 = Lcd_temp
Call Lcd_m50530_enable

Lcd_temp = Ch And $0f
Set Lcd_temp._oc2
Lcd_m50530 = Lcd_temp
Call Lcd_m50530_enable
Waitus 20
End Sub

'-------------------------------------------------------------------------------
Sub Lcd_m50530_command(command As Byte)
Lcd_temp = Command
Shift Lcd_temp , Right , 4
Reset Lcd_temp._oc1
Reset Lcd_temp._oc2
Lcd_m50530 = Lcd_temp
Call Lcd_m50530_enable

Lcd_temp = Command And $0f
Reset Lcd_temp._oc1
Reset Lcd_temp._oc2
Lcd_m50530 = Lcd_temp
Call Lcd_m50530_enable
Waitus 20
End Sub
'-------------------------------------------------------------------------------
Sub Lcd_m50530_gotoxy(lcd_x As Byte , Lcd_y As Byte)

Select Case Lcd_y
Case 1 : Lcd_parameter = $00
Case 2 : Lcd_parameter = $40
Case 3 : Lcd_parameter = $80
Case 4 : Lcd_parameter = $c0
Case 5 : Lcd_parameter = $18
Case 6 : Lcd_parameter = $58
Case 7 : Lcd_parameter = $98
Case 8 : Lcd_parameter = $d8
Case Else : Lcd_parameter = $00
End Select

Lcd_parameter = Lcd_parameter + Lcd_x
Decr Lcd_parameter
Lcd_temp = Lcd_parameter
Shift Lcd_temp , Right , 4
Set Lcd_temp._oc1
Set Lcd_temp._oc2
Lcd_m50530 = Lcd_temp
Call Lcd_m50530_enable

Lcd_temp = Lcd_parameter And $0f
Set Lcd_temp._oc1
Set Lcd_temp._oc2
Lcd_m50530 = Lcd_temp
Call Lcd_m50530_enable
Waitus 20
End Sub
'-------------------------------------------------------------------------------
Sub Lcd_m50530_clear
Lcd_parameter = $01 ' 0b00000001 Display löschen
Call Lcd_m50530_command(lcd_parameter)
Waitms 2
End Sub
'-------------------------------------------------------------------------------
Sub Lcd_m50530_enable
Set Lcd_m50530._ex
Waitus 1
Reset Lcd_m50530._ex
End Sub
';----------------------------------- Ende Dispay ----------------------------------------



Damit wurde die Ansteuerung eines Displays mit M50530 Controller in Bascom realiesiert.

Da ich leider erst Anfänger bin, was Programmierung angeht, ist es für mich nicht so recht ersichtlich, wie ich denn nun was auf das Display ausgeben kann.

Währe echt nett, wenn mir das mal jemand mitteilen könnte da ich auch ein Display mit dem Controller hab und es gern ansteuern würde.

TobiasBlome
08.01.2008, 10:48
hallo, der Beitrag ist ja schon ein bisschen älter, aber hat jemand eine Lösung gefunden?

Tobias

mikro-VIIV
08.01.2008, 16:46
schau mal hier:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=31558&postdays=0&postorder=asc&start=22

TobiasBlome
08.01.2008, 16:55
Danke - viele Dank!!!

das ist perfekt - den Beitrag hab ich tatsächlich nicht gefunden trotz langem suchen!

DANKE!!!!!

Tobias

mikro-VIIV
08.01.2008, 17:05
man hilft doch gern

TobiasBlome
09.01.2008, 07:36
Hallo mikro-VIIV,

das LCD funktioniert. Leider hab ich die Pin´s nicht mehr frei. OC1,2 und EX hab ich leicht ändern können, aber wie kann ich DB4-7 ändern?

Dachte mir das so aber das mag Bascom nicht:
Config Lcddisplay = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0

gruß, Tobias

mikro-VIIV
09.01.2008, 16:50
Dachte mir das so aber das mag Bascom nicht:
Config Lcddisplay = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0

Das kann auch gar nicht gehen, weil das Display keinen HD44780 kompatiblen Controller hat. Wenn das so einfach gewesen währe, hätte ich dieses Programm gar nicht schreiben müssen. :wink:

Wenn du das Display anders anschließen möchtest, asl ich das getan habe, dann musst du das so machen:


$regfile = "m8def.dat"
$crystal = 16000000
$baud = 57600


Lcddisplay Alias Portd 'je nachdem, welchen Port du benutzen willst
Config Lcddisplay = Output

und so weiter

Wie du oc1, oc2 und ex änderst ist dir ja klar.

Ich hoffe, das dir das weiter geholfen hat, fals nicht, dann teile mir einfach mal mit, welchen µC du verwendest und welche Pins du benutzen willst.

TobiasBlome
09.01.2008, 17:54
Hallo, also

"Lcddisplay Alias Portd "

verstehe ich so, das der gesamte Port D benutz wird. ich habe aber keinen ganzen mehr frei. nur noch:

PD5 , PD6, PD7, PB0

Ich benutze einen ATMega8. Hier das Programm zum testen. Die Variable(Test_zahl) wird einfach nur hochgezählt um zu sehen, ob sich etwas im Display tut. Den Teil, den ich in di die Do...Loop schleife gesetzt habe nehme ich noch raus in eine Sub Routine.


$regfile = "m8def.dat" ' IC-Typ
$crystal = 3686400

'$crystal = 16000000
'$baud = 57600


'Lcddisplay Alias PortC
'Config Lcddisplay = Output
Config Lcddisplay = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0



Oc1 Alias Portd.3
Config Oc1 = Output
Oc2 Alias Portd.4
Config Oc2 = Output
Ex Alias Portc.2
Config Ex = Output

Dim Parameter As Byte
Dim Xparameter As Byte
Dim Command As Byte
Dim Zeile As Byte
Dim I As Byte
Dim Char As Byte
Dim Xchar As String * 1
Dim Text As String * 16
Dim Xxchar As String * 1
Dim Xxxchar As Byte

Dim Test_zahl As Byte


Reset Oc1
Reset Oc2
Reset Ex

Declare Sub Init()
Declare Sub Command(command As Byte)
Declare Sub Disp(xchar As Byte)
Declare Sub Zeile(xzeile As Byte)


'------------
'Hautprogramm
'------------

Call Init

Do
Zeile = $00
Call Zeile(zeile)
Text = "Test: " + Str(test_zahl) '"0123456789ABCDEF"
Gosub Ausgeben

Zeile = $40
Call Zeile(zeile)
Text = "GHIJKLMNOPQRSTUV"
Gosub Ausgeben

Zeile = $80
Call Zeile(zeile)
Text = "WXYZ!,$%&/()=?`*"
Gosub Ausgeben

Zeile = $c0
Call Zeile(zeile)
Text = "@+#'<>|^{[]};_-."
Gosub Ausgeben



Wait 1
Incr Test_zahl
Loop

'------------------
'Ende Hauptprogramm
'------------------


'----------
Sub Init()
'----------
Parameter = $d8
Call Command(parameter)
Parameter = $50
Call Command(parameter)
Parameter = $33
Call Command(parameter)
Parameter = $01
Call Command(parameter)
Waitms 2
End Sub

'-----------------------------
Sub Command(command As Byte)
'-----------------------------
Xparameter = Command
Shift Xparameter , Right , 4
Lcddisplay = Xparameter
Set Ex
Waitus 1
Reset Ex
Lcddisplay = Command And $0f
Set Ex
Waitus 1
Reset Ex
Waitus 20
End Sub

'--------------------------
Sub Zeile(xzeile As Byte)
'--------------------------
Parameter = Xzeile
Set Oc1
Set Oc2
Call Command(parameter)
Reset Oc1
Reset Oc2
Waitus 100
End Sub

'------------------------
Sub Disp(xchar As Byte)
'------------------------
Set Oc2
Parameter = Xchar
Call Command(parameter)
Reset Oc2
End Sub

'---------
Ausgeben:
'---------
For I = 1 To 16
Xxchar = Mid(text , I , 1)
Xxxchar = Val(xxchar)
Char = Asc(xxchar)
If Char = 0 Then
Char = $20
End If
Call Disp(char)
Next I
Return

TobiasBlome
10.01.2008, 15:34
oh hab gerade gesehen, dass das schon der geänderte Code mit den geänderten Parametern für das LCD ist - die ja gar nicht funktionieren...

also diese Zeile meine ich:
Config Lcddisplay = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0

mikro-VIIV
10.01.2008, 15:56
Da du keinen ganzen Port mehr frei hast müsstest du mit Port-Splitting arbeiten, d.h. die freien Pins zu manuell via Software zu einem Port zusammenfügen.

Db4 = Portd.5
Db5 = Portd.6
Db6 = Portd.7
Db7 = Portb.0
(diese Pins wergen im folgenden zu einem Port zusammengefügt)



$regfile = "m8def.dat" ' IC-Typ
$crystal = 3686400
'folgendes müsstet du in deinem Quelltext ergänzen:
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Portb.0 = Output

Declare Sub Write_port(xport as byte)
Dim Xport as Byte

'...
'...

'die Zeilen mit:
'Lcddisplay = Xparameter
'und
'Lcddisplay = Command And $0f
'musst du ersetzen durch

Write_port(Xparameter)
'bzw.
Write_port(Command)


'und die Sub Routine lautet:
Sub Write_port(xport as byte)
Portd.5 = xport.0
Portd.6 = xport.1
Portd.7 = xport.2
Portb.0 = xport.3
End Sub

'der Rest bleibt wie gehabt, nur
'Lcddisplay Alias PortC
'Config Lcddisplay = Output
'Config Lcddisplay = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0
'fällt weg!

Ich hab das allerdings nicht getestet. Ich hoffe es funktioniert trotzdem.

TobiasBlome
10.01.2008, 16:13
die beide Befehle mag Bascom nicht:
Write_port(Xparameter)
'bzw.
Write_port(Command)

hoffe ich hab da nichts an der falschen Stelle eingefügt...



$regfile = "m8def.dat" ' IC-Typ
$crystal = 3686400


Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Portb.0 = Output



Oc1 Alias Portd.3
Config Oc1 = Output
Oc2 Alias Portd.4
Config Oc2 = Output
Ex Alias Portc.2
Config Ex = Output

Dim Parameter As Byte
Dim Xparameter As Byte
Dim Command As Byte
Dim Zeile As Byte
Dim I As Byte
Dim Char As Byte
Dim Xchar As String * 1
Dim Text As String * 16
Dim Xxchar As String * 1
Dim Xxxchar As Byte
Dim Xport As Byte

Dim Test_zahl As Byte


Reset Oc1
Reset Oc2
Reset Ex

Declare Sub Init()
Declare Sub Command(command As Byte)
Declare Sub Disp(xchar As Byte)
Declare Sub Zeile(xzeile As Byte)
Declare Sub Write_port(xport as byte)


'------------
'Hautprogramm
'------------

Call Init

Do
Zeile = $00
Call Zeile(zeile)
Text = "Test: " + Str(test_zahl) '"0123456789ABCDEF"
Gosub Ausgeben

Zeile = $40
Call Zeile(zeile)
Text = "GHIJKLMNOPQRSTUV"
Gosub Ausgeben

Zeile = $80
Call Zeile(zeile)
Text = "WXYZ!,$%&/()=?`*"
Gosub Ausgeben

Zeile = $c0
Call Zeile(zeile)
Text = "@+#'<>|^{[]};_-."
Gosub Ausgeben


Wait 1
Incr Test_zahl
Loop

'------------------
'Ende Hauptprogramm
'------------------

Sub Write_port(xport as byte)
Portd.5 = xport.0
Portd.6 = xport.1
Portd.7 = xport.2
Portb.0 = xport.3
End Sub

'----------
Sub Init()
'----------
Parameter = $d8
Call Command(parameter)
Parameter = $50
Call Command(parameter)
Parameter = $33
Call Command(parameter)
Parameter = $01
Call Command(parameter)
Waitms 2
End Sub

'-----------------------------
Sub Command(command As Byte)
'-----------------------------
Xparameter = Command
Shift Xparameter , Right , 4
Write_port = Xparameter 'Lcddisplay = Xparameter
Set Ex
Waitus 1
Reset Ex
Write_port = Command 'Lcddisplay = Command And $0f
Set Ex
Waitus 1
Reset Ex
Waitus 20
End Sub

'--------------------------
Sub Zeile(xzeile As Byte)
'--------------------------
Parameter = Xzeile
Set Oc1
Set Oc2
Call Command(parameter)
Reset Oc1
Reset Oc2
Waitus 100
End Sub

'------------------------
Sub Disp(xchar As Byte)
'------------------------
Set Oc2
Parameter = Xchar
Call Command(parameter)
Reset Oc2
End Sub

'---------
Ausgeben:
'---------
For I = 1 To 16
Xxchar = Mid(text , I , 1)
Xxxchar = Val(xxchar)
Char = Asc(xxchar)
If Char = 0 Then
Char = $20
End If
Call Disp(char)
Next I
Return

mikro-VIIV
10.01.2008, 16:21
Schreib mal 'Call' davor!
Dann müsste es gehen.

TobiasBlome
10.01.2008, 16:38
VIELEN VIELEN DANK!!! es geht:

es muss heißen:
Call Write_port (Xparameter)
Call Write_port (command)

und hier nun noch mal das vollständige Programm
für den M50530 LCD Controller:



'*******************************************
';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
';; LCD-Routinen für M50530 ;;
';; ======================= ;;
';; ;;
';; Titel : 4 Bit LCD M50530 ;;
';; ;;
';; 4bit-Interface M50530 ;;
';; ;;
';; DB4: PD5 ;;
';; DB5: PD6 ;;
';; DB6: PD7 ;;
';; DB7: PB0 ;;
';; ;;
';; OC1: PD3 ;;
';; OC2: PD4 ;;
';; EX : PC2 ;;
';; ;;
';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
'*****************************************

$regfile = "m8def.dat" ' IC-Typ
$crystal = 3686400

Dim Parameter As Byte
Dim Xparameter As Byte
Dim Command As Byte
Dim Zeile As Byte
Dim I As Byte
Dim Char As Byte
Dim Xchar As String * 1
Dim Text As String * 16
Dim Xxchar As String * 1
Dim Xxxchar As Byte
Dim Xport As Byte

Dim Test_zahl As Byte


Declare Sub Init()
Declare Sub Command(command As Byte)
Declare Sub Disp(xchar As Byte)
Declare Sub Zeile(xzeile As Byte)
Declare Sub Write_port(xport as byte)

Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Portb.0 = Output


Oc1 Alias Portd.3
Config Oc1 = Output
Oc2 Alias Portd.4
Config Oc2 = Output
Ex Alias Portc.2
Config Ex = Output


Reset Oc1
Reset Oc2
Reset Ex

'------------
'Hautprogramm
'------------

Call Init

Do
Zeile = $00
Call Zeile(zeile)
Text = "Test: " + Str(test_zahl) '"0123456789ABCDEF"
Gosub Ausgeben

Zeile = $40
Call Zeile(zeile)
Text = "GHIJKLMNOPQRSTUV"
Gosub Ausgeben

Zeile = $80
Call Zeile(zeile)
Text = "WXYZ!,$%&/()=?`*"
Gosub Ausgeben

Zeile = $c0
Call Zeile(zeile)
Text = "@+#'<>|^{[]};_-."
Gosub Ausgeben


Wait 1
Incr Test_zahl
Loop

'------------------
'Ende Hauptprogramm
'------------------

Sub Write_port(xport as byte)
Portd.5 = xport.0
Portd.6 = xport.1
Portd.7 = xport.2
Portb.0 = xport.3
End Sub

'----------
Sub Init()
'----------
Parameter = $d8
Call Command(parameter)
Parameter = $50
Call Command(parameter)
Parameter = $33
Call Command(parameter)
Parameter = $01
Call Command(parameter)
Waitms 2
End Sub

'-----------------------------
Sub Command(command As Byte)
'-----------------------------
Xparameter = Command
Shift Xparameter , Right , 4
Call Write_port(xparameter) 'Lcddisplay = Xparameter
Set Ex
Waitus 1
Reset Ex
Call Write_port(command) 'Lcddisplay = Command And $0f
Set Ex
Waitus 1
Reset Ex
Waitus 20
End Sub

'--------------------------
Sub Zeile(xzeile As Byte)
'--------------------------
Parameter = Xzeile
Set Oc1
Set Oc2
Call Command(parameter)
Reset Oc1
Reset Oc2
Waitus 100
End Sub

'------------------------
Sub Disp(xchar As Byte)
'------------------------
Set Oc2
Parameter = Xchar
Call Command(parameter)
Reset Oc2
End Sub

'---------
Ausgeben:
'---------
For I = 1 To 16
Xxchar = Mid(text , I , 1)
Xxxchar = Val(xxchar)
Char = Asc(xxchar)
If Char = 0 Then
Char = $20
End If
Call Disp(char)
Next I
Return


Jetzt kann man natürlich noch die Do...Loopschleife von der LCD-Routine befreien und eine eigene LCD-Routine machen und so weiter :-)

gruß, Tobias

mikro-VIIV
10.01.2008, 17:24
man hilft doch gern

TobiasBlome
10.01.2008, 17:25
das hör ich gerne ;-)

Schachmann
21.02.2009, 16:21
Hallo,

der Anschluss des Displays ist hier http://www.happy-micro.de/index.php?option=com_content&view=article&id=74:lcd-modul-hlm8070-am-atmega8&catid=52:workshops&Itemid=78 beschrieben.

Gruß,
Ralf