Zdravim ,
resim problem s magou8 a LCD, programuju v mikro C takze pouzivam knihovny , a dorazil jsem k tomu ze bezporblemu vypisu text jako pole charu,
ale jakmile chci zobrazovat hodnoty z AD prevodniku tak to zacne hazet rozsypany caj a zacne se to chovat absolutne nesmyslne pise to paznaky blika to a podobne, zkousel jsem i vypisovat pri for cyklu promenou I kterou jsem kazdym krokem inkrementoval a ani toto nefunguje.
nemate nekdo nejaky jednoduchy priklad ktery funguje?
diky
[code]
sbit LCD_RS at PORTB.B0;
sbit LCD_EN at PORTB.B1;
sbit LCD_D4 at PORTB.B2;
sbit LCD_D5 at PORTB.B3;
sbit LCD_D6 at PORTB.B4;
sbit LCD_D7 at PORTB.B5;
sbit LCD_RS_Direction at DDRB.B0;
sbit LCD_EN_Direction at DDRB.B1;
sbit LCD_D4_Direction at DDRB.B2;
sbit LCD_D5_Direction at DDRB.B3;
sbit LCD_D6_Direction at DDRB.B4;
sbit LCD_D7_Direction at DDRB.B5;
double A = 53.062720452;
double K = -0.006147642;
double e = 2.7182818;
int vys = 0;
unsigned int pom = 0;
int i = 0;
tady je ten kod na adc prevodniku je IR senzor vzdalenosti, vysledek kodu je takovy ze se nic nezobrazi jen extreme skoro okem neroznatelne blika kurzor na prvni pozici a obcas s emihle nejaka cara i na dalsich pozicich ale cist to nejde a vypada to spis jako ze nevypise vubec nic
Myslím, že Lcd_Out zobrazuje jenom text. To znamená, že musíte načtenou hodnotu z AD převodníku převést na text - tedy posloupnost znaků a pak teprve odeslat do Lcd_Out.
pridal jsem pred smysku while vypis textu : vzdalenost, a delay 1s vysledek je ten ze vypise delay cca 1S pak kratce blikne a zse vypise ten napis a takhle porad odkola
Vyhoď to mazání LCD. Pokud chceš použít proměnnou i jako filtr zobrazení, musíš ji po vypsání na displej zase vynulovat. Jinak se 20x neprovede nic a pak se 236x po sobě provede vymazání displeje, výpis nápisu “vzdalenost”, počká se 1s (jestli je zde ten delay), vypíše se číslo z AD převodníku a po pár milisekundách se to opakuje.
Vyřaď čtení z převodníku a výpočty a tu proměnnou “vys” dej cyklicky měnit a vypisovat. Třeba od 0 do 1000 - nebo do přetečení, to je jedno. Mám tady MikroC, ale jenom v demo verzi, takže se díky float knihovně nevejdu do 2kWord, takže si to tady neodkrokuju…
To mi nějak nedává smysl. Tu definici char txt[7]; máš pořád v tý smyčce ? Jestli jo, tab bych jí zkusil přendat k definicím ostatních proměnných, ale teoreticky by to mělo být jedno.
Ještě mě napadlo dát po vypsání hosnoty 1 sek. delay a načítat vys od nuly a sledovat, za jak dlouho to rozsype ten čaj.
Druhá možnost by byla nechat program tak, jak je, ale zpomalit systémové hodiny. Teda pokud Ti neběží mcu na IntRC 1 MHz. Pokud ano, zkus v mikroC (ale ne u mcu) nastavit vyšší kmitočet hodin. Program se zkompiluje pro rychlejší hodiny, ale v mcu zůstanou stejné. Tím pádem se zpomalí časování signálů pro LCD. Pokud byl problém tam, mělo by to začít fungovat.
Tak nejdřív zkus dát 1 sek. pauzu po vypsání hodnoty. Pokud to bude dělat hlouposti po náhodném počtu čísel, dá se předpokládat, že by to mohl způsobit právě nějaké časování na hranici možností.
Pokud to bude dělat hlouposti náhodně, tak klidně ten 12 MHz krystal tam nech, ale v MikroC nastav 16 nebo 20 MHz. MikroC přepočítá časování a tudíž při reálných 12 MHz by mělo být časování pomalejší.
A ještě něco. Možná je to zbytečné, ale zkus dát taky 50-100 ms delay před LCD_Init().
tak ani po sekundach pred initem ani zmena frekvence, ale zkusil jsem si udelat parkrat zasebou vypis na display A, pak B pak zase A s delay mezi to fungovalo bezproblemu , ale jakmile jsem to hodil to nejakeho cyklu tak to zas ehazelo ten caj, kdyz udelam cykl do-while tak to ale jednou projde jakmile udelam while tak to nejede ani jednou