uživatelské znaky na LCD (HD44780) pomocí PIC

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Johny_Servis

uživatelské znaky na LCD (HD44780) pomocí PIC

#1 Příspěvek od Johny_Servis »

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
Uživatelský avatar
Mendor
Příspěvky: 223
Registrován: 16 dub 2008, 00:00
Bydliště: Kladno

#2 Příspěvek od Mendor »

Můžeš si vytvořit až 8 uživatelských znaků, které na začátku programu nahraješ do LCD.
Znak pak zobrazíš standardním příkazem s hodnotou 0 – 7.
Johny_Servis

#3 Příspěvek od Johny_Servis »

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?
Johny_servis

#4 Příspěvek od Johny_servis »

a ještě otázečka trochu mimo

když připojím k PICu externí napěťovou referenci s hodnotou napětí 2,500V, tak změna o jeden bit např. z 00000010 na 00000011 proběhne až při zvýšení měřeného napětí o 2,500V?
tj. ta velikost 2,500V mi bude udávat nejmenší rozlišitelnost?
Uživatelský avatar
Mendor
Příspěvky: 223
Registrován: 16 dub 2008, 00:00
Bydliště: Kladno

#5 Příspěvek od Mendor »

Pokud nastavíš referenční napětí na 2.5V, tak v rozsahu na vstupu AD 0 – 2.5V bude v registrech ADRESH a ADRESL hodnota 0 – 1023.

Na ten zápis do LCD se ještě kouknu a napíšu ...
Uživatelský avatar
Mendor
Příspěvky: 223
Registrován: 16 dub 2008, 00:00
Bydliště: Kladno

#6 Příspěvek od Mendor »

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ů
Johny_Servis

#7 Příspěvek od Johny_Servis »

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?
Milops3

#8 Příspěvek od 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
Uživatelský avatar
Mendor
Příspěvky: 223
Registrován: 16 dub 2008, 00:00
Bydliště: Kladno

#9 Příspěvek od Mendor »

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

#10 Příspěvek od Návštěvník »

SUPER! už mi to chodí :-)

DůLEŽITÝ POSTŘEH:
!!! Data vlastních znaků nahráváme ještě PŘED inicializací LCD!!!
Uživatelský avatar
Mendor
Příspěvky: 223
Registrován: 16 dub 2008, 00:00
Bydliště: Kladno

#11 Příspěvek od Mendor »

Klidně je můžeš nahrát až po inicializaci.
A co ten volmetr.
Johny_Servis

#12 Příspěvek od Johny_Servis »

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.
Uživatelský avatar
Mendor
Příspěvky: 223
Registrován: 16 dub 2008, 00:00
Bydliště: Kladno

#13 Příspěvek od Mendor »

Tak dávej průběžné informace o programování voltmetru, to mě zajímá.
Návštěvník

#14 Příspěvek od 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

#15 Příspěvek od Návštěvník »

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???
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“