Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

LCD дисплей в 4 bit mode
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=11647
Страница 1 от 2

Автор:  dan [ Пет Авг 16, 2013 3:20 pm ]
Заглавие:  LCD дисплей в 4 bit mode

на няколко места гледам, че за интерфейс към LCD с 4 жици се използват D4-D7.
тук
и
тук

Като гледам чаршафа на AC-082A (наличен в комет) разбирам, че там трябва да се използват D0-D3 и то пак не ми става пълна картинката, щото при инициализацията трябва да се използват и D4 и D5?

Кое е вярното?

Автор:  ike [ Пет Авг 16, 2013 5:09 pm ]
Заглавие:  Re: LCD дисплей в 4 bit mode

D4-D7 е вярно.
Но къде в този документ AC-082A видя да споменават 4 bit mode и D0-D3? На коя страница?
Повечето такива модули по света работят в 4 bit mode.

Автор:  dan [ Пет Авг 16, 2013 7:47 pm ]
Заглавие:  Re: LCD дисплей в 4 bit mode

да бе. не знам какво се обърках. за пръв път се боря с lcd.

Автор:  Cekins [ Пет Авг 16, 2013 7:49 pm ]
Заглавие:  Re: LCD дисплей в 4 bit mode

Не му вярвай - лъже тоя документ. Аз преди време като не знаех си проектирах платката с дисплейя куплиран към нея и датата на D0-D3 познай после кво мацане падна... Помислих си че аз съм сбъркал, ама явно в документа има грешка.

Автор:  dan [ Пет Авг 16, 2013 7:59 pm ]
Заглавие:  Re: LCD дисплей в 4 bit mode

Значи свързах го както трябва(към D7-D4). Сигналите, подавани от контролера, стигат до lcd дисплея.

Изпращам инициализиращите поредици 0x33 и 0x32 с достатъчни закъснения навсякъде.

После изпращам конфигуриращи команди, така че да се появи курсор и да мига.

Дисплеят обаче нищо не показва.
ето го кода:
Код:

#include <stdio.h>
#include <stdlib.h>
#include <p30F4011.h>

#define En LATDbits.LATD0
#define RW LATDbits.LATD1
#define RS LATFbits.LATF6
#define DB7 LATCbits.LATC13
#define DB6 LATCbits.LATC15
#define DB5 LATEbits.LATE8
#define DB4 LATCbits.LATC14

void delays_ms(unsigned int ms);
void config_lcd();
void send_lcd_word(unsigned char word);
void init_lcd();
void send_lcd_command(unsigned char command);
void send_lcd_data(unsigned char data);

#pragma config FOS = FRC,FPR = ERCIO, WDT = WDT_OFF, MCLRE = MCLR_EN, ICS = ICS_PGD, FPWRT = PWRT_64, BOREN = PBOR_ON, BODENV = BORV45

send_lcd_word(unsigned char word)
{
         union{
                unsigned char duma;
                struct{
                            unsigned b0:1;
                            unsigned b1:1;
                            unsigned b2:1;
                            unsigned b3:1;
                            unsigned b4:1;
                            unsigned b5:1;
                            unsigned b6:1;
                            unsigned b7:1;
                         }bits;
            } usend;

            usend.duma = word;

            RW = 0;

            DB7 = usend.bits.b7;
            DB6 = usend.bits.b6;
            DB5 = usend.bits.b5;
            DB4 = usend.bits.b4;

            En = 1;
            delays_ms(10);
            En = 0;
            delays_ms(10);

            DB7 = usend.bits.b3;
            DB6 = usend.bits.b2;
            DB5 = usend.bits.b1;
            DB4 = usend.bits.b0;

            En = 1;
            delays_ms(10);
            En = 0;
            delays_ms(10);

}

send_lcd_command(unsigned char command)
{
    RS = 0;//send command
    delays_ms(1);
    send_lcd_word(command);
}


send_lcd_data(unsigned char data)
{
    RS = 1;//send data
    delays_ms(1);
    send_lcd_word(data);

}




