Hallo an alle! Ich versuche mich seit einiger Zeit an eurem AVR Tutorial. Ich hab jetzt letzte Woche mein lang erwartetes LCD bekommen. Chip ist KS0066. Wie bekannt funktioniert das Tutorial bei diesem Chip nicht. Ich habe schon etliche Threads und Seiten durchforstet, Quellcode durchprobiert, nicht hilft. Die Verkabelung ist richtig, auch schon doppelt und dreifach überprüft. Da sich wegen des Tutorial-Codes zu viele Fragen bei mir aufwarfen, habe ich probiert die Ansteuerung mittels Datenblatt vollständig selbst neu aufzubauen. Ich poste hier mal meinen Code. Geschrieben in Assembler (für extra). Ich denke es hängt entweder irgendwo in de Delays oder in der LCD_init. Ich bin eigentlich Anfänger, bleib aber gerne an einem Projekt festgebissen wenns nich klappen will :-) Deswegen bitte ich grobe Anfängerfehler, sofern vorhanden, milde zu betrachten und mir Anleitung zu geben ^^ Ach ja un nochwas: Ich benutze AVRStudio und interner Takt beim Atmega8515L. Habe ihn mittels AVRStudio auf SUT_CLKSEL Int. OSC 4MhZ Startup 6ck + 0ms gestellt...ist das richtig? Gruß Giehlman Code: /* Hauptprogramm .include "m8def.inc" .include "lcd_routines.asm" .def temp1 = r16 .def temp2 = r17 .def temp3 = r18 .def tim1 = r20 .def tim2 = r21 ldi temp1, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse out SPL, temp1 ldi temp1, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse out SPH, temp1 ldi temp1, 0xFF out DDRD, temp1 rcall lcd_init rcall lcd_clear ldi temp1, 'A' rcall lcd_data loop: rjmp loop */ lcd_data: mov temp2, temp1 swap temp1 andi temp1, 0b00001111 sbr temp1, 0b00010000 out PORTD, temp1 rcall lcd_enable andi r17, 0b00001111 sbr r17, 0b00010000 out PORTD, r17 rcall lcd_enable rcall delay50us ret lcd_enable: sbi PORTD, 5 nop nop nop cbi PORTD, 5 ret lcd_clear: ldi temp1, 0b00000001 rcall lcd_command rcall delay5ms ret lcd_command: mov temp2, temp1 swap temp1 andi temp1, 0b00001111 out PORTD, temp1 rcall lcd_enable andi r17, 0b00001111 out PORTD, r17 rcall lcd_enable rcall delay50us ret /************/ /* LCD INIT */ /************/ lcd_init: rcall delay50ms ldi temp1, 0b00000010 OUT PORTD, temp1 rcall lcd_enable ldi temp1, 0b00000010 OUT PORTD, temp1 rcall lcd_enable ldi temp1, 0b00001100 OUT PORTD, temp1 rcall delay50us ldi temp1, 0b00000000 out PORTD, temp1 rcall lcd_enable ldi temp1, 0b00001111 out PORTD, temp1 rcall lcd_enable rcall delay50us /* ldi temp1, 0b00000000 out PORTD, temp1*/ ldi temp1, 0b00000001 rcall lcd_command rcall delay5ms /* ldi temp1, 0b00000000 out PORTD, temp1*/ ldi temp1, 0b00000111 rcall lcd_command ret /*********************/ /*** Zeitschleifen ***/ /*********************/ delay1us: nop /* bei 4MHz Takt ergeben sich pro 1us 4 Takte */ nop nop nop ret delay50us: ldi tim1, 0x32 /* 50 = 0x32 mal 1us = 50us */ delay50us_1: rcall delay1us dec tim1 brne delay50us_1 ret delay5ms: ldi tim2, 0x64 /* 100 = 0x64 mal 50us = 5ms */ delay5ms_1: rcall delay50us dec tim2 brne delay5ms_1 ret delay50ms: ldi tim1, 0xA /* 10 = 0xA mal 5ms = 50ms */ delay50ms_1: rcall delay5ms dec tim1 brne delay50ms_1 ret
Hallo Christian, also ich habe auch ein KS0066 4x20 LCD und ich habe leider NICHT geschaft in Assembler ein kleinem Zeichnen auf dem LCD zu bringen. Ich habe es aber in C :-) hinbekommen wenn du möchtes kann hier mein Code IN C posten vielleichts funktioniert auch bei dir. Gruß Martin
Hi! Ja gerne, wollts zwar in Assembler haben (wegen dem Grundlagenverständnis), aber des is eh zu komplex, also werd ich mich in C einarbeiten. Dann ma THX :-) Giehlman
und hier main.c (zum Test) ich denke sollte bei dir auch funktionieren, im lcd-routines.h muß du definieren welches Port usw. RS Pin .... Gruß Martin
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.