man hilft doch gern
Druckbare Version
man hilft doch gern
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
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:Zitat:
Dachte mir das so aber das mag Bascom nicht:
Config Lcddisplay = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0
Wenn du das Display anders anschließen möchtest, asl ich das getan habe, dann musst du das so machen:
Wie du oc1, oc2 und ex änderst ist dir ja klar.Code:$regfile = "m8def.dat"
$crystal = 16000000
$baud = 57600
Lcddisplay Alias Portd 'je nachdem, welchen Port du benutzen willst
Config Lcddisplay = Output
und so weiter
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.
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.
Code:$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
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
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)
Ich hab das allerdings nicht getestet. Ich hoffe es funktioniert trotzdem.Code:$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!
die beide Befehle mag Bascom nicht:
Write_port(Xparameter)
'bzw.
Write_port(Command)
hoffe ich hab da nichts an der falschen Stelle eingefügt...
Code:$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
Schreib mal 'Call' davor!
Dann müsste es gehen.
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:
Jetzt kann man natürlich noch die Do...Loopschleife von der LCD-Routine befreien und eine eigene LCD-Routine machen und so weiter :-)Code:'*******************************************
';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
';; 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
gruß, Tobias
Zitat:
man hilft doch gern