Romica_t Postat Mai 20, 2012 Partajează Postat Mai 20, 2012 Ati folosit careva acest lcd interfatat la PIC? Multi de pe net l-au utilizat si am zis sa incerc, chiar daca sunt incepator la microcontrolere. N-am reusit nici sa-l aprind si as avea multe intrebari. Link spre comentariu
nooob64 Postat Mai 22, 2012 Partajează Postat Mai 22, 2012 Aici ai ceva documentatie : http://www.sparkfun.com/products/9363 Este destul de greu si frustrant pina reusesti sa il pornesti, eu am stat citeva ore cu sondele de la osciloscop pe el ca sa pot realiza o sincronizare corecta a bitului 9 cu restul. Atasez un fisier cu ce am lucrat eu (dspic + 6100 philips) [attachment=0]dspic test.c[/attachment] Link spre comentariu
Liviu M Postat Mai 22, 2012 Partajează Postat Mai 22, 2012 as avea multe intrebari.Pune tu intrebarile si vedem noi daca stie cineva ceva... Link spre comentariu
Romica_t Postat Mai 22, 2012 Autor Partajează Postat Mai 22, 2012 Prima chestie e interfata pe 9 biti. In pdf-ul controller-ului ( poza de mai jos) scrie ca citirea se face pe frontul crescator al ceasului. In codul luat de pe net o face pe frontul descreascator: void spi_data(int dat){ output_low(LCD_CS); // enable chip SSPEN = 0; // turn off hardware SPI allowing us direct access to SPI in/out pins output_high (SPI_DO); // output high on data out (9th bit high = data) output_high (SPI_CLK); delay_cycles(1); // send clock pulse output_low (SPI_CLK);//------------------------> in momentul acesta lcd-ul a achizitionat bitul 9(1 in acest caz=urmeaza 8 biti ce semnifica data) SSPEN=1; // turn hardware SPI back on spi_write(dat); // make PIC do the work for the data byte output_high(LCD_CS); // disable}Eu nu am folosit functia SPI ci am facut in schimb algoritmul de mai jos:void spi_data(unsigned char dat){ unsigned char biti[8]; int i; for(i=0;i<8;i++) biti[i]=0; i=0; while(dat!=0) { biti[i]=dat%2; dat=dat/2; i++; } LCD_CS=0; // enable chip SPI_CLK=0; SPI_DO=1; Delay100TCYx( 50);//1ms delay (5000 cicluri) SPI_CLK=1;//-------------------> pe acest front crescator lcd-ul achizitioneaza bitul 9 iar urmatorii 8 biti sunt transmisi mai jos for(i=7;i>=0;i--) { SPI_CLK=0; SPI_DO=biti[i]; Delay100TCYx( 50);//1ms delay (5000 cicluri) SPI_CLK=1; Delay100TCYx( 50);//1ms delay (5000 cicluri) } LCD_CS=1; // disable}Ce zicieti, varianta mea e corecta? Link spre comentariu
godFather89 Postat Mai 22, 2012 Partajează Postat Mai 22, 2012 Problema cu SPI-ul software este performanta incomparabila cu modulul hardware. M-am jucat si eu mai demult cu un astfel de LCD pe un atmega128.Nu inteleg de ce au folosit 9bit SPI cei care au facut controllerul, mai bine mai adaugau un pin pentru data/command cum avea si LCD-ul de 3310. Link spre comentariu
Liviu M Postat Mai 22, 2012 Partajează Postat Mai 22, 2012 Mie mi se pare OK.Mi se pare cam mare delay-ul de 1 ms (a propos, dupa ce transmiti primul bit (9) si faci SPI_CLK=1 nu ai nici o intarziere), da' nu cred ca e vreo problema. Link spre comentariu
godFather89 Postat Mai 22, 2012 Partajează Postat Mai 22, 2012 Strict la varianta ta -faci multe chestii care nu are rost sa le faci. -delay mare (1-2uS ar fi de ajuns cred) putea fi rezumata la void spi_data(unsigned char dat){LCD_CS=0; // enable chipSPI_DO=1;SPI_CLK=0;DELAY;SPI_CLK=1;DELAY;unsigned char n = 9;while (--n){ SPI_CLK=0; SPI_DO = (dat & 0x80) ? 1 : 0; //ia MSB dat <<= 1; //shifteaza la stanga cu 1 DELAY; SPI_CLK=1; DELAY;}LCD_CS=1; // disable} Link spre comentariu
Romica_t Postat Mai 22, 2012 Autor Partajează Postat Mai 22, 2012 Cunostintele mele de C++ sunt de baza si de aceea folosesc algoritmi mai "babesti". Multumesc oricum de varianta. eu am stat citeva ore cu sondele de la osciloscop pe el ca sa pot realiza o sincronizare corecta a bitului 9 cu restul.Atasez un fisier cu ce am lucrat eu (dspic + 6100 philips)Te referi cumva la MSB ori la LSB (al 9-lea transmis)? Tot in datasheet-ul controlerului se mentioneaza ca atunci cand trimitem ultimul bit, pinul CS sa sufere o scurta aducere in 1. Din cate stiu eu, tu nu te-ai ocupat de asta in programul tau (scuze daca ma insel). Gasesc acest lucru ciudat deoarece transferul e sincronizat si nu ar trebui un semnal care sa indice transferul unui byte intreg(9biti). Voi ce ziceti? Link spre comentariu
nooob64 Postat Mai 22, 2012 Partajează Postat Mai 22, 2012 Nu m-am exprimat eu bine ... bitul 9 pt mine este acela care face diferenta intre data si comanda. Link spre comentariu
Romica_t Postat Mai 22, 2012 Autor Partajează Postat Mai 22, 2012 Nu m-am exprimat eu bine ... bitul 9 pt mine este acela care face diferenta intre data si comanda.Bun, am inteles. Tu ai luat in considerare chestia aceea cu CS-ul cand se trimite ultimul bit? Link spre comentariu
nooob64 Postat Mai 22, 2012 Partajează Postat Mai 22, 2012 Cita vreme trimit ceva la LCD am CS = 0, dupa ce termin de trimis il pun pe 1. asm{ // trimit primul bit BCLR PORTF,#1 // CS = 0 BCLR PORTG,#6 BCLR PORTG,#8 BSET PORTG,#6 // de doua ori BSET PORTG,#6 // pt reglaj intarzaiere, altfel nu ia bitul de comanda/data cel putin pt dspic BCLR PORTG,#6}// trimit restul 8 cu hardware spiSPIEN_SPI2STAT_bit = 1;SPI2_Write(cmd);SPIEN_SPI2STAT_bit = 0;asm{BSET PORTF,#1} // CS = 1//in forma de fata am reusit sa controlez lcd-ul cu spi la 12mhz In acea poza eu vad ca sunt trimise doua chestii , si de aceea iti apare CS = 1. Link spre comentariu
Romica_t Postat Mai 24, 2012 Autor Partajează Postat Mai 24, 2012 Am trecut acum la varianta Philips a ecranului deoarece am gasit o aplicatie completa scrisa In MPLAB C18. Initial s-a folosit 18f2620 iar eu am un 18f2550. Am inlocuit #include si #include din inceputul fiecraui fisier cu #include iar acum imi da eroarea "Error - processor types do not agree across all input files.". Ce e acel header file 18cxxx.h?Mai sunt si alte locuri in care ar trebui sa modific tipul de procesor folosit? Link spre comentariu
Romica_t Postat Mai 25, 2012 Autor Partajează Postat Mai 25, 2012 It's aliiiiiiive! Am pus ecranul invers in soclu de la inceput si de aceea nu a mers mai repede. 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