Kan inte få LCD display att fungera
Re: Kan inte få LCD display att fungera
> När jag ser det som tydligast har jag cirka 0.5 V på VO.
Ganska normalt. Är detta utan backlight tänd ?
Ganska normalt. Är detta utan backlight tänd ?
-
- Inlägg: 349
- Blev medlem: 24 oktober 2008, 19:40:50
- Ort: Lomma
Re: Kan inte få LCD display att fungera
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
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ådensodjan skrev:> 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
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.
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
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
Nej, det är inte normalt.
Är det den *enda* skillnaden i konfiguration ?
Är det den *enda* skillnaden i konfiguration ?
Re: Kan inte få LCD display att fungera
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
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.sodjan skrev:Nej, det är inte normalt.
Är det den *enda* skillnaden i konfiguration ?
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
}