- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 6 von 6

Thema: LCD "zu Fuss" initialisieren...

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009

    LCD "zu Fuss" initialisieren...

    Anzeige

    Praxistest und DIY Projekte
    Moin.

    Nachdem ich es immer noch nicht geschafft hab, ein gewisses 40x2 LCD zum laufen zu bringen, wollte ich mal fragen, ob hier jemand ne Initialisierung von Hand als Quellcode hat. Meine jetzt nicht das ganze mit Config LCD und Initlcd, sondern ein Stück Code in "Rohform", Bascom oder AVR.

    Hat da jemand was rumliegen?


    Kurz zur Geschichte:
    Mit den Standard-Befehlen eines AVR will ein 40x2-Display nicht (andere LCDs funktionieren problemlos). An einer fertigen USB-Ansteuerung läuft dieses eine Display jedoch auch. (Obwohl hier eben auch ein AVR, scheinbar ATTiny, verbaut ist).
    Eine "Kopie" der Sequenz (ausgelesen mit einem Logik-Analyzer und in Bascom nachgebaut) klappt leider aus welchen Gründen auch immer nicht (Obwohl die Signale nach LA identisch sind *ratlos*)

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Servus,
    hast Du nicht mehr Infos zum LCD selber (Fundort usw., evtl. mit Bildern), vielleicht findet sich da was drüber.
    Du hast also noch kein Datenblatt dazu ?

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Das einzige was ich vom LCD selber weiss: Es ist ein 40x2 LCD. Einbauort war bzw. ist ein altes Telefon "Octophon", Hersteller war die Telekom; Bild davon ist im Anhang. Da auf dem Display selbst leider keine weiteren Nummern zu finden sind, scheitert auch die Suche nach einem Datenblatt. Lediglich ein 47800 sowie ein paar Erweiterungstreiber (44100?) sind darauf zu finden; keine Hintergrundbeleuchtung.

    Edit: Anhang aus Platzgründen entfernt
    #ifndef MfG
    #define MfG

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.01.2007
    Ort
    Deutschland [Bayern]
    Alter
    42
    Beiträge
    125
    Ich habe einmal eine LCD-Ansteuerung auf dem PC via Paraschnitstelle geschrieben. Das ganez dann auf den AVR umgelegt.

    Hiermit kannst du das regeln, musst allerdings in den LCD_Wait funktionen die Zeiten entsprechend auf die Taktraten anpassen!!!

    Code:
    '########################################################################################################################################
    '# LCD-Routinen #########################################################################################################################
    '########################################################################################################################################
    'LCD Winstar 1202A Spezifische Routinen
    Sub Lcd_send(byval V_value As Byte)
    '## maskiert ausgeben!!
    'Out Lcd_adr , V_value
    End Sub
    
    
    Sub Lcd_send_statecode(byval V_rs As Byte , Byval V_rw As Byte , Byval V_clock As Byte)
    Dim V As Byte
    '## V (startwert für Bytemaske vordevinieren)
    V = 3
    If V_rs = 1 Then V = V And 254
    If V_rw = 1 Then V = V And 253
    If V_clock = 1 Then V = V Or 4
    '## maskiert ausgeben!!
    'Out LCD_ADR + 2, V
    End Sub
    
    
    Sub Lcd_send_clock_init()
    Call Lcd_send_statecode(0 , 0 , 1)
    Waitus 1800
    Call Lcd_send_statecode(0 , 0 , 0 )
    Waitus 1800
    End Sub
    
    
    Sub Lcd_send_clock_cmd()
    Call Lcd_send_statecode(0 , 0 , 1)
    Waitus 45
    Call Lcd_send_statecode(0 , 0 , 0)
    Waitus 45
    End Sub
    
    
    Sub Lcd_send_clock_data()
    Call Lcd_send_statecode(1 , 0 , 1)
    Waitus 45
    Call Lcd_send_statecode(1 , 0 , 0)
    Waitus 45
    End Sub
    
    
    
    
    
    
    
    
    
    
    
    
    Sub Lcd_init()
    '## LCD-BYTE Adresswert festlegen
    'Lcd_adr = 0
    Lcd_display = 8
    'LCD-Reset
    Call Lcd_send(48)
    Call Lcd_send_clock_init
    Call Lcd_send(48)
    Call Lcd_send_clock_init
    Call Lcd_send(48)
    Call Lcd_send_clock_init
    'LCD-Init
    Call Lcd_send(44)
    Call Lcd_send_clock_init
    Call Lcd_send(4)
    Call Lcd_send_clock_init
    Call Lcd_clear
    Call Lcd_set_displayon(1)
    End Sub
    
    
    Sub Lcd_clear()
    Call Lcd_send(1)
    Call Lcd_send_clock_init
    Call Lcd_set_position_cursor(1 , 0)
    End Sub
    
    
    Sub Lcd_set_displayon(byval V_value As Byte)
    If V_value = 1 Then
        Lcd_display = Lcd_display Or 4
    Else
        Lcd_display = Lcd_display Xor 4
    End If
    Call Lcd_send(lcd_display)
    Call Lcd_send_clock_init
    End Sub
    
    
    Sub Lcd_set_cursoron(v_value As Byte)
    If V_value = 1 Then
        Lcd_display = Lcd_display Or 2
    Else
        Lcd_display = Lcd_display Xor 2
    End If
    Call Lcd_send(lcd_display)
    Call Lcd_send_clock_init
    End Sub
    
    
    
    
    
    
    
    
    
    Sub Lcd_put_text_multichar(byval V_string As String)
    For Xbyte = 1 To Len(v_string)
       Xstring = Mid(v_string , Xbyte , 1)
       Xchar = Asc(xstring)
       Call Lcd_put_text_monochar(xchar)
    Next
    For Xbyte = Len(v_string) To 12
       Call Lcd_put_text_monochar(32)
    Next
    End Sub
    
    
    Sub Lcd_put_text_monochar(byval V_char As Byte)
    Call Lcd_send(v_char)
    Call Lcd_send_clock_data
    Call Lcd_shift_cursor(1)
    End Sub
    
    
    
    
    
    
    
    
    
    
    
    Sub Lcd_shift_cursor(byval V_left As Byte)
    If V_left = 1 Then
        Call Lcd_send(24)
    Else
        Call Lcd_send(28)
    End If
    Call Lcd_send_clock_cmd
    'Call Lcd_wait1
    End Sub
    
    
    Sub Lcd_set_position_line(byval V_line As Byte)
    Select Case V_line
        Case 1 : Lad = 128
        Case 2 : Lad = 192
    End Select
    Call Lcd_send(lad)
    Call Lcd_send_clock_cmd
    End Sub
    
    
    Sub Lcd_set_position_cursor(byval V_line As Byte , Byval V_pos As Byte)
    Select Case V_line
        Case 1 : Lad = 128 Or V_pos
        Case 2 : Lad = 192 Or V_pos
    End Select
    Call Lcd_send(lad)
    Call Lcd_send_clock_cmd
    End Sub
    Diese Funktionen kannst du ganz leicht an unterschiedliche Zeilen und Zeichen anpassen.


    JimJim
    XUN

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.09.2005
    Beiträge
    276
    ich finde die Aktion lächerlich , es sei da sind 100 000 LCD's vorhanden.

    Gento

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Klar, ich könnte ja das Display einfach austauschen... aber warum sollte ich unnötig Geld ausgeben und ein funktionierendes Display gegen ein funktionierendes Display austauschen, wenns lediglich an der Ansteuerung hackt?
    Ich weiss, dass das Display fehlerfrei arbeitet, wenn es denn erst einmal initialisiert ist. Und genau diese Initialisierung ist das Problem.

    Also den Source werd ich baldmöglichst mal testen sobald ich das Display wieder in Reichweite hab. (Dürfte gegen Ende der Woche sein). Sieht soweit gut aus.

Berechtigungen

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

LiFePO4 Speicher Test