Sari la conținut
ELFORUM - Forumul electronistilor

Interfață display pentru PIC16F876A


Postări Recomandate

Salut...am nevoie de ajutor in interfatarea unui LCD 2x16 cu pic-ul din titlu...problema este ca folosesc si cativa pini de pe RA, dar vreau ca RA0 si RA1 sa fie analogice....

Problema este ca nu imi afisaza nimic pe ecran...o sa pun o parte din cod mai jos...

//Lcd pinout settings
sbit LCD_RS at RA2_bit;
sbit LCD_EN at RA3_bit;
sbit LCD_D7 at RC3_bit;
sbit LCD_D6 at RC0_bit;
sbit LCD_D5 at RA5_bit;
sbit LCD_D4 at RA4_bit;
//End LCD connections

//Pin direction
sbit LCD_RS_Direction at TRISA2_bit;
sbit LCD_EN_Direction at TRISA3_bit;
sbit LCD_D7_Direction at TRISC3_bit;
sbit LCD_D6_Direction at TRISC0_bit;
sbit LCD_D5_Direction at TRISA5_bit;
sbit LCD_D4_Direction at TRISA4_bit;
//End LCD direction configuration

void main() 
{

LCD_Init();
LCD_CMD(_LCD_CURSOR_OFF);
LCD_CMD(_LCD_CLEAR);

LCD_Out(1,3, "Ceafa de");
LCD_Out(2,6, "porc...");
}
Link spre comentariu
  • Răspunsuri 10
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Acesta are restrictii...insa o sa termin cu el cat de curand...i-am facut o placa (mars01 a facut cablajul - ceva de vis - FABRICA) si maine urmeaza sa ii fac cateva meniuri, adica 4 pagini, una principala cu tensiune si curent, una cu duty cycle si una in care sa ii pot schimba sensul( adica 2 relee care fac inversarea de sens) + a patra pentru starea motorului...aceasta din urma poate lipsi...problema cu LCD am rezolvat-o, mutand Enable LCD pe alt pin al proc, am vazut pe Osciloscop care era treaba....

 

Acum ma chinui cu meniul....sa vad ce naiba iese...

seara buna

Link spre comentariu
  • 1 lună mai târziu...

Daca nu secretizati codul, se putea citi exact unde ati gresit.

- 876, nu are portC.

- declaratia: sbit LCD_D6 at RC0_bit; este nula.

un cod pentr 876 care foloseste display pe A si B ca porturi, aveti mai jos.

Atentie la: ANSEL=0b00010010; TRISA=0b11110011; TRISB=0b11100000;

in rest, este bine.. daca tot nu se poate citi codul dvs.

sbit LCD_RS at RA2_bit;
sbit LCD_EN at RA3_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISA2_bit;
sbit LCD_EN_Direction at TRISA3_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;

unsigned char ch, x, set;
unsigned int A, I;
unsigned long LA, LI, PO;


void Apa (void)
{
 A=0;
 for (x=0; x<10; x++) {A+=ADC_Read(4);}
 A=A/x;
 LA=(long)A*5000;
 LA=LA/1024;
 ///ch=LA/1000;
 ///if (ch==0) {LCD_Chr(2,12,32);}
 ///else {LCD_Chr(2,12,48+ch);}
 ///ch=(LA/100) %10;
 ///Lcd_Chr_CP(48+ch);
 /////Lcd_Chr_CP('.');
 ///ch=(LA/10) %10;
 ///Lcd_Chr_CP(48+ch);
 ///ch=(LA/1) %10;
 ///Lcd_Chr_CP(48+ch);
 /////Lcd_Chr_CP('V');
 }

void Curent (void)
{
 I=0;
 for (x=0; x<10; x++) {I+=ADC_Read(1);}
 I=I/x;
 LI=(long)I*7750;
 LI=LI/1024;
 ch=LI/1000;
 if (ch==0) {LCD_Chr(2,1,32);}
 else {LCD_Chr(2,1,48+ch);}
 ch=(LI/100) %10;
 Lcd_Chr_CP(48+ch);
 Lcd_Chr_CP('.');
 ch=(LI/10) %10;
 //Lcd_Chr_CP(48+ch);
 //ch=(LI/1) %10;
 Lcd_Chr_CP(48+ch);
 Lcd_Chr_CP('A');
 }


void main()
{
          //OSCCON=0b01101000;        // internal 4MHz
          OSCCON=0b01111000;          // internal 8MHz
          while (OSCCON.IOFS==0);     // when stabilize internal
          ANSEL=0b00010010;            // an4, an1 selected
          PORTA=0;
          TRISA=0b11110011;
          PORTB=0;
          TRISB=0b11100000;
          CMCON=0x07;               // disable comparators
          Lcd_Init();
          Lcd_Cmd(_LCD_CURSOR_OFF);
          Lcd_Cmd(_LCD_CLEAR);
          Delay_ms(10);
          Lcd_out(2,7, "=");
          Lcd_out(2,15, "kW");

while(1)
         {

          void , alea' doua de mai sus.
 si ce sa faca acum.
          }
}
Editat de WME
Link spre comentariu

 

Daca nu secretizati codul, se putea citi exact unde ati gresit.

- 876, nu are portC.

- declaratia: sbit LCD_D6 at RC0_bit; este nula.

un cod pentr 876 care foloseste display pe A si B ca porturi, aveti mai jos.

Atentie la: ANSEL=0b00010010; TRISA=0b11110011; TRISB=0b11100000;

in rest, este bine.. daca tot nu se poate citi codul dvs.


void main()
{
          //OSCCON=0b01101000;        // internal 4MHz
          OSCCON=0b01111000;          // internal 8MHz
          while (OSCCON.IOFS==0);     // when stabilize internal
          ANSEL=0b00010010;            // an4, an1 selected
          PORTA=0;
          TRISA=0b11110011;
          PORTB=0;
          TRISB=0b11100000;
          CMCON=0x07;               // disable comparators
          Lcd_Init();
          Lcd_Cmd(_LCD_CURSOR_OFF);
          Lcd_Cmd(_LCD_CLEAR);
          Delay_ms(10);
          Lcd_out(2,7, "=");
          Lcd_out(2,15, "kW");
}
while(1)
         {

          void , alea' doua de mai sus.
 si ce sa faca acum.
          }
}

 

In pagina 13 din datasheet 16F876, la adresa 07h apare PORTC, iar la adresa 87h apare si TRISC, deci portul C exista.

Tot in pagina 13 se vede ca nu exista registrul ANSEL, iar acest lucru era precizat putin mai sus, chiar in acest topic.

Editat de Elison
Link spre comentariu
  • 3 săptămâni mai târziu...

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