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, 02: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, 02: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, 02: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 128 x

Uživatelský avatar
Mendor
Příspěvky: 223
Registrován: 16 dub 2008, 02: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, 02: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, 02: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ů“