Guest Mihai Nechita Posted October 27, 2014 Share Posted October 27, 2014 Salut. Am realizat un proiect ce contine un display 16x2 conectat la un ATmega32, display ce functioneaza in 4 biti. Problema consta in faptul ca display-ul imi afiseaza pe toata prima linie niste patrate negre(ca si cum display-ul nu s-ar initializa). Configuratia pinilor este urmatoarea: -pinii de date D7-D4 sunt legati la PORTD <PD6-PD3> -linia RS legata la PD7 -linia EN legata la PD2 La un proiect anterior am folosit aceeasi rutina de initializare si trimitere comenzi/date si totul functionare in regula. Conguratia pinilor: -date D7-D4 legati la PORTD <PD7-PD4> -linia RS la PB7 -linia EN la PB6 Poate fi o problema de timing la initializare? Multumesc void LCD_init() { while(timer_ms>20); LCD_command1(0x30); timer_ms=0; while(timer_ms>5); LCD_command1(0x30); timer_ms=0; LCD_command(0x32); LCD_command(0x28); LCD_command(0x28); LCD_command(0x0C); LCD_command(0x01); LCD_command(0x06); } void LCD_command(char command) { char command1; command1 = command & 0xF0; LCD_command1(command1); command1 = ((command<<4) & 0xF0); LCD_command1(command1); } void LCD_write(char character) { char character1; character1=character&0xF0; LCD_write1(character1); character1=((character<<4)&0xF0); LCD_write1(character1); } void LCD_command1(char commandd) { PORTB&=~(1<<PB6);// register select= low(command) PORTD=commandd>>1; PORTB|=(1<<PB7); // set enable to high PORTB&=~(1<<PB7); //set enable to low TIMER_Restart(TIMER_LCD); } void LCD_write1(char characterr) { PORTB|=(1<<PB6);// register select= high (data) PORTD=characterr>>1; PORTB|=(1<<PB7); // set enable to high PORTB&=~(1<<PB7); //set enable to low TIMER_Restart(TIMER_LCD); } Link to comment
nico_2010 Posted October 27, 2014 Share Posted October 27, 2014 Pinul R/W l-ai legat la GND? Link to comment
Guest Mihai Nechita Posted October 27, 2014 Share Posted October 27, 2014 Da, nu verific busy flag Link to comment
nico_2010 Posted October 27, 2014 Share Posted October 27, 2014 Daca ai folosit aceleasi rutine de initializare si respectiv de comenzi si date, atunci verifica continuitatea traseelor si reverifica faptul ca pinul R/W este la masa. Totusi, deconecteaza programatorul inainte de verificari... Link to comment
Mircea Posted October 27, 2014 Share Posted October 27, 2014 Un sfat: pune codul complet si schema. Altfel, toti incearca sa ghiceasca ce ai facut si ce nu ai facut. Asta daca nu e cod secret . Link to comment
Liviu M Posted October 27, 2014 Share Posted October 27, 2014 Trebuie sa adaptezi codul la pinii folositi in montajul nou. In conditiile in care acum folosesti numai portul D, nu vad ce cauta portul B prin cod. Link to comment
nico_2010 Posted October 27, 2014 Share Posted October 27, 2014 Trebuie sa adaptezi codul la pinii folositi in montajul nou. In conditiile in care acum folosesti numai portul D, nu vad ce cauta portul B prin cod. Liviu M, userul a adaptat programul la pinii folositi, respectiv pinii de date pe PD6...PD3, RS pe PB7 si EN pe PB6. Link to comment
Liviu M Posted October 27, 2014 Share Posted October 27, 2014 Cand citesc primul post mie pinii de la portul B imi ies in proiectul anterior, cel functional. Lla proiectul actual mie-mi par aia cu "toti la portul D". Asa ca are dreptate Tunatorul, cel mai bine ar fi sa vedem o schema. Link to comment
Guest Mihai Nechita Posted October 27, 2014 Share Posted October 27, 2014 Problema s-a rezolvat, multumesc oricum. Problema era ca trimiteam high-nibble-ul si low nibble-ul din cuvantul de comanda pe alti pini decat era configuratia hard. Am aplicat cateva shiftari si operatii logice si cam atat. Thanks Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now