Displej MC1602E-SYL/H, ATMEGA8, fleuryho knihovna

Zdravím Vás,
mám dotaz ohledně rozchození displeje. Stáhl jsem si knihovnu z homepage.hispeed.ch/peterfleury/ … .html#libs tak jako jsem našel podle jednoho příspěvku zde ve foru. Jedná se o dvouřádkový displej po 16 znakách, zkouším 4bitovou komunikaci. Bohužel, když projdu inicializací a zkusím zobrazit text, tak se mi na displeji objeví pouze první řádek a všechny znaky řádku jsou černé, jako kdybych poslal na první řádek 16 obdélníků.

Nesetkal jste se, prosím, někdo s tímto?
S MCU jsem začátečník a bohužel nevím, co vlastně mám ověřit.

Děkuji za jakýkoliv nápad.
Radek

Znamená to, že displej je funkční ale neinicializovaný. Nefunguje komunikace nebo není v .h souboru/nastavení projektu nastavená správná rekvence procesoru.

Zapojení a kód?

Bodol by kod a použité knižnice. Ale môže byť aj to, že je prebudený jas na displeji.

Díky za reakce!
Je otázka, zda je chyba v programu nebo v zapojení. Jediné, kde asi tuším, že bych mohl mít botu v zapojení je kontrast na pinu V0. Mám ho zapojený tak, že mi jde drát k odporu 47Ω a ten odpor mám pak zapojen na zem. Když pak v programu dám výpis na displej, tak po tomto příkazu se zobrazí právě těch 16 obdélníků. Když odpor nezapojím k zemi, ale na +5V, tak se mi na displeji nezobrazí vůbec nic a tváří se stále mrtvý (displej pouze svítí). Pokud dám jiné odpory (1KΩ, 10KΩ…) tak se pouze displej ztmavuje, ale na funkci to nemá vliv.

Možná mě ještě napadá jedna zvláštnost. Flueryho knihovna pro 4-bitovou komunikaci používá označení pro datové piny DATA0…DATA3, přitom displej pro 4-bit používá DATA4…DATA7. Nejsem ovšem z toho schopen nic vyvodit (je to problém nebo není?). Já to mám zapojené na displeji na DATA4…DATA7.

Program: na začátku si nastavím PINY na portu B a část portu D jako výstupní. Provedu init LCD a pak jen ve smyčce blikám LEDkou a snažím se zobrazovat text.

Potom v souboru fluery_lib/lcd.h provádím nastavení. Abyste to nemuseli složitě hledat, tak vše, co jsem nastavil je označeno v komentářích značkou *EDIT

V příloze je celý projekt v AVR Studiu 5, MCU je ATMEGA8A-PU taktovaný na 8MHz interně. Hlavní soubor pro “spuštění” je Display.c. Soubor setup.h je pouze nastavení frekvence atmegy F_CPU na 8MHz.

Podotázka: na pinech, když dám stav logické jedničky (PORTB |= 0b00000001;), tak na výstupu naměřím jen 2,8V. Nejsem zkušený, takže nevím, zda to není nějak málo. Stačí to?

Děkuju všem moc za ochotu, ještě že existuje toto forum, už se s tím mořím přes týden.
Displej.zip (32.3 KB)

Ještě dodám zapojení displeje.
0 -> GND
1 -> +5V
2 -> 47 Ohmů -> GND
14 -> 1,5K Ohmů -> +5
15 -> GND

Datové, včetně RS, RW a Enable jsem zkontroloval tisíckrát, jsou správně. Snad ještě kdyby byly nějak zablokované PINy portu B, ale to je asi blbost.

Přímo tento typ procesoru neznám, ale jak znám procesory,
tak se ti tam cpe nějaký signál a to pravděpodobně XCK.
Bohužel ti momentálně neporadím jak jej vypnout.
Možná jiné chytré hlavy zde.

Skús preveriť napätie na vstupe LCD s označením V0 (kontrast) u teba vstup 2 kde máš 47Ohm rezistor. Malo by tam byť cca 0,8V. Alebo tam zapoj potenciometer (môžeš aj podľa toho doveda.byl.cz/lcd/index.htm alebo dhservis.cz/lcd_soubory/moje.html) a skus ním nastaviť kontrast displeja.

