Sida 3 av 3

Re: Kan inte få LCD display att fungera

Postat: 26 augusti 2010, 00:12:55
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 ?

Re: Kan inte få LCD display att fungera

Postat: 26 augusti 2010, 08:29:43
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?

Re: Kan inte få LCD display att fungera

Postat: 26 augusti 2010, 17:14:43
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

Re: Kan inte få LCD display att fungera

Postat: 26 augusti 2010, 17:29:00
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.

Re: Kan inte få LCD display att fungera

Postat: 1 september 2010, 23:16:32
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?

Re: Kan inte få LCD display att fungera

Postat: 2 september 2010, 00:26:24
av sodjan
Nej, det är inte normalt.
Är det den *enda* skillnaden i konfiguration ?

Re: Kan inte få LCD display att fungera

Postat: 2 september 2010, 00:41:00
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.

Re: Kan inte få LCD display att fungera

Postat: 2 september 2010, 15:54:54
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
}