Kan inte få LCD display att fungera

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kan inte få LCD display att fungera

Inlägg av sodjan »

> När jag ser det som tydligast har jag cirka 0.5 V på VO.

Ganska normalt. Är detta utan backlight tänd ?
sugarman64
Inlägg: 349
Blev medlem: 24 oktober 2008, 19:40:50
Ort: Lomma

Re: Kan inte få LCD display att fungera

Inlägg av sugarman64 »

Hittar inte att du skriver någonstans om backlighten är på eller inte. Kan det vara så att den krävs för att få "kräm" i det som visas på displayen?
jfri
Inlägg: 180
Blev medlem: 1 februari 2010, 21:41:20

Re: Kan inte få LCD display att fungera

Inlägg av jfri »

sodjan skrev:> När jag ser det som tydligast har jag cirka 0.5 V på VO.

Ganska normalt. Är detta utan backlight tänd ?
Ja utan backlight som inte var inkopplad då jag uppfattade den som optional belysning som inte är nödvändig. Då jag kopplade på backlight så syntes tecknen mer normalt. Så backlight verkar vara nödvändig för att få den att fungera. Jag tycker dock att displayen ser något blek ut jämfört med produktbilden i länken jag gav i början av tråden
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kan inte få LCD display att fungera

Inlägg av sodjan »

En LCD utan B/L är oftast "reflective" för att ge OK kontrast som den är.

En LCD med B/L är oftast "transflektiv" och ger dålig kontrast med B/L släkt.
Det är inte meningen att man ska köra den utan B/L.

Och när det gäller just den aktuella modellen (med "lysande" tecken) så är den
sannolikt helt beroende av en tänd B/L för att visa (i princip) någonting alls !

Slutligen så vet vi inte heller om produktbilden har "förbättrats" med bildeditering (d.v.s
att texten har "målats i"). Även om det inte är så, så har de naturligtsvis sett till att
det blir så bra som möjligt.
jfri
Inlägg: 180
Blev medlem: 1 februari 2010, 21:41:20

Re: Kan inte få LCD display att fungera

Inlägg av jfri »

Jag har upptäckt att det som gör att tecknen ser lite svaga ut är att jag konfigurerar displayen för två raders mod. Använder jag istället 1-line display mod blir de ljusstarka och som i produktbilden och som jag förväntade mig. Frågan är det normalt att tecknen i en två raders LCD display blir svagare när man konfigurerar för användning av båda raderna?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kan inte få LCD display att fungera

Inlägg av sodjan »

Nej, det är inte normalt.
Är det den *enda* skillnaden i konfiguration ?
Användarvisningsbild
Glenn
Inlägg: 36732
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: Kan inte få LCD display att fungera

Inlägg av Glenn »

Det är inte så att du skriver till displayen i en loop eller nåt nu ? skriver man för fort till den så kan resultatet bli att det ser svagt ut.
jfri
Inlägg: 180
Blev medlem: 1 februari 2010, 21:41:20

Re: Kan inte få LCD display att fungera

Inlägg av jfri »

sodjan skrev:Nej, det är inte normalt.
Är det den *enda* skillnaden i konfiguration ?
Ja i nedanstående program får jag ljussvaga tecken. Om jag bara ändrar c[3] i LCDinit() från 0x38 till 0x30 så har jag ljusstarka tecken. Denna ändring innebär att LCDn konfigureras för en rad istället för två rader.

Kod: Markera allt

#include <htc.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <stdarg.h>
#include "usart.h"

#define	_XTAL_FREQ	4000000L

#define	TRUE	1
#define	FALSE	0

#define	RS		RC2	//H/L Register select signal
#define	RW 	RB6	//H/L Read Write signal LCD
#define  E	 	RB4	//H/L Enable signal LCD
#define	MR	RC7	//Master reset 74HC595 (active low)
#define	SH_CP	RC6	//Shift register clock input 74HC595
#define	ST_CP	RC3	//Storage register clock input
#define	OE		RC4	//Output enable (active low) 74HC595
#define	DS		RC5	//Serial data input 74HC595

__CONFIG(INTIO & WDTDIS & PWRTDIS & BORDIS & UNPROTECT);

void init(void)
{
// port directions: 1=input, 0=output
TRISA = 	0b11111111;
TRISB =	0b10000000;
TRISC = 	0b00000001;
PORTB =	0b11110000;
PORTC =	0b11111111;
OPTION = 	0b10000000;
ANSEL=	0b00111111;
ANSELH=   0b11110000;
ADCON0  =0b10000001;				//result right adj ADC on (CH=0)
ADCON1 = 0b00010000;				//fosc/8 X101XXXX
init_comms();
}

void	Reset74HC595()
{
	OE = 0;
	MR = 0;			//Reset 74HC595
	__delay_us(10);
	MR = 1;
}

void	Load_shiftreg(char	data)					//Mata ut data till DB0-DB7 på LCD mha 74HC595
{
	int	i;

	for (i=0;i<8;i++)
		{
		if (data & 0b10000000)
			DS = 1;
		else
			DS = 0;
		data<<=1;
		SH_CP = 0;
		__delay_us(10);
		SH_CP = 1;
		ST_CP = 0;	
		__delay_us(10);
		ST_CP = 1;
		}
	ST_CP = 0;	
	__delay_us(10);
	ST_CP = 1;
}

void	LCDinit()
{
	char c[7] = {0x30, 0x30, 0x30, 0x38, 0x0C, 0x01, 0x06};  //Bytes from http://www.elektronikforumet.com/wiki/index.php?title=HD44780
	int	key;
	int	i;

	E = 0;
	RS=0;
	RW=0;
	__delay_ms(150);
	
	for (i=0;i<7;i++)	//När loopen kommer till 3 (dvs 0x38)  blir tecknen svagare
		{
		Load_shiftreg(c[i]);
		__delay_ms(150);
		E=1;
		__delay_us(2);
		E=0;
		__delay_ms(5);		
		}
}

void	LCD_print()
{
	RS=1;
	E = 0;
	RW = 0;
	__delay_ms(15);
	E = 1;
	__delay_us(2);
	E = 0;
	__delay_us(43);
}

void	LCD_printtext(char	*str,int	no_char)
{
	int	i;

	for (i=0;i<no_char;i++)
		{
		Load_shiftreg(*str++);
		LCD_print();
		}
}

void	LCD_function()
{
	char	c=0b00111000;

	Load_shiftreg(c);
	E = 0;
	RS=0;
	RW=0;
	__delay_ms(15);
	E=1;
	__delay_us(2);
	E=0;
	__delay_us(10);
}

void	LCD_returnhome()
{
	RS= 0;

	Load_shiftreg(0b00000010);

	E=1;
	__delay_us(2);
	E=0;
	__delay_ms(2);
}

void	LCD_setpos(char address)
{
	RS=0;

	Load_shiftreg(address);

	E=1;
	__delay_us(2);
	E=0;
	__delay_ms(2);
}
		
void main(void)
{
	int	key;

	init();												//Initiera PIC
	Reset74HC595();									//Reset 74HC595 IC som matar LCD med databytes
	__delay_ms(190);									//Fördröjning efter poweron
	LCDinit();											//Initiera LCD
	
	LCD_printtext("Hej Hej Varlden.",16);
	
	LCD_setpos(0b11000000);							//Sätt position till första kolumn andra rad
	LCD_printtext("Hello The World?",15);

	do {} while ( (key=getche())!='\r');						//Vänta tills retur trycks på PC tangentbord
}	
Skriv svar