Sida 1 av 1

LCD Display (KS0066) med PIC16F877A, problem.

Postat: 21 april 2007, 11:48:48
av MH100
Hej!

Har lite trubbel att få igång en LCD-display (2x16, KS0066) tillsammans med en PIC16F877A. Jag får inte en livstecken ur displayen överhuvudtaget, den är helt blank.

Koppling LCD:
Pin 1, VSS: Sitter på GND.
Pin 2, VDD: Sitter på +5V.
Pin 3, VO: Sitter på +5V, har dock labbat med att köra på lägre spänningar, +5v är angiven som typ-spänning.
Pin 4, RS: Sitter på PORTB.5.
Pin 5, R/W: Sitter på PORTB.6.
Pin 6, E: Sitter på PORTB.7.
Pin 7-14, Data: Sitter på PORTD.

Har gjort ett program som först ska skicka Diplay ON kommando därefter ett System set kommand och därefter skriva ett tecken "0" till diplayen.
Jag har kontrollet att PIC:ens utgångar beter sig enligt programmet, har mätt på lödpadsen på displayen för varje pinne, och allt stämmer enligt programmet. Så det förefaller mig som allt är rätt kopplat.

Så jag gissar att det är nåt fel i programmet, eller att displayen helt enkelt är trasig.

Som sagt, displayen förblir helt blank, inget händer. Hoppas någon kan hjälpa mig lite! Tack!


Kod: Markera allt

#pragma chip PIC16F877A
#pragma config |= 0x3ff2


#pragma bit LCD_E @ PORTB.7    // Enable pin
#pragma bit LCD_RW @ PORTB.6   // R/W pin
#pragma bit LCD_RS @ PORTB.5   // RS pin
#pragma char LCD_data @ PORTD  // DB7-DB0 data pins


void init(void);
void delay(char);
void LCD_enable(void);
void LCD_test(void);


void main(void)
{
	init();
	delay(0xFF);  // Diplay wake up delay
	LCD_test();
}


void init(void)
{
	TRISB = 0b0000.0000;  //  Outputs
	TRISD = 0b0000.0000;  //  Outputs
	LCD_E = 0;			  //  Enable = 0;
}


void delay(char ms) // Delay routine
{
    OPTION = 0b0000.0010;
    do {
        TMR0 = 0;
        while (TMR0 < 125);
    } while (--ms > 0);
}


void LCD_enable(void) // Toggle Enable
{
	char i;
	LCD_E = 1;
	delay(1);
	LCD_E = 0;
	delay(1);
}


void LCD_test(void)
{
	LCD_RW = 0; // Write
	LCD_RS = 0; // RS, Instruction register.

	LCD_data = 0b0000.1111; // Display on, Cursor on, Blinking on.
	LCD_enable();

	delay(5); // Wait a while

	LCD_data = 0b0011.1000; // System set. 8-bits, 2-line, 5x8 dits.
	LCD_enable();

	delay(5); // Wait a while

	LCD_RS = 1;  // RS, Data register.
	LCD_data = 0b0011.0000; // Skriv tecken "0"
	LCD_enable();
}

Postat: 21 april 2007, 12:00:41
av MicaelKarlsson
Har du dubbelkollat så att stegen i initieringen kommer i rätt ordning.

I initieringen för min ks0066 display kommer de i följande ordning:
1. 2-line mode, display on
2. display on, cursor on, blink on
3. display clear
4. Entry mode set

Postat: 21 april 2007, 12:15:57
av BEEP
Släng dit en potentiometer och justera kontrasten.

Ladda ner lcd1.pdf och lcd2.pdf som finns på denna sida.
http://www.epemag.wimborne.co.uk/resources.htm

Postat: 21 april 2007, 19:44:34
av MH100
Tja!

Fick det att funka nu!
Tack för hjälpen hörrni!

Postat: 21 april 2007, 23:50:11
av Zyxel615
Du får väldigt gärna tala om vad du gjorde för att få det att fungera. Det kan ju hjälpa någon annan.

Postat: 21 april 2007, 23:50:55
av sodjan
> Pin 3, VO: Sitter på +5V, har dock labbat med att köra på lägre spänningar,
> +5v är angiven som typ-spänning.

*Väldigt* osannolikt !!
Kan du ge en referens till var det är angivet ?
Normalt står det att man ska använda en pot, eller i *nödfall*
koppla kontrastpinnen till GND (0V).

Postat: 24 april 2007, 15:42:41
av MH100
Äh det var kontrastpinnen som spökade med mig,
Jag skyller på allmän förvirring och ett datablad som måste vart skrivet av en kinesisk barnarbetare på droger. Databladet för översållat med fel och utlämnad information, var typ omöjligt att begripa sig på, och jag lyckades iaf missuppfatta det hela lite. Någonting om en pot på VO pinnen stod det iaf inte ett knyst om. Laddade hem ett annat datablad och då klarnade det genast.