Hallo Leute, Ich versuche seit ner Woche mein LCD Display zu initialisieren. Leider hab ich echt keine idee wieso es nicht funktioniert. Hab mir das Datenblatt(http://www.elpro.org/Images/html/Punktmatrixmodule/DEM16226SYH-LY.pdf) angeguckt und auch die beiträge hier um forum zum s6a0069 gelesen. meine intialisierung sieht bis jetzt so aus: #include <avr/io.h> #include <stdint.h> #include <stdio.h> #include <inttypes.h> #include <util/delay.h> #include <avr/signal.h> #define F_CPU 4000000 /* Oszillator-Frequenz in Hz */ int i; int main () { i=0; DDRC=0b11111111; DDRB=0b00000111; DDRD=0b11110001; _delay_ms(1000); //funktion set PORTB=0b00000000; PORTC=0b00111000; _delay_ms(1000); PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; PORTB=0b00000000; PORTC=0b00110000; _delay_ms(1000); PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; _delay_ms(1000); PORTB=0b00000000; PORTC=0b00111000; _delay_ms(1000); PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; PORTB=0b00000000; PORTC=0b00111000; _delay_ms(1000); PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; PORTC=0b00001111; _delay_ms(1000); PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; _delay_ms(1000); PORTB=0b00000000; PORTC=0b00000001; _delay_ms(1000); PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; _delay_ms(1000); PORTB=0b00000000; PORTC=0b00000110; _delay_ms(1000); PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; //init ende _delay_ms(1000); for(;;) { if(i%2==0) { PORTD=0b11110001; _delay_ms(1000); } else { PORTD=0b00000000; _delay_ms(1000); } i++; } return(0); } hab es mit verschiedenen delay times versucht. auf 1000 steht es jetzt eigentlich nur wegen des letzten tests Aber bei dem Display tut sich einfach garnichts. Würd mich über nen bissi hilfe freun.
..._delay_ms(1000).... die 1000 gibt es nicht bei dir mit 4mhz. schau mal ins tut. da gibt es eine berechnungsformel für.
...und wo ist die Soße zu dem Spagetticode? Sorry, aber dieses Durcheinander von Zahlen und Bits fummelt dir niemand auseinander. Dafür gibt es #define. Dann kann auch jemand nachvollziehen was du dem Display mitzuteilen versuchst.
ja auf 1000 steht es nur weil ich verschiedene werte durchprobiert habe und 1000 ja auf jedenfall laaaang genug ist. So ich habn mal die einzelnen kommentare eingefügt // init ports DDRC=0b11111111;//datenbits DDRB=0b00000111;//steuerbits DDRD=0b11110001;//out für LEDS _delay_ms(1000); //funktion set 1 PORTB=0b00000000; PORTC=0b00111000; _delay_ms(1000); //übermahme PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; //funktion set 2 PORTB=0b00000000; PORTC=0b00110000; _delay_ms(1000); //übernahme PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; _delay_ms(1000); //funktion set 3 PORTB=0b00000000; PORTC=0b00111000; _delay_ms(1000); //übernahme PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; //funktion set PORTB=0b00000000; PORTC=0b00111000; _delay_ms(1000); //übernahme PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; //display control PORTC=0b00001111; _delay_ms(1000); //übermahme PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; //display clear _delay_ms(1000); PORTB=0b00000000; PORTC=0b00000001; _delay_ms(1000); //übernahme PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; _delay_ms(1000); //entry mode set PORTB=0b00000000; PORTC=0b00000110; _delay_ms(1000); //übernahme PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; //init ende _delay_ms(1000);
Nochmal :-) _delay_ms(1000); GEHT_NICHT :-) lg, Frank
nochmal: ich hab das auch schon mit 50ms 5ms und 2ms und 1ms und überhaubt ausprobiert und auch in verschieden kombinationen , weil ja z.B clear länger braucht auf 1000 steht es NUR weils das letzte war was ich getestet habe. // init ports DDRC=0b11111111;//datenbits DDRB=0b00000111;//steuerbits DDRD=0b11110001;//out für LEDS _delay_ms(50); //funktion set 1 PORTB=0b00000000; PORTC=0b00111000; _delay_ms(2); //übermahme PORTB=0b00000001; _delay_ms(2); PORTB=0b00000000; //funktion set 2 PORTB=0b00000000; PORTC=0b00110000; _delay_ms(2); //übernahme PORTB=0b00000001; _delay_ms(2); PORTB=0b00000000; _delay_ms(2); //funktion set 3 PORTB=0b00000000; PORTC=0b00111000; _delay_ms(2); //übernahme PORTB=0b00000001; _delay_ms(2); PORTB=0b00000000; //funktion set PORTB=0b00000000; PORTC=0b00111000; _delay_ms(2); //übernahme PORTB=0b00000001; _delay_ms(2); PORTB=0b00000000; //display control PORTC=0b00001111; _delay_ms(5); //übermahme PORTB=0b00000001; _delay_ms(2); PORTB=0b00000000; //display clear _delay_ms(2); PORTB=0b00000000; PORTC=0b00000001; _delay_ms(2); //übernahme PORTB=0b00000001; _delay_ms(2); PORTB=0b00000000; _delay_ms(2); //entry mode set PORTB=0b00000000; PORTC=0b00000110; _delay_ms(2); //übernahme PORTB=0b00000001; _delay_ms(2); PORTB=0b00000000; //init ende _delay_ms(2); //so die 1000 währe dann raus, aber ändert nix
So geht das: #define F_CPU 4000000 /* Oszillator-Frequenz in Hz */ //#define F_CPU unbedingt VOR dem nächsten include machen !!!! #include <util/delay.h> unsigned int i; for(i=0; i<1000; i++) { _delay_ms(1); }
danke erstmal für die schnellen antworten. oki das meine delay nicht richtig war, hab ich ja verstanden. aber auch mit den for schleifen hat sich noch nix geändert. das problem muss irgendwo ander liegen for(i=0; i<50; i++) { _delay_ms(1); } //funktion set 1 PORTB=0b00000000; PORTC=0b00111000; for(i=0; i<2; i++) { _delay_ms(1); } //übermahme PORTB=0b00000001; for(i=0; i<2; i++) { _delay_ms(1); } PORTB=0b00000000; //funktion set 2 PORTB=0b00000000; PORTC=0b00110000; for(i=0; i<2; i++) { _delay_ms(1); } //übernahme PORTB=0b00000001; for(i=0; i<2; i++) { _delay_ms(1); } PORTB=0b00000000; for(i=0; i<2; i++) { _delay_ms(1); } //funktion set 3 PORTB=0b00000000; PORTC=0b00111000; for(i=0; i<2; i++) { _delay_ms(1); } //übernahme PORTB=0b00000001; for(i=0; i<2; i++) { _delay_ms(1); } PORTB=0b00000000; //funktion set PORTB=0b00000000; PORTC=0b00111000; for(i=0; i<2; i++) { _delay_ms(1); } //übernahme PORTB=0b00000001; for(i=0; i<2; i++) { _delay_ms(1); } PORTB=0b00000000; //display control PORTC=0b00001111; for(i=0; i<5; i++) { _delay_ms(1); } //übermahme PORTB=0b00000001; for(i=0; i<2; i++) { _delay_ms(1); } PORTB=0b00000000; //display clear for(i=0; i<2; i++) { _delay_ms(1); } PORTB=0b00000000; PORTC=0b00000001; for(i=0; i<2; i++) { _delay_ms(1); } //übernahme PORTB=0b00000001; for(i=0; i<2; i++) { _delay_ms(1); } PORTB=0b00000000; for(i=0; i<2; i++) { _delay_ms(1); } //entry mode set PORTB=0b00000000; PORTC=0b00000110; for(i=0; i<2; i++) { _delay_ms(1); } //übernahme PORTB=0b00000001; for(i=0; i<2; i++) { _delay_ms(1); } PORTB=0b00000000; //init ende
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.