- LiTime Speicher und Akkus         
Ergebnis 1 bis 8 von 8

Thema: 16x2 LCD mit Bascom

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.01.2010
    Beiträge
    35

    16x2 LCD mit Bascom

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Moin,

    Ich habe wieder mal ein Problem.
    Ich habe das 16x2 LCD "W162B-N3LW" (Datenblatt) an einen ATmega32L angeschlossen, aber ich bekomme da keinen Text drauf.

    Bild vom Schaltplan
    Es ist noch nicht alles angeschlossen, was auf dem Schaltplan zu sehen ist.
    An meinem Testaufbau ist erst die Grundschaltung mit 5V Wandler, die LED und das Display dran.
    Taster, Beschleunigungssensor und IR-Empfänger fehlen noch.
    Anstatt der Batterie gebe ich 7V mit einem Netzteil und weil ich kein 1k Poti hatte, habe ich testweise eine Widerstandssonne drangehängt, wo ich dann für den Kontrast zwischen den Widerständen von 10-1000Ohm wechsle.

    Mein Programm sieht so aus:
    Code:
    '########################### uC Infos setzen ###################################
    $regfile = "m32def.dat"                                     ' specify the used micro
    $crystal = 8000000                                          ' used crystal frequency
    $baud = 19200                                               ' use baud rate
    $hwstack = 100                                              ' default use 32 for the hardware stack
    $swstack = 100                                              ' default use 10 for the SW stack
    $framesize = 100                                            ' default use 40 for the frame space
    
    
    '########################## Ports deklarieren ##################################
    'PD7 -> LED0 zum zeigen das uC an ist
    Led0 Alias Portd.7
    Config Led0 = Output
    Config Portd.0 = Output
    Portd.0 = 1
    Config Portd.1 = Output
    Portd.1 = 1
    Config Portd.2 = Output
    Portd.2 = 1
    Config Portd.4 = Output
    Portd.4 = 1
    Config Portd.5 = Output
    Portd.5 = 1
    Config Portd.6 = Output
    Portd.6 = 1
    
    Led0 = 1
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.5 , Rs = Portd.6
    Config Lcdbus = 4
    Config Lcdmode = Port
    Config Lcd = 16 * 2
    'CURSOR OFF
    INITLCD
    Waitms 1000
    Do
       Initlcd
       Waitms 500
       Locate 1 , 1
       Lcd "Test1"
       Locate 2 , 1
       Lcd "Test2"
       Toggle Led0
       Wait 3
       Cls
    Loop
    
    End
    Wenn ich die Schaltung nun mit Strom versorge, dann leuchtet die Hintergrundbeleuchtung des Displays, die obere Zeile ist weiß, die untere Zeile schwarz und die LED blinkt im ca. 3 Sekunden Takt.

    D5 ist übrigens auf 0V, die anderen Datenleitungen auf 5V, falls das was zu sagen hat.

    Laut Datenblatt ist es HD44780 kompatibel und ich bin auch schon auf Forenbeiträge gestoßen, wo Leute dieses Modell mit Bascom verwendet haben.

    Weiß da jemand weiter?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Wenn die "untere" Zeile bei dir schwarz ist, sind die Anschlüsse dann zufällig auf der Unterseite? Bei nem uninitialisierten LCD sind normalerweise die ungeraden Zeilen "schwarz", d.h. Display liegt kopfüber da.

    Ansonsten versuch mal, die Wartezeit VOR die LCD-Initialisierung zu stellen. Wenn beide gleichzeitig bestromt werden, fängt der AVR sonst mit dem Initialisieren an, wenn das LCD noch garnicht richtig hochgefahren ist.

    "die anderen Datenleitungen auf 5V": aber nur D4, D6 und D7 oder?
    Wenn das bei D0-D3 auch noch der Fall wäre, stimmt was gewaltig nicht.

    Und die 7V liegen hoffentlich weder direkt am AVR noch am LCD an sondern nur am Spannungsregler.
    #ifndef MfG
    #define MfG

  3. #3
    Du hast Dir eine kleine Falle eingebaut.
    Das Display ist an D0/D1 am AVR angeschlossen.
    Im Programm hast du den UART aktiviert,dadurch sind diese beiden
    Pins jetzt RXT/TXT .Damit hast du keinen Zugriff mehr auf die IO-Pins
    >falsche Ansteuerung des Displays[/b]

  4. #4
    Zitat Zitat von werner21
    ... Im Programm hast du den UART aktiviert...
    Mit welcher Zeile wird denn der UART im Programm aktiviert?

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    05.01.2010
    Beiträge
    35
    Wenn die "untere" Zeile bei dir schwarz ist, sind die Anschlüsse dann zufällig auf der Unterseite? Bei nem uninitialisierten LCD sind normalerweise die ungeraden Zeilen "schwarz", d.h. Display liegt kopfüber da.
    Ich glaube die Schrift soll später weiß auf blauem Hintergrund sein.

    Ansonsten versuch mal, die Wartezeit VOR die LCD-Initialisierung zu stellen. Wenn beide gleichzeitig bestromt werden, fängt der AVR sonst mit dem Initialisieren an, wenn das LCD noch garnicht richtig hochgefahren ist.
    Ok, teste ich gleich mal.

    "die anderen Datenleitungen auf 5V": aber nur D4, D6 und D7 oder?
    Wenn das bei D0-D3 auch noch der Fall wäre, stimmt was gewaltig nicht.
    D4,D5,D7 sind High, D5 ist Low und natürlich auch D0-D3. Die ersten 4 habe ich ja an GND gelegt.

    Und die 7V liegen hoffentlich weder direkt am AVR noch am LCD an sondern nur am Spannungsregler.
    Ja, die 7V liegen am Spannungsregler. Der gibt konstante 4,95V aus.

    Du hast Dir eine kleine Falle eingebaut.
    Das Display ist an D0/D1 am AVR angeschlossen.
    Im Programm hast du den UART aktiviert,dadurch sind diese beiden
    Pins jetzt RXT/TXT Eh? .Damit hast du keinen Zugriff mehr auf die IO-Pins
    >falsche Ansteuerung des Displays[/b]
    RS232 wollte ich eigentlich nicht nutzen, daher dachte ich, dass ich TXD und RXD als normalen I/O-Pin nutzen könnte. Könnte natürlich sein, dass der Atmega das automatisch aktiviert. Kann man das denn irgendwie deaktivieren, falls es wirklich an sein sollte?

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Ok, das mit blau/weiss hab ich übersehen; dachte es wäre ein klassisches grün/schwarz. Dann stimmt die Zeilenanordnung schon.

    Zum Deaktivieren der UART einfach die Zeile mit $Baud rauswerfen.
    Dann dürfte Bascom den UART nicht mehr initialisieren. Falls doch, kann man den UART nachträglich wieder deaktivieren, in dem man die Register UBRRH, UBRRL, UCSRA, UCSRB und UCSRC auf 0 setzt.
    #ifndef MfG
    #define MfG

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    05.01.2010
    Beiträge
    35
    Ich habe jetzt einfach mal andere Pins, anstatt den TXD-, RXD-Pins genommen, ein "Wait 1" vor das "LCDINIT" gesetzt und es funktioniert nun.
    Das mit dem deaktivieren des UART werde ich gleich mal testen. Wäre schon schöner, da es die Platine kleiner macht.

    Vielen Dank!

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2010
    Beiträge
    167
    Also das ist unsinn und ist nicht der fehler ""Wait 1".
    Was soll das Ding in der "Loop"....?

    gruss.

Berechtigungen

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

LiFePO4 Speicher Test