forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
Výběr LCD 128x64
Jdi na stránku Předchozí  1, 2
 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Elektronika s mikrokontroléry, procesory
 
MiloPS3
Profesionál
Profesionál


Založen: 24.12.2008
Příspěvky: 887
Bydliště: LAZNE KYNZVART

PříspěvekZaslal: 19 březen 2015, 19:44    Předmět: Citovat

a ten test dopad jak ?
ty pulldowny nech bejt poznas pozdejc..

_________________
PIC,ASM / C , Mplab + CCS C Compiler
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
Balů
Profesionál
Profesionál


Založen: 29.10.2012
Příspěvky: 718

PříspěvekZaslal: 19 březen 2015, 23:06    Předmět: Citovat

Ahoj. Tak bohužel, s touhle "knihovnou" na 8-bitovou komunikaci zapomeň. Upřímně řečeno, takhle napsaný kód bych se styděl dát do vlastního domácího rychloprojektu, natož, abych ho dal k dispozici na net ...

V *.h mají být prototypy funkcí, vlastní kód se píše do *.c souborů. Tohle je prasárna a ne knihovna.

V každém případě : Klidně nech datový port LCD s procesorem propojený celý (všech 8 bitů) a na začátku programu na celý port pošli 0. Knihovna na portu pro LCD hýbe jenom bitama 4-7, takže nevadí, že má bity 0-3 připojené. Každopádně "knihovna" není ani napsaná správně podle datasheetu :
kód:
void Lcd_Init()
{
  Lcd_Port(0x00);
   __delay_ms(20);      // Nehýbalo se řídícími signály, tak proč tady ten delay ???
  Lcd_Cmd(0x03);        // Nastavení na 8 bitů
   __delay_ms(5);        // Stačí 2 ms, ale proč ne ...
  Lcd_Cmd(0x03);        // Nastavení na 8 bitů
   __delay_ms(11);        // Nechápu, proč je tady 11 ms
  Lcd_Cmd(0x03);        // Nastavení na 8 bitů
                                   // tady už delay chybí (min. 1,53 ms)
  /////////////////////////////////////////////////////
  Lcd_Cmd(0x02);        // Nastavení na 4 bity
                                   // tady opět delay chybí (min. 1,53 ms)

// Dál už běží komunikace po 4 bitech
  Lcd_Cmd(0x02);        // Nastavení na 4 bity, 2 řádky, Font 5x7
  Lcd_Cmd(0x08);        // Nastavení na 4 bity, 2 řádky, Font 5x7
                                   // tady opět delay chybí (min. 1,53 ms)

  Lcd_Cmd(0x00);        // Display ON, Cursor OFF, Blinkání kurzoru OFF
  Lcd_Cmd(0x0C);        // Display ON, Cursor OFF, Blinkání kurzoru OFF
                                   // tady opět delay chybí (min. 39 us)

  Lcd_Cmd(0x00);        // Kurzor se bude posouvat doprava, Obraz se posouvat nebude
  Lcd_Cmd(0x06);        // Kurzor se bude posouvat doprava, Obraz se posouvat nebude
                                   // tady opět delay chybí (min. 39 us)
}


Po každém zápisu do RAM displeje (a je jedno, jestli je to do RAMky znakové nebo generátoru znaků) je třeba počkat 43 us. Mezi jednotlivými polovinami bytu není potřeba čekat.
kód:
void Lcd_Write_Char(char a)
{
   char temp,y;
   temp = a&0x0F;
   y = a&0xF0;
   RS = 1;             // => RS = 1
   Lcd_Port(y>>4);             //Data transfer
   EN = 1;
   __delay_us(40);          // Tady stačí 1-2 us
   EN = 0;
   Lcd_Port(temp);
   EN = 1;
   __delay_us(40);          // Tady stačí 1-2 us
   EN = 0;
// tady delay chybí (min. 43 us)
}


A jsou tam další chyby, ale až to upravíš alespoň podle mých poznámek, mohlo by to již fungovat. Pokud tomu, kdo knihovnu psal, displej fungoval, pak měl buď obrovskou kliku nebo pekelně rychlý displej. Bral jsem časy z datasheetu od 16x2 znaků LCD od Display Electronic GmbH. Jiné displeje budou mít časy jiné. Měl jsem tady displeje rychlejší, ale i pomalejší. Ve svojí knihovně mám tedy časy delší, aby pokud možno pokryly maximum displejů. Jakmile narazím na LCD, který to nestíhá, tak časy zase podloužím, ale dával jsem trochu rezervu (místo 43 us jsem dával 60 us apod.), takže by snad měly stíhat všechny displeje.

Kdyby sis vzal k ruce datasheet, tak by sis program pro ovládání napsal sám a možná i líp, než tenhle paskvil, a ještě by ses něco přiučil.

A ještě k té inicializaci. To přepnutí do 8-bitového režimu je tam sice 3x (na první pohled zbytečně), ale je k tomu dobrý důvod. Nechci to tu znova rozepisovat, ale když použiješ vyhledávání, určitě to tady na serveru najdeš, už jsem to tu vysvětloval.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Matyáš
Profesionál
Profesionál


Založen: 2.4.2014
Příspěvky: 49

PříspěvekZaslal: 21 březen 2015, 8:13    Předmět: Citovat

Prozatím Vám děkuji, budu hledat další návody.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Elektronika s mikrokontroléry, procesory Časy uváděny v GMT + 2 hodiny
Jdi na stránku Předchozí  1, 2
 
Strana 2 z 2
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)