Ahoj,
snazim se rozchodit 4 bitovou komunikaci s LCD. Mam displej MC1601A RED NEGATIVhttp://www.gme.cz/alfanumericke-maticove-lcd-displeje-s-radicem-monochr/mc1601a-red-negativ-p513-142/ ale googlil som ako čert a nakoniec som zistil že S6A0069 nebo ST7066 neni kompatibilny s radicom HD44780 což je obrovska smola lebo je nadherne podvieteny a chcel by som sa s nim hrat a experimentovat. Neviete niekto kde by sa dala naist knižnica pre tento druh LCD? Použivam mikrokontroler Atmega8 a pomali sa učim C. Dakujem za každu pozitivnu radu. P.S. už som našiel vela rad že indiciluj si LCD sám.. Neuspešne.. jednoducho neumim to...
Fórum › Mikrokontroléry
LCD S6A0069 atmega8
vypada to velice podobne... ma to akorat vyrazne delsi cas cekani po nabehnuti displaye (original ma 15ms ale tendle ma cekat aspon 30ms po prekonani 4.5v)
takze prvni zkontrolovat casovani, pak jestli nemas spatne kontrast...
mimochodem mam uz od roku 2008 dvouradkovou verzi tohodle displaye a jediny co sem tusim resil bylo prave casovani
KIIV : Dekuju za odpoved Takže kedže som pisal že som totalne amater . Takže stači nejak len poupravyt knižnicu? mam stahlu knižnicu z :http://svetelektro.com/…ast-459.html
je tam nejake že lcd.c a lcd.h... no s kontrastem problem nebude ked sem ho skusil s tymato knižnicama tak tam nejake štvorečky a čarečky začali nabehovat takže v kontraste chybu nevidim...no ja mam tiež 2x16... Dekuju za troška presnejši popis kde to najdem
ctverecky na prvni radce znamenaji spatnej init
ctverecky na obou spatnej kontrast
a v kodu to bude prekvapive v lcd_init() (radky 488 a pro jistotu i 494 dat aspon na dvojnasobek)
jo a hlavne jeste zkontroluj jestli mas F_CPU nastaveno na spravnou frekvenci...
jo čtvorečky byly jen na prvnim... takže kontrastem to nebude... už sem neco take našel bylo to nastavene na 16000 ms tak sem to zmenil na 30000 ms vyskušam to ešte zapojit a či to bude fungovat ... no a ja jako #define F_CPU 1000000UL davam toto takže dufam že to je spravne...
F_CPU ma odpovidat frekvenci, na ktere pobezi ten jednocip...
tj pokud pouzivas vnitrnich 8MHz a zadny deleni kmitoctu tak to ma byt 8000000UL ... ten milion je 1MHz takze zalezi na tom, co mas nastaveny v pojistkach... defaultne je tusim zrovna ten 8MHz vnitrni oscilator akorat vydelenej 8 takze 1MHz
no ja sa v tem totalne nevyznam... som totalny amater... a prave som skusil zapojit ten display s S6A0069 a po zapnuty je cez prvy riadok vodorovna čiara tvorena jednym pixelom cez cely displej takže takže neviem čim to je ... a ked som zapojil s HD44780 tak sa vysvietil cely riadok takže totalne nemam šajnu dke je chyba...
tak to holt neni projekt pro tebe .. ja ti samozrejme cim to je takhle na dalku nereknu .. moznosti je par... bud uz je to usmazeny, nepostupujes podle navodu, spatny nastaveni rychlosti a tim uplne spatny casovani (hlavne nizsi F_CPU oproti realu), spatny zapojeni, etc...
no praveže ja postupujem presne podla navodu na : http://svetelektro.com/…ast-459.html
no a oni tam F_CPU nemaju takže neviem kde je chyba... ja už som jeden navod na to mal ale neviem kde som to dal tam mi všetko fungovalo s HD44780 ale našiel som tento navod po našom tak som sa snažil rozchodit S6A0069 ale ako vidim tak to asi nebude fungovat...
Pozor u ST7066, je nutné dodržet časování signálu E: v klidu je v L, nastavíš signál RS a data, pak E impulz do H a návrat do L jak je to v datasheetu. Pokud u instrukcí netestuješ příznak, musíš ponechat dost času, Clear a Return Home jsou výrazně časově náročnější. Jestli jsi to ještě nerozchodil, včera jsem to samé dodělal na ATMEGA 8A.
hu
protože jsem také měl problém s tímto LCD, řešení je v kontrole připojení LCD, na pinech displeje 15-16 je podsvětlení LCD, a ty jsou před pinem 1, pokud to zapojujete přímo. To znamená, že napájení podsvětlení displeje je prakticky pin 1 a to dělá neplechu. LCD je prakticky zničený, nebere LCD velký proud? Mělo by být do 150mA Zkontrolujte pořadí pinů LCD, kam jde napájení
když se v pondělí připomeneš, tak ti pošlu vyzkoušený kód na LCD 1 řádek 16 znaků.
hu
žádné knihovny není potřaba, stačí posílat pár byte ve správném pořadí se správným načasováním. Můžu to sem dát až zítra.
hu
/*
zapojeni LCD:
PC0 RS - register select
PC1 E - enable
PC2 DB4
PC3 DB5
PC4 DB6
PC5 DB7
DB0 - DB3 jsou na GND
*/
//LCD macros
#define RS PORTC0
#define E PORTC1
#define INSTR 0
#define DATA 1
void ByteToLCD(char* Byte, int rs) //rs ma funkci register select, makra INSTR a DATA
{
//nejdrive hight polovina byte, pak low
static char hPul, lPul;
static int i;
hPul = (*Byte & 0xf0) >> 2; //umisti high pol. byte na pozici sbernice na portu PC (PC5 - PC2)
lPul = (*Byte & 0x0f) << 2; //umisti low pol. byte na pozici sbernice na portu PC (PC5 - PC2)
if (rs) //vlozi RS do bitu PC0 portu PC
{
hPul |= (1<<E) | (1<<RS);
lPul |= (1<<E) | (1<<RS);
}
else
{
hPul |= (1<<E);
lPul |= (1<<E);
}
PORTC = hPul & (~(1<<E));
PORTC = hPul;
PORTC = hPul & (~(1<<E));
PORTC = lPul & (~(1<<E));
PORTC = lPul;
PORTC = lPul & (~(1<<E));
for (i=0; i < 12; i++) //ceka asi 45 usec
{
}
}
void initLCD ()
{
#define FSET (0x03 << 2) //Function Set 0011 se umisti na PC na D7 - D4
#define FUNSET 0x28
#define LCDOFF 0x08
#define LCDON 0x0C
#define CLEAR 0x01
#define ENTRY 0x06
uint16_t i;
PORTC = FSET;
for (i=0; i < 5000; i++); //cekat >15msec
PORTC = FSET | (1<<E);
PORTC = FSET;
for (i=0; i < 1500; i++); //cekat >4.1msec
PORTC = FSET | (1<<E);
PORTC = FSET;
for (i=0; i < 30; i++); //ceka asi 120 usec
PORTC = FSET | (1<<E);
PORTC = FSET;
for (i=0; i < 30; i++); //ceka asi 120 usec
PORTC = ((FUNSET >> 4) << 2);
PORTC = ((FUNSET >> 4) << 2) | (1<<E);
PORTC = ((FUNSET >> 4) << 2);
for (i=0; i < 30; i++); //ceka asi 120 usec
char povel = FUNSET;
ByteToLCD(&povel, INSTR); //nastavi pocet radku a font
povel = LCDOFF;
ByteToLCD(&povel, INSTR); //vypne LCD
povel = CLEAR;
ByteToLCD(&povel, INSTR); //vymaze LCD
for (i=0; i < 700; i++); //cekat >1.5msec
povel = ENTRY;
ByteToLCD(&povel, INSTR); //Entry Mode Set
povel = LCDON;
ByteToLCD(&povel, INSTR); //zapne LCD
}
void WriteLine(char* text)
{
static int i;
static char povel, end;
povel = 0x80; //nastavi na zacatek radku
ByteToLCD(&povel, INSTR);
end = 0;
for (i = 0; text[i] != 0; i++)
{
if (i == 8) //devaty znak LCD ma DDRAM adresu 40
{
povel = 0xC0;
ByteToLCD(&povel, INSTR);
}
if (text[i] == 0)
{
end = ' ';
}
if (end)
{
ByteToLCD(&end, DATA);
}
else
{
ByteToLCD(&text[i], DATA);
}
}
}
int main(void)
{
DDRB = 0x97; //nastaveni portu
PORTB = 0xff;
DDRC = 0x3f;
PORTC = 0xff;
DDRD = 0xe6;
PORTD = 0x1b;
initLCD();
//zde by mel byt LCD aktivni
WriteLine("ahoj");
return 0;
}
Taktování 1MHz vnitřní RC oscilátor.
DB0 - DB7, E, RS jsou vstupy LCD. Vše je připojeno k portu C.
hu
#19 hlucheucho
Zdravim, chcem sa spytať na display WH1602A,
http://www.gme.cz/…et-p513-221/
či mi bude fungovať tento zdrojový kód keď ho napálim do Atmegy16
Vďaka.
Funguje s WH1601A - YGH-ET# . Ten se také nastavuje jako dvouřádkový.
hu
za predpokladu že: #define FUNSET 0x28 výchadza pri druhá časť inštrukcie 4 bitovej komunikácii: D7 - D4 [1 0 0 0] opravte ma ak sa mylim. Datasheet čaká tvar D7 - D4 [0 0 N F]
N : Display line number control bit
When N = "Low", it means 1-line display mode.
When N = "High", 2-line display mode is set.
F : Display font type control bit
When F = "Low", it means 5 x 8 dots format display mode
When F = "High", 5 x11 dots format display mode.
potom mám 2 otázky: či treba do D7 0, prečo vlastne tam je jednotka,
a či pre dvojriadkový displej treba D7 - D4 [0 0 1 0]
Vďaka.
Nedalo mi to a pozrel som datasheet pre WH1601A - YGH-ET#
http://www.transistor.ru/…-YGH-CTK.pdf od firmy Winstar Display
hovorí že, displej má radič HD 44870
a pre Function set druhá časť inštrukcie 4 bitovej komunikácii čaká tvar D7 - D4 [N F * *]
datasheet na stránke gme.sk http://www.gme.cz/…13-214.1.pdf hovorí, že displej má radič ST 7066 a ten pre Function set druhá časť inštrukcie 4 bitovej komunikácii čaká tvar D7 - D4 [0 0 N F]
datasheet radiča: http://www.sparkfun.com/datasheets/LCD/st7066.pdf
kde je pravda?
Bylo to programovaný podle datasheetu ze stránek GME. Funguje to už několik měsíců bez problémů. Možná se mýlím, ale ty řadiče se liší jen časováním, jinak bylo vše stejné. S HD 44870 jsem neměl co do činění už několik let.
hu
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
ATMEGA8 + řízení LCD MC1602E, 4-bitová komunikace — založil Nemo
Lcd — založil lukes
LCD + AVR — založil Systém
LCD, materiály — založil d.mostek
Moderátoři diskuze