- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Probleme bei Code für LCD (EADIP204)

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    36
    Beiträge
    519

    Probleme bei Code für LCD (EADIP204)

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo

    Ich arbeite gerade an einem Code um mein LCD (EADIP204) mit einem KS0073 Chip (von Robotikhardware) anzusteuern.
    Meinen Code hab ich mir aus einigen Codeschnippseln (auch hier im Forum) zusammegebastelt, bis jetzt sieht das Programm folgendermaßen aus.

    Code:
    '*****LCD*****
    'PB3 - E
    'PB4 - RS
    
    'PD2 - PIN11 - D4
    'PD3 - PIN12 - D5
    'PD4 - PIN13 - D6
    'PD5 - PIN14 - D7
    '**************
    
    $regfile = "m32def.dat"                                     'ATmega32
    $crystal = 11059200                                         'Quarz: 11059200 Hz
    
    Declare Sub Lcdwrite
    
    Dim Zeichen As Byte
    
    Ddra = &B00000000
    Ddrb = &B00000000
    Ddrc = &B00000000
    Ddrd = &B00000000
    
    Porta = &B00011111
    Portb = &B00000111
    Portc = &B11111100
    Portd = &B00000000
    
       'Pins des LCD-Modules
    
       Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portb.3 , Rs = Portb.4
    
       Initlcd
    
       Config Lcd = 20 * 4a
       'Config Lcdbus = 4
    
       Call Lcdwrite(&B00101100)
       Waitms 5
    
       Call Lcdwrite(&B00001001)
       Waitms 5
    
       Call Lcdwrite(&B00101000)
       Waitms 5
    
       Call Lcdwrite(&B00000110)
       Waitms 5
    
       Call Lcdwrite(&B00001100)
       Waitms 5
    
    Do
    
       Locate 1 , 1                                             'Spalte 1 und Zeile 1 des Displays
       Lcd "Hallo"                                              'Displayausgabe
       Waitms 50                                                '50 Millisekunden Warten um Flimmern zu vermeiden
       Cls                                                      'Display löschen
    
    
    Loop
    
       'Schreibt die Initialisierungs - Bits zum LCD
       Sub Lcdwrite
    
         ' Höherwertiges Nibble setzen
         If Zeichen.4 = 1 Then Portd.2 = 1 Else Portd.2 = 0
         If Zeichen.5 = 1 Then Portd.3 = 1 Else Portd.3 = 0
         If Zeichen.6 = 1 Then Portd.4 = 1 Else Portd.4 = 0
         If Zeichen.7 = 1 Then Portd.5 = 1 Else Portd.5 = 0
         ' Höherwertiges Nibble übertragen
         Portb.3 = 1
         Waitms 1
         Portb.3 = 0
         Waitms 1
    
         ' Niederwertiges Nibble setzen
         If Zeichen.0 = 1 Then Portd.2 = 1 Else Portd.2 = 0
         If Zeichen.1 = 1 Then Portd.3 = 1 Else Portd.3 = 0
         If Zeichen.2 = 1 Then Portd.4 = 1 Else Portd.4 = 0
         If Zeichen.3 = 1 Then Portd.5 = 1 Else Portd.5 = 0
         ' Niederwertiges Nibble übertragen
         Portb.3 = 1
         Waitms 1
         Portb.3 = 0
         Waitms 1
    
       End Sub
    
    End
    Wenn ich den Code kompilieren will sagt mir Bascom jedoch folgendes

    "Error 130 Line 56 [u.a.] Incorrect number of parameter....usw."

    Line 56,.... bezieht sich auf die Zeilen

    Call Lcdwrite(&B00101100)
    ...
    Call Lcdwrite(&B00001001)
    ....
    usw

    Nur ich finde den Fehler nicht, was ist daran genau falsch?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    35
    Beiträge
    1.614
    du solltest vielleicht mal nen parameter bei der sub reinpacken ^^ du übergibst ja einen, aber die sub hat keinen ^^

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    36
    Beiträge
    519
    Sorry wenn ich nachfragen muss aber was meinst du damit genau, die Sub betreffend?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    35
    Beiträge
    1.614
    Declare Sub Lcdwrite(byval zeichen as byte)

    ...

    Sub Lcdwrite(byval zeichen as byte)
    ...
    End Sub
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    35
    Beiträge
    1.101
    klappt das Programm bei dir??



    gruß
    patrick

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    36
    Beiträge
    519
    Es klappt leider nicht, ich weis nicht warum. Irgendwas muss an der Initialisierung noch nicht stimmen. Es wird kein einziges Zeichen auf dem LCD angezeigt, nur die Kontrastbeleuchtung ist zu sehen.

    Das ist mein momentaner Code, er wurde leicht modifiziert - Ich habe vorhin auch noch vergessen die Pins des LCDs als Ausgänge zu setzen. Trotz dieser Änderung tut sich aber nichts. Auch habe ich dem LCD 100ms Sekunden zum initialisieren gegeben - Auch das änderte nichts.

    Code:
    '*****LCD*****
    'PB3 - E
    'PB4 - RS
    
    'PD2 - PIN11 - D4
    'PD3 - PIN12 - D5
    'PD4 - PIN13 - D6
    'PD5 - PIN14 - D7
    '**************
    
    $regfile = "m32def.dat"                                     'ATmega32
    $crystal = 11059200                                         'Quarz: 11059200 Hz
    
    Declare Sub Lcdwrite(byval Zeichen As Byte)
    
    
    
    Ddrb = &B00011000
    Ddrd = &B00111100
    
    
       'Pins des LCD-Modules
    
       Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portb.3 , Rs = Portb.4
       Waitms 100                                               'Zeit damit das LCD initialisieren kann
       Initlcd
       Cls                                                            'LCD löschen
    
       Config Lcd = 20 * 4a
       'Config Lcdbus = 4
    
    
       Call Lcdwrite(&B00101100)
       Waitms 5
    
       Call Lcdwrite(&B00001001)
       Waitms 5
    
       Call Lcdwrite(&B00101000)
       Waitms 5
    
       Call Lcdwrite(&B00000110)
       Waitms 5
    
       Call Lcdwrite(&B00001100)
       Waitms 5
    
    
    Do
    
    
       Locate 1 , 1                                             'Spalte 1 und Zeile 1 des Displays
       Waitms 50
       Lcd "Hallo"                                              'Displayausgabe
    
    
    
    Loop
    
       'Schreibt die Initialisierungs - Bits zum LCD
       Sub Lcdwrite(byval Zeichen As Byte)
    
         ' Höherwertiges Nibble setzen
         If Zeichen.4 = 1 Then Portd.2 = 1 Else Portd.2 = 0
         If Zeichen.5 = 1 Then Portd.3 = 1 Else Portd.3 = 0
         If Zeichen.6 = 1 Then Portd.4 = 1 Else Portd.4 = 0
         If Zeichen.7 = 1 Then Portd.5 = 1 Else Portd.5 = 0
         ' Höherwertiges Nibble übertragen
         Portb.3 = 1
         Waitms 1
         Portb.3 = 0
         Waitms 1
    
         ' Niederwertiges Nibble setzen
         If Zeichen.0 = 1 Then Portd.2 = 1 Else Portd.2 = 0
         If Zeichen.1 = 1 Then Portd.3 = 1 Else Portd.3 = 0
         If Zeichen.2 = 1 Then Portd.4 = 1 Else Portd.4 = 0
         If Zeichen.3 = 1 Then Portd.5 = 1 Else Portd.5 = 0
         ' Niederwertiges Nibble übertragen
         Portb.3 = 1
         Waitms 1
         Portb.3 = 0
         Waitms 1
    
       End Sub
    
    End

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.12.2005
    Ort
    @FFM
    Alter
    47
    Beiträge
    408

    Hier nochmal ein übersichtlicher code für ks0073 controller

    hier mein code für 20*4 EADIP204 mit KS0073
    wo du oben einfach die pins änderst
    schaus dir an ist total simpel
    einfach compilen und ab in den chip

    gruß daniel


    Code:
    Dim Zeichen As Byte
    Declare Sub Zumdisplay(byval Zeichen As Byte)               'funktion zum senden an das display
    
    Db4dis Alias Portc.5                                        'hier einfach die belegung einstellen das wars
    Db5dis Alias Portc.4
    Db6dis Alias Portc.3
    Db7dis Alias Portc.2
    Rsdis Alias Portc.1
    Enabledis Alias Portc.0
    
    Config Lcdpin = Pin , Db4 = Db4dis , Db5 = Db5dis , Db6 = Db6dis , Db7 = Db7dis , E = Enabledis , Rs = Rsdis
    
    Initlcd
       Call Zumdisplay(&B00101100)                              'aufruf zum initialisieren
       Waitms 5                                                 'des display controllers
       Call Zumdisplay(&B00001001)
       Waitms 5
       Call Zumdisplay(&B00101000)
       Waitms 5
       Call Zumdisplay(&B00000110)
       Waitms 5
       Call Zumdisplay(&B00001100)
       Waitms 5
    Config Lcd = 20 * 4a                                        'display als 20 zeichen mal 4 zeilen
    
    
    Cls
    
    Locate 1 , 1
    Lcd "Hello"
    Locate 2 , 1
    Lcd "world"
    
    End
    
    
    Sub Zumdisplay(byval Zeichen As Byte)
    
         ' Höherwertiges Nibble setzen
         If Zeichen.4 = 1 Then Set Db4dis Else Reset Db4dis
         If Zeichen.5 = 1 Then Set Db5dis Else Reset Db5dis
         If Zeichen.6 = 1 Then Set Db6dis Else Reset Db6dis
         If Zeichen.7 = 1 Then Set Db7dis Else Reset Db7dis
    
         ' höherwertiges nibble übertragen
         Set Enabledis
         Waitms 5
         Reset Enabledis
         Waitms 5
    
         ' Niederwertiges Nibble setzen
         If Zeichen.0 = 1 Then Set Db4dis Else Reset Db4dis
         If Zeichen.1 = 1 Then Set Db5dis Else Reset Db5dis
         If Zeichen.2 = 1 Then Set Db6dis Else Reset Db6dis
         If Zeichen.3 = 1 Then Set Db7dis Else Reset Db7dis
    
         ' Niederwertiges Nibble übertragen
         Set Enabledis
         Waitms 5
         Reset Enabledis
         Waitms 5
    
    End Sub

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    36
    Beiträge
    519
    Ich hab das mal ausprobiert und es ging nicht. Langsam glaube ich, dass das LCD ´ne Macke hat, das kann doch nicht sein oder? Auch habe ich mal die Datenpins von D2/D3/D4.... auf A0/A1/A2 verlegt. Habe schon von einigen gelesen dass ihnen das half - Mir jedoch nicht. Ich weis nun nicht mehr was machen, das Ding will einfach nicht laufen!

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.12.2005
    Ort
    @FFM
    Alter
    47
    Beiträge
    408
    lad dir mal n lcd testprogramm für parallelport runter
    und häng dein display dran
    so hab ich meins auch zum starten gekriegt
    hatte auch probleme das es anfangs nicht wollt
    beschaltung am parallelport ist total simpel kann ich dir durchgeben bei bedarf

    hab mir das CFAH_wintest von crystalfontz gezogen und dann liefs

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    also ich betreib das
    ea-dip204 immer im 4-bit-modus,
    dafür hänge ich dann aber d0 bis d3 an gnd.

    es gab hier im forum aber auch mal ne lib für die
    initialisierung des lcd unter bascom
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen