catalin004 Postat Decembrie 20, 2017 Partajează Postat Decembrie 20, 2017 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
Bandi Szasz Postat Decembrie 20, 2017 Partajează Postat Decembrie 20, 2017 Pentru inceput seteaza si registrul "ANSEL" prin care specifici daca pin-ul este folosit ca analog sau digital. Link spre comentariu
catalin004 Postat Decembrie 20, 2017 Autor Partajează Postat Decembrie 20, 2017 mikroC-ul nu stie de ANSEL.... Link spre comentariu
Bandi Szasz Postat Decembrie 20, 2017 Partajează Postat Decembrie 20, 2017 Nu stie findca fiecare port are registru propriu: ANSELA, ANSELB, ANSELC, etc... e descris foarte clar in datasheet la capitolul de I/O Ports. Link spre comentariu
catalin004 Postat Decembrie 20, 2017 Autor Partajează Postat Decembrie 20, 2017 Deci am scris ADCON1 = 6, ceea ce face toate porturile digitale...dupa ce programez on-line MCU display-ul merge...daca opresc si pornesc montajul nu mai apare pe linia a 2 a nimic... Link spre comentariu
catalin004 Postat Decembrie 20, 2017 Autor Partajează Postat Decembrie 20, 2017 singura varianta este ADCON1 = 0x04; Adica AN3 nu il pot folosi pe display.multumesc Link spre comentariu
Bandi Szasz Postat Decembrie 20, 2017 Partajează Postat Decembrie 20, 2017 Da aveti dreptate, este un pic de generatie mai veche si nu are registru ANSEL. PIC-urile de generatie mai noua au registru ANSEL si se pot configura pinii in orice combinatie posibila fara restrictii cum este cu ADCON1. Link spre comentariu
catalin004 Postat Decembrie 20, 2017 Autor Partajează Postat Decembrie 20, 2017 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
Vizitator WME Postat Februarie 12, 2018 Partajează Postat Februarie 12, 2018 (editat) 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 Februarie 12, 2018 de WME Link spre comentariu
Elison Postat Februarie 13, 2018 Partajează Postat Februarie 13, 2018 (editat) 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 Februarie 13, 2018 de Elison Link spre comentariu
Vizitator WME Postat Martie 5, 2018 Partajează Postat Martie 5, 2018 (editat) Scuze. Codul si raspunsul, a fost pentru 16F88. Am gresit. iertare! Editat Martie 5, 2018 de WME Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum