Filipone Postat Martie 27, 2005 Partajează Postat Martie 27, 2005 ai folosit si reset-ul soft, (initializarea "totala")eventual fara test de busy, timing-ul din DS 44780cum arata display-ul neinitializat? trebuie sa ai innegrit primul rand(la mine asa era).Acum am incercat resetul soft folosind timingurile care le-am gasit intr-un alt cod destinat unui LCD cu controler identic cu acesta KS0066U. Si degeaba... Tot ramane innegrit primul rand. Link spre comentariu
Filipone Postat Martie 27, 2005 Partajează Postat Martie 27, 2005 ai folosit si reset-ul soft, (initializarea "totala")eventual fara test de busy, timing-ul din DS 44780cum arata display-ul neinitializat? trebuie sa ai innegrit primul rand(la mine asa era).Acum am incercat resetul soft folosind timingurile care le-am gasit intr-un alt cod destinat unui LCD cu controler identic cu acesta KS0066U. Si degeaba... Tot ramane innegrit primul rand.Daca mi se permite rectificarea... MERGEEEE! De fapt era un "b" uitat de mine la setarea "trisb" si mi-am dat seama ca era ceva in neregula cu ajutorul unui Debugger fain de tot: Voltmetrul (aveam pinul RS in permanenta 1 logic ). Multumesc pentru ajutor!Bitul busy il citeste foarte bine si am observat diferenta intre comanda folosind delay-uri si folosind flag-ul BUSY, adica de la melc la Speedy Gonzales. :shock: Link spre comentariu
aghora17 Postat Martie 28, 2005 Autor Partajează Postat Martie 28, 2005 pai da-ne si noua codul (doar partea de lcd, ca sa nu mor prost degeaba) Link spre comentariu
Filipone Postat Martie 28, 2005 Partajează Postat Martie 28, 2005 pai da-ne si noua codul (doar partea de lcd, ca sa nu mor prost degeaba)Asta este codul. Eu folosesc compilatorul acesta: http://www.picant.com/c2c/download.html . Nu cred ca iti va veni greu sa transformi codul C in asm daca nu folosesti compilatoare C. BAFTA! MAIN lcd_reset();//Reset prin instructiunilcd_init();//Initializare interfata, display, cursor.. etclcd_putstr("FORUM IZATECH"); RUTINE LCD DB7-DB0 sunt legati la PORTCRS legat la PORTB.3R/W legat la PORTB.4E legat la PORTB.5 const char on = 1;const char off = 0;void delayms(char nr); // Asteapta nr milisecunde folosind tmr0void lcd_init(); // Initializeaza LCD-ulvoid lcd_rs(char set); // Controleaza pinul RS al LCD-uluivoid lcd_rw(char set); // Controleaza pinul R/W al LCD-uluivoid lcd_e(char set); // Controleaza pinul E al LCD-uluivoid test_busy(); // Verifica Flag Busyvoid lcd_putcmd(char cmd);// Trimite comanda LCD-uluivoid lcd_putchar(char chr);// Scrie un caractervoid lcd_reset(); // Reseteaza LCD-ulvoid lcd_putstr( const char *lcdptr );// Scrie un string pe afisajvoid lcd_rs(char set){ if (set == on) { set_bit(portb, 3); } else { clear_bit(portb, 3); }}void lcd_rw(char set){ if (set == on) { set_bit(portb, 4); } else { clear_bit(portb, 4); }}void lcd_e(char set){ if (set == on) { set_bit(portb, 5); } else { clear_bit(portb, 5); }}void lcd_putcmd(char cmd){ test_busy(); portc = cmd; lcd_rs(off); lcd_rw(off); lcd_e(on); lcd_e(off);}void test_busy(){ char busy; busy = 1;// presupunem ca este ocupat char buf; // buffer pentru busy flag buf = 0; trisc = 0xFF; //pinii legati la DB7-DB0 sunt setati ca intrare while(busy == 1) // atata timp cat este ocupat stai in bucla { lcd_rs(off); lcd_rw(on);// setezi rs si r/w pentru citirea Flag-ului lcd_e(on);// ridici linia E buf = portc; // incarci intr-un buffer ce ti-a trimis LCD-ul lcd_e(off);// cobori linia E if ((buf & 10000000b) == 10000000b) // testezi daca bitul 7 din buffer este 1 { busy = 1; // daca da lcd-ul este ocupat } else { busy = 0; // daca nu lcd-ul este liber si iesi din bucla } } lcd_rw(off);// setezi inapoi rw = 0 pentru scriere trisc = 0;// portul c este configurat ca iesire}void lcd_reset(){ lcd_e(off); lcd_rw(off); lcd_rs(off); delayms(100); portc = 00110000b;//DB7-DB0 = 00110000b lcd_e(on); delayms(5); lcd_e(off); delayms(200); lcd_e(on); delayms(5); lcd_e(off); delayms(50); lcd_e(on); delayms(5); lcd_e(off); delayms(10);}void lcd_init(){ lcd_putcmd(00111000b); delayms(1); lcd_putcmd(00001100b); delayms(1); lcd_putcmd(00000001b); delayms(1); lcd_putcmd(00000110b); delayms(1); }void lcd_putchr(char chr){ test_busy(); portc = chr; lcd_rs(on); lcd_rw(off); lcd_e(on); lcd_e(off); lcd_rs(off);}void lcd_putstr( const char *lcdptr ){ char pi; pi = 0; // Check for end of string while( lcdptr[pi] != 0 ) { lcd_putchr( lcdptr[pi++] );// Display on LCD }} void lcd_putnr(int nr){ lcd_putchr('0'+nr/100); nr = nr % 100; lcd_putchr('0'+nr/10); lcd_putchr('.'); lcd_putchr('0'+nr%10);} EDITAT: Vroiam sa fie o supriza.. oricum o sa mai postez in sectiunea DIY codul complet cu schema, poze etc... deoarece am o promisiune mai veche de respectat (Cristiano stie despre ce este vorba ) Link spre comentariu
aghora17 Postat Martie 28, 2005 Autor Partajează Postat Martie 28, 2005 cred ca as prefera varianta hex. e mai simplu. Link spre comentariu
Filipone Postat Martie 28, 2005 Partajează Postat Martie 28, 2005 cred ca as prefera varianta hex. e mai simplu.Eu cred ca nu e mai simplu deoarece codul apartine unei aplicatii mai mari (adica butoane, adc-uri etc) si hexul generat nu va contine doar rutina de lcd.Daca tot nu te descurci cu codul de C fac in pseudo-cod (un limbaj mai pe intelesul tuturor) pasii de initializare ai LCD-ului, o descriere mai amanuntita a interfetei de comanda (inclusiv cum sa testezi flag-ul BUSY) sau mai pot sa iau ASM-ul creat de compilator si sa extragi tu portiunile pentru LCD.Cum doresti!EDITAT: Am adaugat comentarii la codul de mai sus in functia test_busy(). Link spre comentariu
pid Postat Aprilie 3, 2005 Partajează Postat Aprilie 3, 2005 sal...sory ca ma bag shi eu un pic cam offtopic dar stie careva vre-un program mai complet in asm (eventual shi cu cateva explicatii) sa scrie ceva pe modulul lcd conectat pe 4 biti la un PIC16F84?mi-ar trebui sa fie complet sa pot intelege si eu ceva (sa fie si rutinele de initializare, delay, etc)am gasit pe la aplicatii la microchip sau la mikroelektronika insa programu e separat de subrutinele de initializare, uneori cu notatii diferite si nu inteleg nimic Link spre comentariu
Vizitator alex Postat Aprilie 3, 2005 Partajează Postat Aprilie 3, 2005 Vezi arhiva pusa de mine mai sus, chiar in acest post Link spre comentariu
diaconuliviu Postat Aprilie 5, 2005 Partajează Postat Aprilie 5, 2005 Am si eu nevoie de datasheetul afisorului PVC 160203P, il are cineva?Am o schema de stroboscop care utilizeaza PIC 16F628 si "LCD 2x16 paralel", nu se specifica tipul, eu am acest afisor(PVC 160203P) si conexiunile sint numerotate altfel, in plus are si doi "pini" in plus, "A" si "K". Link spre comentariu
cristianp Postat Aprilie 5, 2005 Partajează Postat Aprilie 5, 2005 Pinii A si K pe care ii ai in plus sunt anod si respectiv catod pentru LED-urile de iluminare a display-ului. Le poti lasa neconectate fara nici o problema daca nu vrei iluminarea LCd-ului. Link spre comentariu
diaconuliviu Postat Aprilie 5, 2005 Partajează Postat Aprilie 5, 2005 e cu terminatie PVC deci fara leduri Link spre comentariu
cristianp Postat Aprilie 5, 2005 Partajează Postat Aprilie 5, 2005 Vezi link-ul producatorului: http://www.picvue.com.tw/product_sn/index2_1602.htm Link spre comentariu
diaconuliviu Postat Aprilie 6, 2005 Partajează Postat Aprilie 6, 2005 multumesc mult Link spre comentariu
MirceaM Postat Iunie 22, 2005 Partajează Postat Iunie 22, 2005 Mie inca nu imi merge afisarea. Folosesc 16F876 si LCD Ampire 2x16. Conectez D0,D1,D2,D3 de la LCD cu PortB0,B1,B2,B3 de la PIC si RS,RW,EN cu C0,C1,C2. Bineinteles si alimentarile pe LCD.Deci vreau 4 biti mode, low. Filipone vad ca foloseste 8 biti. Tot ce vad sunt cele 16 matrici de 5x8 pixeli afisate pe primul rand al LCD-ului. Am incercat mai multe variante de soft, de exemplu si LCD.C din directorul "Drivers" al lui CCS PIC C compiler, dupa ce am modificat assignmenturile de pini. Si nu vrea. Recunostinta vesnica celui ce ma ajuta... Link spre comentariu
Vizitator alex Postat Iunie 22, 2005 Partajează Postat Iunie 22, 2005 Problema e simpla. Pentru modul 4biti se folosesc liniile D7:D4 unde D7=MSB si D4 e LSB (si nu D0:D3 asa cum ai folosit tu) Codul postat de mine mai sus poate fi foarte usor convertit in C. 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