uživatelské znaky na LCD (HD44780) pomocí PIC
Moderátor: Moderátoři
-
Johny_Servis
uživatelské znaky na LCD (HD44780) pomocí PIC
Jak to v assembleru udělat, aby mi PIC zobrazil na LCD moje znaky "ě" a "í"? nejlepší by bylo, kdyby mi sem někdo přímo vložil fragment nějakého programu - jak se znaky tvoří to vím...
Znak1: retlw b'00001010'
retlw b'00100100'
retlw b'01001110'
retlw b'01110001'
retlw b'10011111'
retlw b'10110000'
retlw b'11001110'
retlw b'11100000'
tohle je např. "ě" ale co teď dál?
díky
-
Johny_Servis
2.Odešlu bajt 0001xxxx(set CGRAM adres), kde XXXX je 0 až 8
3. přepnu RS=1(data), vyšlu 1.bajt svého znaku a pak E=1, E=0(jako bych prostě zapisoval cokoliv jiného)
4. odešlu všechny další bajty svého znaku (dalších 7)
5. potom zase přepnu do režimu instrukcí RS=1
6. Zvýším adresu CGRAM o jedničku
7. přepnu zpět na data RS=1
8. odešlu všechny bajty 2. znaku
9. atd... až 8 mých znaků, které pak budu mít pod adresami 0 až 8 v paměti znaků
je to tak?
-
Johny_servis
1.takže musím byt v režimu RS=0(instrukce displeje) a RW=0(zápis)
2.Odešlu bajt 01000000 (64)
3. přepnu RS=1(data), vyšlu 1.bajt svého znaku a pak E=1, E=0(jako bych prostě zapisoval cokoliv jiného)
4. odešlu všechny další bajty všech 8 znaků.
9. 8 mých znaků, které pak budu mít pod adresami 0 až 7 v paměti znaků
-
Johny_Servis
Já právě myslel že "natvrdo" zadám adresu CGRAM pro 1. znak, nahrnu data znaku, pak adresu 2. znaku, nahrnu data znaku...
P.S.
1. Jinak já Bussy Flag nečtu - mám dostatečně dlouhá zpoždění (i když je mi jasné, že se nejedná o optimální řešení)
2. Mám vyrobit 3 rozsahový stejnosměrný voltmetr
- 1. rozsah 0 až 2,5V
- 2. rozsah 2,5 až 25V
- 3. rozsah 25 až 250V
rozsahy budou přepínány analogovým switchem - budou zde zařazeny pro vyšší rozsahy předřadné odpory - nevíte náhodou JAKÝ PROUD TEČE DO A/D převodníku? PIC16C8xx abych mohl zvolit nějaké odpory?
-
Milops3
Johny_Servis píše:nejlepší by bylo, kdyby mi sem někdo přímo vložil fragment nějakého programu - jak se znaky tvoří to vím...
tady mas test LCD , sou tam cesky znaky,bohuzel mi nejde puvodni zdroj DOVEDA , tak si to s toho vytahni ,
- Přílohy
-
- test_lcd_ORIGINAL.asm
- (13.02 KiB) Staženo 169 x
Kód: Vybrat vše
tomu nerozumím bajt 01000000 (64) je "čtení adresy CGRAM či DDRAM a čtení příznaku Bussy Flag (třetí bit zprava) To sis trochu poplet, 64 - 0x40 je nastavení adresy CGRAM.
Co se týče AD převodu, vstupní dělič napětí by neměl přesáhnout 10k
-
Návštěvník
-
Johny_Servis
Po zapnutí se ihned přepne na nejvyšší rozsah (25 - 250), pokud bude výsledek převodu 0 (tzn. 25V nebo míň) přepne se na rozsah (2,5 - 25) pokud bude opět výsledek převodu 0 (2,5V nebo míň) přepne se na nejmenší rozsah (0 - 2,5) a zkusí znova provést převod.
Výsledek se bude zobrazovat na LCD displeji ve tvaru "napětí:xxx,xxV"
tzn. do procesoru se nikdy nedostane napětí vyšší než 2,5V=> pro nejvyšší rozsah musím tedy napětí snížit na předřadném odporu 100x, pro střední rozsah 10x, na nejnižším rozsahu nebude žádný předřadný odpor.
Přepínání je pomocí analogového switche 4066 (ten má také nějaký vnitřní odpor v řádu desítek ohm), proto bych nejraděj ještě znal hodnotu vtékajícího proudu co nejpřesněj.
Převod se nebude spouštět přerušením, ale bude probíhat v nekonečné smyčce, řekněme že tak 2x za vteřinu.
-
Návštěvník
Johny_Servis píše:Po zapnutí se ihned přepne na nejvyšší rozsah (25 - 250), pokud bude výsledek převodu 0 (tzn. 25V nebo míň) přepne se na rozsah (2,5 - 25) pokud bude opět výsledek převodu 0 (2,5V nebo míň) přepne se na nejmenší rozsah (0 - 2,5) a zkusí znova provést převod.
A jakým způsobem, posuneš ten rozsah, aby začínal na 25V a končil na 250V (2,5 - 25V), když převodník měří od nuly?
-
Návštěvník
ostatní: co se stane když v assembleru napíšu ať se do střadače (8bitového) uloží konstanta 12288 a ta ať se pak přičte k 16-bitovému registru?
Jde mě o to, jestli si ten procesor "pamatuje" že je to 12288 a skutečně to uloží do onoho 16bit. registru, nebo prostě jen přičte 255 (max. hodnota střadače) s tím že má ale příznak Carry nastaven na 1???