inicializace displeje LCD

Zdeněk lada zdenek023ster na gmail.com
Čtvrtek Květen 27 17:58:03 CEST 2010


Dobrý den,

Takže děkuji všem za rady, zvláště uživateli s přezdívkou petop. Nyní již
oba řádky fungují v obou konfiguracích pokaždé.
Nižší kontrast byl kvůli napájení, při připojení programátoru bylo pouze
4,588V, při napájení z adaptéru(na desce je stabilizátor 5V) 4,883V.
Při inicializaci podle katalogového listu
http://www.allshore.com/pdf/Samsung_KS0066_(s6a0069).pdf (str. 28)
mi oba řádky dnes naopak fungovali při napájení z adaptéru. Po přidání dvou
inicializací na 8-bitovou komunikaci jedou oba řádky spolehlivě. Přidávám
současný kód.

děkuji a s přátelským pozdravem,

Zdeněk


Pro funkci main

#define F_CPU   16000000L


#include <avr/io.h>
#include <util/delay.h>
#include "bitove_operace.h"
#include "dlouhe_zpozdeni.h"
#include "LCD_ATmega-S6A0069.h"

int main(void)
 {

    DDRB=0xff;
    DDRE=0xff;
    DDRC=0xff;
    DDRA=0xff;


    PORTB=0x00;
    PORTE=0x00;
    PORTC=0x00;
    PORTA=0x00;

   dlouhe_zpozdeni(200);
   Inicializace_LCD(1);

   Posli_retezec("krasna 1",1,0);
   Posli_retezec("krasna 2",2,0);

   nastaveni_cestiny();
   Posli_retezec("Krásná čeština",1,0);

 }


a pro knihovnu LCD inicializaci

void Inicializace_LCD(unsigned char podsviceni)
{

unsigned char zaloha_DDR,zaloha_PORT;


    if (podsviceni)
     sbi(PORTA,7);
    else
     cbi(PORTA,7);

    zaloha_DDR=DDR_LCD;            // zálohování obsahu registru DDR
    zaloha_PORT=PORT_LCD;            // zálohování obsahu registru PORT

    outp(0x00, PORT_LCD);                // výstup do log "0"
    outp(0xff, DDR_LCD);                // konfigurace portu jako výstupního

    dlouhe_zpozdeni(100);                // cekame 100ms na nabeh napajeciho
napeti

    sbi(DDR_LCD,RS_PIN);
    cbi(PORT_LCD,RS_PIN);

    sbi(DDR_LCD,RW_PIN);
    cbi(PORT_LCD,RW_PIN);

    _delay_ms(1);

// rezim 8 bitu

    Posli_nibble(0x03);
    _delay_ms(1);

    dlouhe_zpozdeni(200);

// rezim 8 bitu

    Posli_nibble(0x03);
    _delay_ms(1);

    dlouhe_zpozdeni(200);

// rezim 4 bitu

    Posli_nibble(0x02);
    _delay_ms(1);

    Posli_prikaz(0x28);                // dva řádky
    _delay_ms(2);
    Posli_prikaz(0x01);                //smaž displej
    _delay_ms(2);
    Posli_prikaz(0x0c);                //zapni displej
    _delay_ms(2);
    Posli_prikaz(0x06);                //režim inkrementace
    _delay_ms(2);



    DDR_LCD=zaloha_DDR;                                        // obnovení
obsahu registru DDR
    PORT_LCD=zaloha_PORT;                                        // obnovení
obsahu registru PORT

}




2010/5/26 petop <petop na stonline.sk>

>  Zdravím, priatelia.
> Stretol som sa s tím.
> Skúste tento postup:
>         rcall    wait200
>         rcall    LCD_init
>         rcall    wait200
>         rcall    prenos_lcd_1 ...až teraz zadávate data na LCD...
> Je potrebné urobiť poriadne čakanie na BUSY signál, nepomáha nechať po
> commande len napr. 15ms.
> A taktiež mám vyhodené 3x inicializovanie 8 bit komunikácie a nasledne
> prepnutie na 4 bit.
> asi takto:
> LCD_init:    rcall    wait15
>         cbi    LCDport_b,lcdrs    ;daj RS do 0
>         ldi    temp,kom_8b
>         rcall    zapis_nBF    ;zapis instrukciu be cakania na BF
>         rcall    wait15
>         ldi    temp,kom_4b
>         rcall    zapis_BF
>         rcall    busy
>
> ;nastavenie rezimu modulu 2riadky, znak 5 x 7
>                ldi     temp,(kom_4b | rez_2r | fon_5x7) ; | je za OR
>                rcall   zapis_4BF
>             rcall    busy
> ...atd.
>
> Ak budete mať zaujem pošlem trošku viac kódu...
>
> Petop
>
>
> Zdeněk lada wrote:
>
> Zdravím konferenci,
>
> dnes jsem několik hodin zápasil s displejem z GME 1602B V2.0. odkaz viz
> zde:
>
> http://www.gme.cz/cz/mc1602e-syl-h-p513-109.html,
>
> ale zadní strana vypadá jinak, fotka je poněkud neaktuální. Problém je v
> tom že pokud naprogramuji ATmega128 s připojeným programátorem, fungují oba
> řádky displeje.
> V okamžiku kdy odpojím programátor a vypnu a zapnu napájení se rozsvítí jen
> jeden řádek, navíc s větším kontrastem než v případě kdy fungují oba řádky.
> V některých případech se mi zobrazili jakési nesmysli, jako znaky & a
> podobně.
>
> S displejem komunikuji pomocí 4 vodičů.
>
> Setkal se tím někdo a nevíte kde by mohla být chyba? V inicializaci
> displeje, nebo v pomalém nabíhání napájecího napětí, po případně úplně někde
> jinde? Zkoušel jsem dát prodlevy v sekvenci 5x delší, ale nepomohlo mi to...
>
> s pozdravem,
>
> Zdeněk
>
>
> ------------------------------
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.czHw-list na list.hw.czhttp://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20100527/1d74eff0/attachment.htm>


More information about the Hw-list mailing list