- 12V Akku mit 280 Ah bauen         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 22

Thema: LCD-Display HLM8070 - Probleme

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2006
    Beiträge
    169
    Anzeige

    Praxistest und DIY Projekte
    man hilft doch gern

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    95
    Beiträge
    627
    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
    ...

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2006
    Beiträge
    169
    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.

    Wenn du das Display anders anschließen möchtest, asl ich das getan habe, dann musst du das so machen:
    Code:
    $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.

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    95
    Beiträge
    627
    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
    ...

  5. #15
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    95
    Beiträge
    627
    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
    ...

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2006
    Beiträge
    169
    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)


    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!
    Ich hab das allerdings nicht getestet. Ich hoffe es funktioniert trotzdem.

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    95
    Beiträge
    627
    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
    ...

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2006
    Beiträge
    169
    Schreib mal 'Call' davor!
    Dann müsste es gehen.

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    95
    Beiträge
    627
    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:

    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
    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
    ...

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2006
    Beiträge
    169
    man hilft doch gern

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress