Sari la conținut
ELFORUM - Forumul electronistilor

Problema cu display 16x2


Vizitator Mihai Nechita

Postări Recomandate

Vizitator Mihai Nechita

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 spre comentariu
  • Răspunsuri 8
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • nico_2010

    3

  • Liviu M

    2

  • Mircea

    1

Zile populare

Top autori în acest subiect

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 spre comentariu

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 spre comentariu

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 spre comentariu
Vizitator Mihai Nechita

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 spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări