- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 6 von 6

Thema: LCD initialisierung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.02.2005
    Beiträge
    11

    LCD initialisierung

    Anzeige

    Powerstation Test
    Hi @all,
    Ich habe ein porblem mit einer LCD initialisierung.
    Ich benutze ein 4*20 LCD Display (EADIP204-4 mit von Reichelt) mit KS0073 Controller, ATmega16 bei 1 MHz und das AVR Stundio.

    und zwar habe ich mir die LCD routine von mikrocontoller.de geholt
    und die funktionier soweit auch wunderbar.
    nur hat es den schönheitsfehler, daß bei mir nur die erste und dritte zeile funktioniert. das der display controller von disem tutorial ein aderer ist wie meiner ist mit auch klar.

    jetzt habe ich einfach versucht die initialisierungs routine umzumodeln.

    So sieht sie orginal aus mit der die erste und dritte zeile funktionieren:

    ;Initialisierung: muss ganz am Anfang des Programms aufgerufen werden
    lcd_init:
    ldi temp3,50
    powerupwait:
    rcall delay5ms
    dec temp3
    brne powerupwait
    ldi temp1, 0b00000011 ;muss 3mal hintereinander gesendet
    out PORTD, temp1 ;werden zur Initialisierung
    rcall lcd_enable ;1
    rcall delay5ms
    rcall lcd_enable ;2
    rcall delay5ms
    rcall lcd_enable ;und 3!
    rcall delay5ms
    ldi temp1, 0b00000010 ;4bit-Modus einstellen
    out PORTD, temp1
    rcall lcd_enable
    rcall delay5ms
    ldi temp1, 0b00101000 ;noch was einstellen...
    rcall lcd_command
    ldi temp1, 0b00001100 ;...nochwas...
    rcall lcd_command
    ldi temp1, 0b00000100 ;endlich fertig
    rcall lcd_command
    ret

    laut datenblatt sollte die initialsierung für mein display so aussehen:

    lcd_init:
    ldi temp3,0x50
    powerupwait:
    rcall delay5ms
    dec temp3
    brne powerupwait
    ldi temp1, 0b00100000 ; 4 bit Modus
    out PORTD, temp1
    rcall delay5ms
    ldi temp1, 0b00100000 ; für was auch immer
    rcall lcd_command
    rcall delay5ms
    ldi temp1, 0b10000000 ; für zweiline modus
    rcall lcd_command ;( vier line modus seht im datenblatt
    rcall delay5ms ; an dieser stelle nicht zur verfügung)
    ldi temp1, 0b00000000 ;
    rcall lcd_command ; für was auch immer
    rcall delay5ms
    ldi temp1, 0b11110000 ; Display on, curser on,
    rcall lcd_command ; blink on
    rcall delay5ms
    ldi temp1, 0b00000000 ;>
    rcall lcd_command ;>
    rcall delay5ms ;>
    ldi temp1, 0b00010000 ;> clear display
    rcall lcd_command ;>
    rcall delay5ms ;>
    ldi temp1, 0b00000000 ; für was auch immer
    rcall lcd_command ;
    rcall delay5ms
    ldi temp1, 0b01110000 ; increment mode &
    rcall lcd_command ; entire shift on
    rcall delay5ms
    ldi temp1, 0b00000000 ; bis hier funktioniert auch
    rcall lcd_command ; meine initialisierung
    rcall delay5ms ;
    ldi temp1, 0b00001001 ; laut datenblatt stell ich so
    rcall lcd_command ; den 4 line modus ein.
    rcall delay5ms ; ab hier bleibt dann das display ; dunkel!
    ret

    Hat jemand eine idee woran das liegen könnte?
    ich habe an dem display noch einen offenen reset pin mit dem ich nicht so
    recht weiss was ich mit dem anfangen soll.
    könnte es vielleich auch damit zusammen hängen.

    danke schonmal im vorraus

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.08.2004
    Ort
    484..
    Alter
    34
    Beiträge
    339
    Ich habe auch das Problem mit dem Code von Mikrocontroller.net ! Bei mir wird jedoch nur die erste Zeile angezeigt, weil ich ein 2*16 Display verwende. Und das hat den HD-Controller.
    * human knowledge belongs to the world *

    www.domspage.de - Robotik - TobiSAt8

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2004
    Alter
    40
    Beiträge
    255
    Wenn ich es noch richtig in Erinnerung habe, wird normalerweise die erste ZEile und die Dritte Zeile nacheinander addressiert und anschließend die 2. zeile und die 4. zeile (auch wenn 3. und 4. Zeile nicht existieren).

    Du musst mal im Datenblatt nachschauen, bei welcher Adresse die zweite Zeile beginnt und dann da deinen cursor hinsetzen, bevor du schreibst.

    Viele Grüße
    Flite

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo,
    schaue mal hier
    Und ganz ganau die Zeile Display RAM Address Set
    Übrigens das stimmt, was Flite geschrieben hat, bei Displays mit 4x20 Zeichen ist meistens
    Zeile 1 von 0 bis 13h
    Zeile 2 von 40h bis 53h
    Zeile 3 von 14h bis 27h
    Zeile 4 von 54h bis 67h

    Gruß Sebastian

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    07.02.2005
    Beiträge
    11
    Also bei meinem Display schaut das so aus:
    1.Zeile $00...$13
    2.Zeile $20...$33
    3.Zeile $40...$53
    4.Zeile $60...$73

    und der Curser lässt sich auf die Zeile 1. und 3. auch so einstellen.
    aber nur nicht die 2. und 4. zeile.

    und ich vermute, daß es daran liegt, daß ich den vier zeilen modus aufrufen muß.
    aber das funktioniert ja nicht siehe oben.
    Gruß

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.08.2004
    Ort
    484..
    Alter
    34
    Beiträge
    339
    Bei mir funktioniert es nun, indem ich nach jedem 16.Zeichen einfach in die 2.Zeile mit den Befehlen
    Code:
    ldi temp1, 0b11000000
    rcall lcd_command
    springe. Dabei beginnt meine 2.zeile mit der Adresse $64 !!!
    * human knowledge belongs to the world *

    www.domspage.de - Robotik - TobiSAt8

Berechtigungen

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

Solar Speicher und Akkus Tests