void init_lcd()
{
    TRISDbits.TRISD0 = 0;
    TRISDbits.TRISD1 = 0;
    TRISFbits.TRISF6 = 0;
    TRISCbits.TRISC13 = 0;
    TRISCbits.TRISC14 = 0;
    TRISCbits.TRISC15 = 0;
    TRISEbits.TRISE8 = 0;

    delays_ms(50);
   
    send_lcd_command(0x33);
    delays_ms(10);

    send_lcd_command(0x32);
    delays_ms(10);


}
void config_lcd()
{
    delays_ms(50);

    send_lcd_command(0b00101000);
    delays_ms(10);

    send_lcd_command(0b00001000);
    delays_ms(10);

    send_lcd_command(0b00000001);
    delays_ms(1);

    send_lcd_command(0b00000110);
    delays_ms(1);

    send_lcd_command(0b00001111);
    delays_ms(1);

}



int main(int argc, char** argv) {

    init_lcd();
    config_lcd();



    while(1);;

    return (EXIT_SUCCESS);
}



edit: махнах няколко стари коментара

Автор:  Cekins [ Пет Авг 16, 2013 8:19 pm ]
Заглавие:  Re: LCD дисплей в 4 bit mode

Разгледай в атачнатия пдф. Тук е доста по подробно обяснено и има дадена 4 битова инициализация (стр. 209) - всъщност ти май я правиш грешно, защото освен че се пращат 3 групи по 4 бита ами и не са тези дето пращаш.

Прикачени файлове:
HD44780.PDF [390 KiB]
190 пъти

Автор:  dan [ Пет Авг 16, 2013 11:37 pm ]
Заглавие:  Re: LCD дисплей в 4 bit mode

Ей, Cekins, с това документче много помогна.

То се наложи да сложа и потенциометър за контраста де, че с делителя, дето го бях запоил нищо не се виждаше :)

Автор:  ike [ Съб Авг 17, 2013 10:02 am ]
Заглавие:  Re: LCD дисплей в 4 bit mode

Резистор от 2К на мен ми върши идеална работа, но зависи от захранващото напрежение и самия дисплей. 5волтовите, като ги пускам на 3.6В направо им замасявам контраст пина и доста прилично се вижда.

Автор:  dan [ Нед Авг 18, 2013 5:24 pm ]
Заглавие:  Re: LCD дисплей в 4 bit mode

тук при замасен контраст пин всичко става черно.

Автор:  ike [ Нед Авг 18, 2013 7:07 pm ]
Заглавие:  Re: LCD дисплей в 4 bit mode

При 3.6В захраващо напрежение ли?

Автор:  dan [ Пон Авг 19, 2013 8:55 am ]
Заглавие:  Re: LCD дисплей в 4 bit mode

ike написа:
При 3.6В захраващо напрежение ли?

не, при 5V

Автор:  Ки4о [ Пон Авг 19, 2013 9:01 am ]
Заглавие:  Re: LCD дисплей в 4 bit mode

При мен на 3.3V I/O и при 5V захранване слагам потенциометър за регулировка на контраста и LCD-то си работи и се вижда нормално и нямам никакви проблеми. Я постни схемата как го свързваш да не гадаем.

Автор:  dan [ Пон Авг 19, 2013 11:57 am ]
Заглавие:  Re: LCD дисплей в 4 bit mode

Ки4о написа:
При мен на 3.3V I/O и при 5V захранване слагам потенциометър за регулировка на контраста и LCD-то си работи и се вижда нормално и нямам никакви проблеми. Я постни схемата как го свързваш да не гадаем.


Ааа, аз още в събота пуснах дисплея. В действителност се използват D7-D4.

Автор:  ДедоБоре [ Пон Авг 19, 2013 12:11 pm ]
Заглавие:  Re: LCD дисплей в 4 bit mode

заблуждаващото е, че в 4-битов режим, D4..7 стават D0..3
що така са го направили навремето хапонците, никой не знае, но всички след тях го наследяват за съвместимост.
другото, което на времето установихме е, че времената при инициализация са критични и далеч от тези в чаршафа. доста по-големи.
и варират от контролер до контролер, така че е хубаво да се заложи на по-големи времена с цел универсалност

Автор:  Cekins [ Пон Авг 19, 2013 1:11 pm ]
Заглавие:  Re: LCD дисплей в 4 bit mode

Дедо - попадал съм на дисплеи дето времената им коренно се различават по времена на инициализация - така че времната могат да се гледат от даташита на конкретния дисплей. Иначе за инициализационните команди всичките са съвместими (говоря които са принципно като HD44780). Доста отдавна правих нещо с два дисплея и ги бях вързал и двата на обща дата шина и отделни служебни. Опитах отначало с обща инициализация ама ядец - единия работи с малки времена (с големи не отлепя), другия обратно.

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/