Sari la conținut
ELFORUM - Forumul electronistilor

Ecran LCD color Nokia 6100


Romica_t

Postări Recomandate

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. :jytuiyu

Link spre comentariu
  • Răspunsuri 12
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Romica_t

    6

  • nooob64

    3

  • Liviu M

    2

  • godFather89

    2

Top autori în acest subiect

Imagini postate

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

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?

post-7097-139829439061_thumb.jpg

Link spre comentariu

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

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

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

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?

post-7097-139829439147_thumb.jpg

Link spre comentariu

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

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

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

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