Forum: Mikrocontroller und Digitale Elektronik AVR + LCD => weiß keinen Rat mehr


von Christoph (Gast)


Angehängte Dateien:

Lesenswert?

hallo zusammen!
lange hab ich es jetzt alleine probiert, aber ich weiß keinen rat mehr!
ich habe einen avr, den 8515 und will damit im 8 bit modus ein
einzeiliges 16 zeichen breites lcd ansteuern. der lcd controller ist
der KS0070B. wenn ich spannung an die schaltung (avr + lcd) anlege
zieht mann auf dem lcd komplett ausbefüllte felder. danach tritt keine
veränderung mehr auf.
ich habe mir rat bei verschiedenen tuturials geholt, doch die haben
mich alle nicht zum erfolg geführt.

bitte bitte helft mir  g

danke im voraus

von Frankl (Gast)


Lesenswert?

Kontrast Poti richtig angeschlossen.

von Chris (Gast)


Lesenswert?

Kontrast Poti ist ne gute idee, Hast du da nen Spannungsteiler
vernünftig angeschlossen, wenn du dir nicht sicher bist, mach mal ne
kleine Zeichnung von deiner Anschluss-beschaltung.

Wo in deinem Program initialisierst du die varaiablen für deine
Delay-Schleife?

von Christoph (Gast)


Angehängte Dateien:

Lesenswert?

die variablen für die delayschleife hab ich gar nicht initialisiert. die
ist immer 0x00 und wenn die schleife fertig ist sind die wieder 0x00
oder nicht. jedenfalls ist das so, wenn ich das im avr-studio
simuliere.
ich habe den kontrast pin auf masse, somit brauch ich kein poti, falls
doch, dann wiedersprecht mir.


danke schon mal

von Chris (Gast)


Lesenswert?

Du brauchst einen Poti z.B. 10 KOhm von +5V auf Masse. Den Schleifer
bverbindest du mit dem Kontrasteingang. Dann drehst du mal dran.Auf dem
Bildschirm sollten die Balken dann irgendwann verschwinden. Wenn du
jetz deine Zahlen oder Buchstaben siehst dann laß den Kontrast so,
Siehst du gar nichts hast du noch einen Fehler im Proramm.

Gruß
Chris

von Jens Renner (Gast)


Lesenswert?

Stimmen die Timings in Deinen lcd_command- und lcd_data-Routinen?

von Jens Renner (Gast)


Lesenswert?

Nachtrag:
Bzw. bist Du sicher, dass Du das Daten-/Kommando-Byte nicht VOR dem
Enable-Vorgang senden solltest?
Du sendest es mittendrin. Keine Ahnung, ob das so hinhaut.

von Christoph (Gast)


Angehängte Dateien:

Lesenswert?

hab ein poti angebracht und dran gedreht. die ausgefüllten kästchen sind
verschwunden.
aber dem programm hab ich die reihenfolge bei der E flanke geändert
erst rs und r/w und daten anlegen, dann erst Enable-flanke. auch die
zählerschleifen hab ich zusätzlich initialisiert. aber es hat nichts
gebracht. die spannungversorgung ist auch auf stabilen 5V. an den
pegeln kann es auch nicht liegen. evtl. an pausen oder sowas. weiß noch
jemand einen rat. hab das neuste programm mit hochgeladen

von Christoph (Gast)


Angehängte Dateien:

Lesenswert?

hier hab ich außerdem noch das datenblatt von dem besagten lcd. evtl.
hilft das weiter

von Berny (Gast)


Lesenswert?

Die Register I und J müssen einen Wert erhalten, damit die
vorgeschrieben Zeiten bei der Initialisierung eingehalten werden,
ansonsten geht nix. Z.B. bei 4MHz sieht meine Delay Routine so aus:

delay5ms:                       ;5ms Pause
           ldi  i, 50          ;50 * 0,1ms = 5ms

delay1:                         ;0,1ms Pause
           ldi  j, 100
delay1_:   nop      ;0,25 µsek Pause
;--->  nop's hier hin bei 8MHz !
     dec  j              ;0,25 µsek Pause
           brne delay1_    ;0,50 µsek Pause = 1µsek * 100 = 0,1ms

           dec  i               ;
           brne delay1    ;
           ret

Das Busy Flag kann bei der Initialisierung noch nicht abgefragt werden,
deshalb die Zeiten einhalten!
Bei 8MHz halbieren sich die Werte 0,25µs -> 0,125µs, hier solltest Du
entsprechend mehr NOP'S einfügen sie Delay.

init_lcd:
           ldi  temp,3      ;3* 5ms = 15ms
powerupwait:         ;15ms warten auf Display POWER-UP
           rcall delay5ms
           dec  temp
           brne  powerupwait        ;immer noch aufs Display warten
           ldi lcd_db, 0b00110000    ;muss 3mal hintereinander
gesendet
           out PORTB, lcd_db         ;werden zur Initialisierung
           rcall lcd_command               ;1
           rcall delay5ms          ;Beim ersten Befehl 5ms warten!
     out PORTB, lcd_db
     rcall lcd_command               ;2
           out PORTB, lcd_db        ;
     rcall lcd_command               ;und 3!

           ldi lcd_db, 0b00110000    ;Display: 1 Zeilen 5x8
Dots(8Bit-Modus)
           out PORTB,lcd_db        ;
           rcall lcd_command

     ldi lcd_db, 0b00001101    ;Display on, Coursor off, Courser-Blink
off;
     out PORTB,lcd_db
     rcall lcd_command

     ret         ;Und wieder zurück
so funzt es bei mir, versuchs halt mal.

Gruß Berny

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.