Díky za nápad, hned jak u toho budu, tak napětí prověřím!
Včera v noci jsem ještě zkoušel připojit právě ten trimr (měl max 33K Ohmů) a otáčet s ním u kontrastu. Když jsem ho dal téměř na max, tak se na displeji objevilo v prvním řádku opět 16 obdélníků. Když jsem s ním otáčel na druhou stranu, tak se zmenšoval jas obdélníků, ale zobrazení textu jsem nedospěl. Pak jsem zkoušel zároveň s tím měnit i jas, ale žádný výsledek. Našel jsem pak doma ještě jeden displej, který byl kompatibilní, zapojil jsem je paralelně a na obou byl výsledek stejný, takže displej vadný určitě není.

Někde na diskuzi jsem ještě našel tip, kde borec zkoušel tento displej a musel prodlužovat timeouty. I to jsem zkoušel, zkoušel jsem je zdvojnásobit, zkoušel jsem i prodloužit počáteční timeout při zapnutí atmegy, než se začne posílat inicializace (téměř na dvě sekundy), ale nic.

Ohledně nápadu Divouse - je tedy normální, aby při log 1 na výstupu bylo jen kolem 2,8V? Myslel jsem, že by výstup měl být taky kolem 5V. Zdroj jsem měřil a ten dával cca 4,7V a 200mA, takže by atmelu nemělo nic chybět.

Ahoj.
Zkusím to dneska zapojít a podívám se na to. Odpor pouzivam 1k.
Spis bych rekl, ze tam bude nejaky problem ze je to pripojene na piny 4 a 5 programatoru. Mas tam odpory? Zkousel si odpojit programator? Jaky mas programator?
Tuhle knihovnu pouzivam casto, dokonce jsem ji pouzil pro tento display, akorat jsem ho mel kompletne na portu D anebo na D A C. na B jsem ho nezkousel.

Právě že ne. Správně by tam mělo být (skoro) plné napětí.
To snížení může nastat pokud tam máš z toho pinu zvýšený odběr
nebo pokud ten pin generuje nějaký průběh.
V podstatě XCK generuje časový kmitočet pro synchronní UART,
takže by voltmetr naměřil efektivní hodnotu tohoto časového průběhu (cca 2,5V).
Nevím však (nedíval jsem se ti na zdroják) zda ti tam procesor negeneruje nějaký signál úmyslně.
To si vyhodnoť sám.

S touhle knihovnou jsem také zkoušel rozchodit LCD(WC1602A), ale fungovalo to nějak podivně. Tak jsem si napsal vlastní. Zkus tohle, pro ATmegu8 jsem to zkusil jen v simulaci, ale mám postavený teploměr s DS18B20, AT90S2313 a LCD(WC1602A) a funguje to se stejnou knihovnou.
Test LCD.zip (52.9 KB)

Ahoj. Tak jsem to zapojil podle toho jak jsi to nadefinoval ty.
Data se posilaji pres PORTB piny 4,5,6,7 a ostatni je zapojeno na PORTD piny 5,6,7.
Display je zapojeny tak, ze podsviceni je napajene primo 5V a V0 je spojeno k zemi pres 1k odpor.
Piny pro Data0-3 “visi” ve vzduchu.
Co bych tak asi k tomu rek. Trosku me prekvapilo ze z prava do leva jsou ty piny 14,13 az 1 a za nima je 15 a 16.
Nastaveni uC jsem nastavil na 1MHz, pokud potrebujes zmenit, staci zmenit v programu a ve fuses.
Tak to zkus a dej vedet.
LCD_Test.zip (43.9 KB)

Děkuju, vyzkouším! Já jsem teď zkoušel ještě dát vše na C a nepomohlo… Hned vyzkouším, díky.

DragonSoul, dračí duše, díky! :slight_smile:
Já se musím všem omluvit, co ztratili se mnou čas - jak právě DragonSoul poznamenal - ten PIN 1 na displeji není ten krajní, ale až vlastně 3. zprava. :blush: Jak jsem psal, jsem amatér a vůbec jsem si toho nevšiml, navíc jsem se nechal zmást návodama, kde to mají zapojovaný hned z kraje. V programu chyba nebyla. Všem se znovu omlouvám a DragonSoulovi obrovské díky za přímé vyzkoušení.

Radek