Vizitator Vasile Postat Mai 2, 2007 Partajează Postat Mai 2, 2007 tapa :goodman: LCD-urile nu sunt compatibile perfect, eu ca sa fac unu de 16x1 a trebuie sa-l configurez ca 16x1a Link spre comentariu
lucicop Postat Mai 2, 2007 Partajează Postat Mai 2, 2007 Eu nu am cumparat. Dar vezi ca atunci cand il alimentezi si nu e initializat, ar trebui sa fie aprinsi toti pixelii. Link spre comentariu
laStudiu Postat Mai 3, 2007 Autor Partajează Postat Mai 3, 2007 Eu nu am cumparat. Dar vezi ca atunci cand il alimentezi si nu e initializat, ar trebui sa fie aprinsi toti pixelii.La alimentare se vad toti pixeli daca il tii inclinat intr-o parte; daca il tii normal nu se vade decat jumatatea stanga. Link spre comentariu
lucicop Postat Mai 3, 2007 Partajează Postat Mai 3, 2007 Trebuie sa se vada clar cel putin un rand, ca si cum ar fi aprinsi toti. Daca nu se vad decat inclinat, atunci inseamna ca nu e alimentat cum trebuie, sau e ars ceva pe acolo. Masoara tensiunile pe acolo si vezi ce ai. Daca poti incearca si cu un alt LCD, dar dupa ce verifici schema ta, sa nu fie de vina pentru arderea lor... Link spre comentariu
laStudiu Postat Mai 3, 2007 Autor Partajează Postat Mai 3, 2007 Afisajul tot nu merge, sa nu fie buna initializarea ? Iata sursa delay.c : #include "lcd.h"void lcd_write(unsigned char c){ LCD_DB7 = (c >> 7) &0x01; LCD_DB6 = (c >> 6) &0x01; LCD_DB5 = (c >> 5) &0x01; LCD_DB4 = (c >> 4) &0x01; LCD_STROBE; LCD_DB7 = (c >> 3) &0x01; LCD_DB6 = (c >> 2) &0x01; LCD_DB5 = (c >> 1) &0x01; LCD_DB4 = c & 0x01; LCD_STROBE; DelayUs(80);// PORTD = (PORTD & 0x0F) | (c & 0xF0);// LCD_STROBE;// PORTD = (PORTD & 0x0F) | (c << 4);// LCD_STROBE;// DelayUs(80);}void lcd_clear(void){ LCD_RS = 0; lcd_write(0x01); DelayMs(4); //DelayMs(4)}void lcd_puts(const char * s){ LCD_RS = 1; // write characters while(*s) lcd_write(*s++);}void lcd_putch(char c){ LCD_RS = 1; // write characters PORTD = (PORTD & 0x0F) | (c & 0xF0); LCD_STROBE; PORTD = (PORTD & 0x0F) | (c << 4); LCD_STROBE; DelayUs(80);}void lcd_goto(unsigned char pos){ LCD_RS = 0; lcd_write(0x80 + pos);} void lcd_init(void){ LCD_RS = 0; LCD_RW = 0; DelayMs(150); PORTD = (PORTD & 0x0F) | (0x20); //function set LCD_STROBE; LCD_STROBE; PORTD = (PORTD & 0x0F) | (0x40); LCD_STROBE; DelayUs(80); PORTD = (PORTD & 0x0F); //Display on/off control LCD_STROBE; PORTD = (PORTD & 0x0F) | (0xC0); LCD_STROBE; DelayUs(80); PORTD = (PORTD & 0x0F); //Display clear LCD_STROBE; PORTD = (PORTD & 0x0F) | (0x10); LCD_STROBE; DelayMs(4); PORTD = (PORTD & 0x0F); //Entry mod set LCD_STROBE; PORTD = (PORTD & 0x0F) | (0x60); LCD_STROBE; DelayUs(80);}Si delay.h : #ifndef LCD_H#define LCD_H#ifndef _PIC_H #include <pic.h>#endif#ifndef XTAL_FREQ #include "delay.h"#endif#ifndef DelayUs() //pus de mine #include "delay.h"#endif#define LCD_RS RD2#define LCD_RW RD1#define LCD_E RD0#define LCD_STROBE (LCD_E = 1);DelayUs(3);(LCD_E = 0);#define LCD_DB7 RD7#define LCD_DB6 RD6#define LCD_DB5 RD5#define LCD_DB4 RD4void lcd_write(unsigned char c);void lcd_clear(void);void lcd_puts(const char * s);void lcd_putch(char c);void lcd_goto(unsigned char pos);void lcd_init(void);#endifAm facut urmatoarele functii pentru verificare, le-am apelat din main() si seteaza pinii portului D corect: void lcd_set_rs(void){ LCD_RS = 1;}void lcd_set_rw(void){ LCD_RW = 1;}void lcd_set_en(void){ LCD_E = 1;}void lcd_set_data(void){ LCD_DB7 = 1; LCD_DB6 = 1; LCD_DB5 = 1; LCD_DB4 = 1;}... L-am verificat si cu Hi-TECH Debag si nu am gasit anomalii. Nu stiu ce are. Link spre comentariu
laStudiu Postat Mai 3, 2007 Autor Partajează Postat Mai 3, 2007 Trebuie sa se vada clar cel putin un rand, ca si cum ar fi aprinsi toti. Daca nu se vad decat inclinat, atunci inseamna ca nu e alimentat cum trebuie, sau e ars ceva pe acolo. Masoara tensiunile pe acolo si vezi ce ai. Daca poti incearca si cu un alt LCD, dar dupa ce verifici schema ta, sa nu fie de vina pentru arderea lor...Nu exista scurt intre pini. Vss e la masa, Vdd=5.02V, Vo(variabil)=0V, daca Vo > 0.73V abia se mai vede prima jumatate(inclinat), daca Vo >=1.74 nu se mai vede nimic(nici inclinat), D7-D4 sunt legati direct la portul D ( nu fac scurt). Mai mult de 5 V nu am nicaieri . Link spre comentariu
lucicop Postat Mai 3, 2007 Partajează Postat Mai 3, 2007 Si in aplicatiile mele Vo este 0V si se vede la contrast maxim. Eu am folosit un AC-162B. Cand este alimentat dar nu initializat, primul rand de pixeli este aprins complet. Daca nu se intampla asta si la tine, s-ar putea sa fie defect displayul. Link spre comentariu
Elef Postat Mai 3, 2007 Partajează Postat Mai 3, 2007 #define LCD_STROBE (LCD_E = 1);DelayUs(3);(LCD_E = 0);As zice sa renunti la constructia asta care seamana cu un macro si sa folosesti o functie traditionala de genul:void pulse_E(void){LCD_E = 1;DelayUs(3);(LCD_E = 0);} Link spre comentariu
lucicop Postat Mai 3, 2007 Partajează Postat Mai 3, 2007 E chiar un macro si e mai bine asa pentru ca nu incarca stiva inutil cu un apel de functie de 3 linii. Link spre comentariu
laStudiu Postat Mai 3, 2007 Autor Partajează Postat Mai 3, 2007 Si in aplicatiile mele Vo este 0V si se vede la contrast maxim. Eu am folosit un AC-162B. Cand este alimentat dar nu initializat, primul rand de pixeli este aprins complet. Daca nu se intampla asta si la tine, s-ar putea sa fie defect displayul.Tu ce rutina de initializare ai facut ? Ca singura specificatie care am primit-o de la Capodimonte pentru tipul acesta de display nu contine modul de initializare ... Eu ma gandesc ca nu o fi defect ci ca nu-i initializat corespunzator. N-am facut nimic deosebit sa-l ard, cum am zis, mai mult de 5V nu am avut pe pini. Link spre comentariu
lucicop Postat Mai 4, 2007 Partajează Postat Mai 4, 2007 Se putea arde de exemplu daca la un moment dat ai inversat pinii VDD cu VSS... Ce model de display e ? La al meu, pinul VSS e primul, apoi VDD si apoi Vo. Acum nu am codul in fata, dar m-am inspirat din cel din linkul pe care ti l-am trimis. Dupa cum ti-am zis, cand e alimentat si nu e initializat, va aprinde cel putin un rand de pixeli, deci trebuie sa poti sa-ti dai seama daca merge sau nu. Link spre comentariu
Bamse Postat Mai 5, 2007 Partajează Postat Mai 5, 2007 ... pentru un 16F871 cu LCD 16x1 si un q de 4Mhz ..pune RW (high) si incerca acest cod tre sa apara ce este in poza restu ramane la portu D sper sa ati merga LCD daca vrei pun si hex :02000000D728FF:0A000600B90B0628080000000000F6:1000100000000000000000000000B90B06280800E6:10002000A108031D14280800F930FF3E031D152800:10003000A10B142808000808B8003812B8123813A9:10004000B81338113810350E0F39B9000F30390593:10005000B70037183816B718B81637193817B71940:10006000B817B608031D3815380888000A30B900DB:10007000032008140A30B900032008100F3035059A:10008000B7000808B8003812B8123813B81338117E:10009000381037183816B718B81637193817B7196F:1000A000B817B608031D3815380888000A30B9009B:1000B000032008140A30B9000320081008002108A2:1000C000B500B6011B200800013083120313A10004:1000D0005F200130A10010200230A1005F2001301C:1000E000A10010200800B4018313221883172108EF:1000F000340784008008031908008313221883172B:100100002108340784000008B5001030B6001B2019:10011000B40A7428080083160313081288120813FF:1001200088130811081002308312A1001020333008:10013000A1005F203230A1005F202C30A1005F20A1:100140000630A1005F200C30A1005F206420080071:100150000730831603139F00C03081008B2064207A:100160003130A3003230A4003330A5003430A60073:100170003530A7003630A8003730A9003830AA0043:100180003930AB003030AC004130AD004230AE0011:100190004330AF004430B0004530B1004630B200CB:1001A000B3010030A2002330A1007320D6288312AF:0C01B00003132010A0108A110A12A828C6:00000001FF Link spre comentariu
laStudiu Postat Mai 5, 2007 Autor Partajează Postat Mai 5, 2007 Nu merge. Oricum am ceva probleme si cu PIC-ul trebuie sa tin RB7 la masa ca sa mearga. Nu stiu ce inseamna RW si de ce ai legat R/W la 5V? Link spre comentariu
lucicop Postat Mai 5, 2007 Partajează Postat Mai 5, 2007 RW inseamna bitul scriere/citire. Teoretic (nu am incercat niciodata) poti citi ce se afla pe ecran la pozitia curenta, punand bitul in 0. Daca se foloseste numai scriere, poate fi legat direct la VCC. Link spre comentariu
laStudiu Postat Mai 5, 2007 Autor Partajează Postat Mai 5, 2007 Daca las LCD pin3 (Vo) in aer nu afiseaza nimic. Cand am zis ca nu merge m-am referit ca arata la fel ca si cand nu e initializat -- toti pixeli din jumatatea stanga sunt aprinsi, restul se vad doar inclinat. 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