www.mikrocontroller.net

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


Autor: Christoph (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Frankl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kontrast Poti richtig angeschlossen.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Christoph (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens Renner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmen die Timings in Deinen lcd_command- und lcd_data-Routinen?

Autor: Jens Renner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christoph (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph (Gast)
Datum:
Angehängte Dateien:

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

Autor: Berny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.