man hilft doch gern
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.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 weiterCode:'******************************************* ';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ';; 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
...
man hilft doch gern
Lesezeichen