Řízení LCD 40x4

jova
Příspěvky: 328
Registrován: 16 pro 2013, 11:40

Re: Řízení LCD 40x4

Příspěvek od jova » 21 led 2020, 23:28

Nemáte někdo chuť a čas mi s tím poradit?
Nějak se v tom plácám a pořád nic :cry:

Pirx
Příspěvky: 152
Registrován: 24 úno 2013, 16:29
Kontaktovat uživatele:

Re: Řízení LCD 40x4

Příspěvek od Pirx » 22 led 2020, 00:50

Bohuzel neporadim - basic jsem videl naposledy v 80. letech minuleho stoleti...
Neni vylouceno, ze jsi narazil na limit pouzite platformy.
Co takhle se posunout dal?
Alespon na to pitome Arduino?

Priznam se, ze jsem se nenamahal cist cele vlakno, tak snad nebudu uplne mimo, ale rozdelil bych problem na dve casti:
1. Komunikace s displejem
2. Prijem dat

1. Zkusil bych v nekonecne smycce mazat a plnit cely displej nejakymi znaky - spadne / nespadne?
Pokud nespadne, mam pomerne znacnou jistotu, ze mi chodi zobrazeni a muzu prejit k bodu 2.

2. Napisu do vysilace program, ktery mi bude posilat kratky retezec znaku a ten budu zobrazovat - spadne / nespadne?
Pokud nespadne, zacnu prodluzovat retezec az na plny displej.

Chyba by se mela nekdy behem popsaneho procesu objevit.
Pokud se neobjevi, zahodit predchozi kod a je vyhrano...
Solder fumes makes you stronger!

jova
Příspěvky: 328
Registrován: 16 pro 2013, 11:40

Re: Řízení LCD 40x4

Příspěvek od jova » 22 led 2020, 01:00

Já ten basic v tomhle zapojení běžně používám na LCD 4x20 znaků. Tady je problém, že je těch znaků 2x tolik a LCD má kvůli tomu dva řadiče. A právě ty dva řadiče se mi nedaří těmi příkazy přepínat a data na ně odesílat.

Uživatelský avatar
jrt
Příspěvky: 1523
Registrován: 17 úno 2013, 17:13

Re: Řízení LCD 40x4

Příspěvek od jrt » 22 led 2020, 11:07

A zkoušel jsi si pohrát s časovými konstantami řídících příkazů displeje? Občas to bývá dost kritické.
jrt
jederobot.cz, hobbyrobot.cz, profirobot.cz
edurobot.cz, robodoupe.cz

Pirx
Příspěvky: 152
Registrován: 24 úno 2013, 16:29
Kontaktovat uživatele:

Re: Řízení LCD 40x4

Příspěvek od Pirx » 22 led 2020, 11:10

Dival jsem se na schema na zacatku, ale nevidim tam typove oznaceni.
Da se zjitit presny typ (napr na stitku modulu) nebo mas primo datasheet?

Zkusil bych pustit funkci (knihovnu) pro rizeni 4x20 na jeden enable displeje.
Pokud to pojede, mrknul bych kam se zobrazuje ktery znak a upravil adekvatne adresovani pozic na displeji.
Muzes potom zkusit stejnou vec na druhem enable.

V kazdem pripade je potreba k tomu pristupovat jako ke dvema nezavislym displejum!
Pokud mas funkcni zobrazeni na polovicnim displeji, musi to fungovat.
Jenom si udelas prepinani, kde vyberes za ktery enable tahat. Do knihovny neni potreba sahat.
Solder fumes makes you stronger!

jova
Příspěvky: 328
Registrován: 16 pro 2013, 11:40

Re: Řízení LCD 40x4

Příspěvek od jova » 22 led 2020, 16:17

Bohužel žádné informace o těch LCD nemám. Jsou vymontované z jakýchsi zařízení a já u nich měním podsvícení a dodělávám záporné napětí pro řízení kontrastu.
Pokud jednu půlku LCD řídím samostatným programem, viz níže, vše funguje jak má. Změnou příkazu na jednotlivé enable výstupy ( pulsout horní/dolní) měním do jaké části panelu se posílají řádky. Takže inicializace i to zobrazování je samostatně funkční.
Co se mi nedaří, je sloučit vše do jednoho programu 20M2, který bude obsluhovat oba enable výstupy a provést změny na programu 8M2 tak, aby ta data posílal ve formátu, kdy ta 20M2 pozná o jakou část LCD se jedná (horní/dolní).

Program v 20M2 co mi řídí LCD:

Kód: Vybrat vše

;20M2
symbol baud = N4800_32				
symbol rx	= C.0	
symbol rs 	= C.2	  
symbol horni 	= C.1  
symbol dolni 	= C.3	 

init:
	gosub lcd_init 	
		
main:
	serin RX,baud,b1			
	if b1 < 253 then		
		pinsB = b1 		
		pulsout horni,1  ;pulsout dolni,1  
		goto main		
	else if b1 = 254 then	
		low rs 	     
		serin RX,baud,b1	
		pinsB = b1 	
		pulsout horni,1  ;pulsout dolni,1  
		high rs			
		goto main		
	end if

lcd_init:
	dirsC = %10111110	
	dirsB = %11111111	
	pause 15 		
	pinsB = %00110000 
	pulsout horni,1  
	pulsout dolni,1	
	pause 5 		
	pulsout horni,1  
	pulsout dolni,1
 	pulsout horni,1  
	pulsout dolni,1 
	setfreq m32		
	pinsB = %00111000  
	pulsout horni,1  
	pulsout dolni,1
	pinsB = %00000001	
	pulsout horni,1  
	pulsout dolni,1 	
	pause 8		
	pinsB = %00000010 
	pulsout horni,1  
	pulsout dolni,1
	pinsB = %00000110	
	pulsout horni,1  
	pulsout dolni,1	
	pause 1			
	pinsB = %00001100	
	pulsout horni,1  
	pulsout dolni,1
	high rs		
	return
Program v 8M2 zasílající data:

Kód: Vybrat vše

;08M2
symbol baud=N4800
pause 500
serout C.1, baud, (254,1)  ;smaže lcd

start:
serout C.1, baud, (254,128)   ;první řádek, první pozice
serout C.1, baud, ("abcdefghi")
serout C.1, baud, (254,192)   ;druhý řádek, první pozice
serout C.1, baud, ("123456789")
pause 1000
serout C.1, baud, (254,1)  ;smaže lcd
pause 1000
goto start

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host