uživatelské znaky na LCD (HD44780) pomocí PIC
Moderátor: Moderátoři
uživatelské znaky na LCD (HD44780) pomocí PIC
Zdravím všechny
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
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
1.takže musím byt v režimu RS=0(instrukce displeje) a RW=0(zápis)
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?
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?
Upraveno:
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ů
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ů
tomu nerozumím bajt 01000000 (64) je "ètení adresy CGRAM èi DDRAM a ètení pøíznaku Bussy Flag (tøetí bit zprava) - to musím naèíst?
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?
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?
tady mas test LCD , sou tam cesky znaky,bohuzel mi nejde puvodni zdroj DOVEDA , tak si to s toho vytahni ,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...
- Přílohy
-
- test_lcd_ORIGINAL.asm
- (13.02 KiB) Staženo 128 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)
Co se týče AD převodu, vstupní dělič napětí by neměl přesáhnout 10k
Takže voltmetr bude jak sem psal výše - teï ho jdu programovat - pøesnost bude bohatì staèit na 2 desetinná místa tzn. 0,00V + bude vybaven automatickým pøepínáním rozsahù
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.
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.
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?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.
anonym: teprve budu øešit
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???
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???