Sari la conținut
ELFORUM - Forumul electronistilor

interfete si comunicatii


laStudiu

Postări Recomandate

  • Răspunsuri 98
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • laStudiu

    52

  • Abram Burel

    10

  • lucicop

    7

  • Cristiano

    5

Top autori în acest subiect

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

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

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);#endif
Am 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

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

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

#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

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

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

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

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

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

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

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