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
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?
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
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
Stimmen die Timings in Deinen lcd_command- und lcd_data-Routinen?
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.
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
hier hab ich außerdem noch das datenblatt von dem besagten lcd. evtl. hilft das weiter
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.