It is currently Mon Sep 06, 2010 12:01 pm




Post new topic Reply to topic  [ 5 posts ] 
Winstar wh1602a-ngg-cp to ATmega8 PortC ? 
Author Message

Joined: Wed Mar 10, 2010 4:09 pm
Posts: 2
Post Winstar wh1602a-ngg-cp to ATmega8 PortC ?
Please help me...
:|

I'm use Winstar WH1602a-NGG-CP LCD display.

electrical diagramm here:
http://www.pocketmagic.net/wp-content/u ... t-full.gif
Image

connect to ATmega8 to PORTC.

I'm dont undestand :( LCD dosn't work...

My prog here:
-------------------------------

/*****************************************************
CodeWizardAVR V1.25.9

Project : lcd-2
Version : 1
Date : 10.02.2010
Author : alex
Company : SVR
Comments:

Chip type : ATmega8
Program type : Application
Clock frequency : 16,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega8.h>

// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>

// ==============================================
// Declare your global variables here

char i;
unsigned char pc;

void init_mylcd(void)
{
PORTC.4=0; // ïîäíèìàåì RS â 0
pc=0x03; // init !
// pc|=0b00100000; // ïîäíèìàåì Å â 1
pc&=0b00001111; // ãàñèì ñòàðø.áèòû

PORTC=pc; // âûâîäèì äàííûå èç ðñ
PORTC.5=1; // Å â 1
delay_ms(1); // delay = 1 milisecond
PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
delay_ms(5);

PORTC.4=0; // ïîäíèìàåì RS â 0
pc=0x03; // init !
// pc|=0b00100000; // ïîäíèìàåì Å â 1
pc&=0b00001111; // ãàñèì ñòàðø.áèòû
PORTC=pc; // âûâîäèì äàííûå èç ðñ
PORTC.5=1; // Å â 1
delay_ms(1);
PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
delay_ms(5);

delay_ms(100);

PORTC.4=0; // ïîäíèìàåì RS â 0
pc=0x03; // init !
// pc|=0b00100000; // ïîäíèìàåì Å â 1
pc&=0b00001111; // ãàñèì ñòàðø.áèòû
PORTC=pc; // âûâîäèì äàííûå èç ðñ
PORTC.5=1; // Å â 1
delay_ms(1);
PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
delay_ms(5);

PORTC.4=0; // ïîäíèìàåì RS â 0
pc=0x02; // init !
// pc|=0b00100000; // ïîäíèìàåì Å â 1
pc&=0b00001111; // ãàñèì ñòàðø.áèòû
PORTC=pc; // âûâîäèì äàííûå èç ðñ
PORTC.5=1; // Å â 1
delay_ms(1);
PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
delay_ms(5);

PORTC.4=0; // ïîäíèìàåì RS â 0
pc=0x02; // init !
// pc|=0b00100000; // ïîäíèìàåì Å â 1
pc&=0b00001111; // ãàñèì ñòàðø.áèòû
PORTC=pc; // âûâîäèì äàííûå èç ðñ
PORTC.5=1; // Å â 1
delay_ms(1);
PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
delay_ms(5);

PORTC.4=0; // ïîäíèìàåì RS â 0
pc=0x0C; // init N+F
// pc|=0b00100000; // ïîäíèìàåì Å â 1
pc&=0b00001111; // ãàñèì ñòàðø.áèòû
PORTC=pc; // âûâîäèì äàííûå èç ðñ
PORTC.5=1; // Å â 1
delay_ms(1);
PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
delay_ms(5);

PORTC.4=0; // ïîäíèìàåì RS â 0
pc=0x00; // init !
// pc|=0b00100000; // ïîäíèìàåì Å â 1
pc&=0b00001111; // ãàñèì ñòàðø.áèòû
PORTC=pc; // âûâîäèì äàííûå èç ðñ
PORTC.5=1; // Å â 1
delay_ms(1);
PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
delay_ms(5);

PORTC.4=0; // ïîäíèìàåì RS â 0
pc=0x08; // init !
// pc|=0b00100000; // ïîäíèìàåì Å â 1
pc&=0b00001111; // ãàñèì ñòàðø.áèòû
PORTC=pc; // âûâîäèì äàííûå èç ðñ
PORTC.5=1; // Å â 1
delay_ms(1);
PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
delay_ms(5);

PORTC.4=0; // ïîäíèìàåì RS â 0
pc=0x00; // init !
// pc|=0b00100000; // ïîäíèìàåì Å â 1
pc&=0b00001111; // ãàñèì ñòàðø.áèòû
PORTC=pc; // âûâîäèì äàííûå èç ðñ
PORTC.5=1; // Å â 1
delay_ms(1);
PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
delay_ms(5);

PORTC.4=0; // ïîäíèìàåì RS â 0
pc=0x01; // init !
// pc|=0b00100000; // ïîäíèìàåì Å â 1
pc&=0b00001111; // ãàñèì ñòàðø.áèòû
PORTC=pc; // âûâîäèì äàííûå èç ðñ
PORTC.5=1; // Å â 1
delay_ms(1);
PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
delay_ms(5);

PORTC.4=0; // ïîäíèìàåì RS â 0
pc=0x00; // init !
// pc|=0b00100000; // ïîäíèìàåì Å â 1
pc&=0b00001111; // ãàñèì ñòàðø.áèòû
PORTC=pc; // âûâîäèì äàííûå èç ðñ
PORTC.5=1; // Å â 1
delay_ms(1);
PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
delay_ms(5);

PORTC.4=0; // ïîäíèìàåì RS â 0
pc=0x07; // init ID+S
// pc|=0b00100000; // ïîäíèìàåì Å â 1
pc&=0b00001111; // ãàñèì ñòàðø.áèòû
PORTC=pc; // âûâîäèì äàííûå èç ðñ
PORTC.5=1; // Å â 1
delay_ms(1);
PORTC.5=0; // ãàñèì Å â 0 - ò.å. äàåì ñòðîá.
delay_ms(5);
PORTC.4=1; // ïîäíèìàåì RS â 1
delay_ms(220);
}

void WriteIns(unsigned char instruction)
{
unsigned char tmp;

PORTC.4=0; // ïîäíèìàåì RS â 0
tmp=instruction>>4;
// tmp|=0b00100000; // ïîäíèìàåì Å â 1
tmp&=0b00001111; // ãàñèì ñòàðø.áèòû
PORTC=tmp; // âûâîäèì äàííûå
PORTC.5=1; // ïîäíèìàåì Å â 1
delay_ms(1);
PORTC.5=0; // ïîäíèìàåì Å â 0

// instruction|=0b00100000; // ïîäíèìàåì Å â 1
instruction&=0b00001111; // ãàñèì ñòàðø.áèòû
PORTC.4=0; // ïîäíèìàåì RS â 0
PORTC=instruction; // âûâîäèì äàííûå
PORTC.5=1; // ïîäíèìàåì Å â 1
delay_ms(1);
PORTC.5=0; // ïîäíèìàåì Å â 0
delay_ms(100);
}

void WriteData(unsigned char data1)
{
unsigned char tmp1;

PORTC.4=1; // ïîäíèìàåì RS â 1

tmp1=data1>>4;
// tmp1|=0b00110000; // ïîäíèìàåì Å è RS â 1
tmp1&=0b00011111; // ãàñèì ñòàðø.áèòû
PORTC=tmp1; // âûâîäèì äàííûå
PORTC.5=1; // ïîäíèìàåì Å â 1
delay_ms(1);
PORTC.5=0; // ïîäíèìàåì Å â 0

// data1|=0b00110000; // ïîäíèìàåì Å è RS â 1
data1&=0b00011111; // ãàñèì ñòàðø.áèòû
PORTC.4=1; // ïîäíèìàåì RS â 1
PORTC=data1; // âûâîäèì äàííûå
PORTC.5=1; // ïîäíèìàåì Å â 1
delay_ms(1);
PORTC.5=0; // ïîäíèìàåì Å â 0
delay_ms(100);
}


void main(void)
{
PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x7F;

PORTD=0x00;
DDRD=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
{
delay_ms(500);
init_mylcd();
// ---------------------

i=0;
pc=0;

for (i=0; i<20; i++)
{
WriteIns(0x00); // Óñòàíîâèëè êóð â 1 ïîç ïåð ñòðîê
WriteData(0x44); // âûâåëè "D"
WriteIns(0x01); // âòîð ïîçèöèÿ ïåð ñòîðîêè
WriteData(0x49); // âûâåëè "I"
WriteIns(0x02); // òðåòüÿ ïîçèöèÿ ïåð ñòîðîêè
WriteData(0x47); // âûâåëè "G"
WriteIns(0x03); // ÷åòâåðòàÿ ïîçèöèÿ ïåð ñòîðîêè
WriteData(0x49); // âûâåëè "I"
WriteIns(0x04); // ïÿòàÿ ïîçèöèÿ ïåð ñòîðîêè
WriteData(0x54); // âûâåëè "T"

delay_ms(500);

}
delay_ms(1000);
};
}

-------------------------------

LCD do not show me any data :(
please help...


Wed Mar 10, 2010 4:23 pm
Profile

Joined: Wed Dec 16, 2009 2:44 pm
Posts: 32
Post Re: Winstar wh1602a-ngg-cp to ATmega8 PortC ?
Dear Sir:
The circuit is fine.
If you just need to write into the module.
R/W pin connected to GND is ok.

Please check the voltage between VDD (pin2) & VEE (pin3) should be 3.8~4.5V.
The display will be seen.

And please check our reference code for this module in attach file.


Fri Mar 12, 2010 3:57 pm
Profile

Joined: Wed Dec 16, 2009 2:44 pm
Posts: 32
Post Re: Winstar wh1602a-ngg-cp to ATmega8 PortC ?
Attahc file.


Attachments:
KS0066_4BIT.zip [1.52 KiB]
Downloaded 58 times
Fri Mar 12, 2010 3:58 pm
Profile

Joined: Wed Mar 10, 2010 4:09 pm
Posts: 2
Post Re: Winstar wh1602a-ngg-cp to ATmega8 PortC ?
I'm solve this problem.
See my working code:

Code:
    void LcdWriteNibble (unsigned char a)
    {
    E=0;
    delay_us(2);
    LcdPort&=0xf0;       // ñáðàñûâàåì â "0" ìëàäøèå 4 áèòà ïîðòà
    LcdPort|=(a&0x0f);   // ìëàäøèå 4 áèòà ïåðåìåííîé "à" ïèøåì â ìëàäøèå áèòû ïîðòà
    delay_us(2);
    E=1;
    delay_us(2);
    E=0;
    delay_us(2);
    }                         
    //**************************************************
    void WaitBusy (void)
    {
    delay_us(150);
    }                   
    //**************************************************
    void LcdWriteCommand (unsigned char a)
    {
    E=0;
    RS=0;         
    LcdWriteNibble(a>>4);
    LcdWriteNibble(a);
    WaitBusy();
    }
    //**************************************************
    // Êîìåíòû çàòåðëèñü, íå ïîìíþ ÷òî òàêîå "à" (ëåíü ÷èòàòü ÄØ)
    // Íî äëÿ ñâîåãî 16õ2 "à"=16

    void lcd_init (void)
    {
   E=0;
   RS=0;
    delay_ms(20);
    LcdWriteNibble(0x30);
    delay_ms(7);
    LcdWriteNibble(0x30);
    delay_us(100);
    LcdWriteNibble(0x30); 
    WaitBusy();
    LcdWriteNibble(0x20);
    WaitBusy();                 
    LcdWriteCommand(0x28);
    LcdWriteCommand(0x08);
    LcdWriteCommand(0x01);
    delay_ms(20);
    LcdWriteCommand(0x06);
    LcdWriteCommand(0x0c);
    delay_ms(20);
    }

    //**************************************************
    void LcdWriteData (unsigned char a)
    {
    E=0;
    RS=1;
    LcdWriteNibble(a>>4);
    LcdWriteNibble(a);
    WaitBusy();
    }                   

    void lcd_putchar (unsigned char a)
    {
    E=0;
    RS=1;
    LcdWriteNibble(a>>4);
    LcdWriteNibble(a);
    WaitBusy();
    }                       
    //**************************************************

    void LcdSetPosition(unsigned char adr)
    {
    LcdWriteCommand(adr|0x80);
    }

    void lcd_gotoxy (char x,char y)
    {
    if(y == 0) LcdSetPosition(x);
    else LcdSetPosition(x + 0x40);
    }
    //**************************************************

    void LcdClrScr()
    {
    LcdWriteCommand(0x01);
    delay_ms(20);
    }

    void lcd_clear(void)
    {
    LcdWriteCommand(0x01);
    delay_ms(20);
    }   
    //**************************************************
    void LcdSetCGAdress(unsigned char adr)
    {
    LcdWriteCommand((adr&0x7f)|0x40);
    }   
    //**************************************************
    void lcd_write_byte(unsigned char addr, unsigned char data)
    {
    LcdWriteCommand(addr);
    LcdWriteData(data);
    }
     

    void lcd_puts(char *str)
    {
    char k;
    while ((k=*str++) != 0) lcd_putchar(k);
    }


//    void lcd_putsf(char flash *str)
    void lcd_putsf(char *str)
    {
    char k;
    while ((k=*str++) != 0) lcd_putchar(k);
    }



Fri Mar 12, 2010 4:01 pm
Profile

Joined: Wed Dec 16, 2009 2:44 pm
Posts: 32
Post Re: Winstar wh1602a-ngg-cp to ATmega8 PortC ?
That's good.


Tue Mar 16, 2010 8:23 am
Profile
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 5 posts ] 


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB © phpBB Group.
Designed by Vjacheslav Trushkin for Free Forums/DivisionCore.