PICAXE a menu na LCD

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

Re: PICAXE a menu na LCD

Příspěvek od jova » 09 bře 2017, 13:36

Myslel jsi to například takto? Volám to pak příkazem: serout C.1, baud, (253,129,0) a přepínám: serout C.1, baud, (253,129,1)

Kód: Vybrat vše

...
table 0, ("nastav casNASTAV CAS") 
...
msg:
	branch b1,(btn0,btn1)
		
btn0:	
for  b0 = 0 to 9
	readtable b0,b2
	pinsB = b2 		
	pulsout enable,1	
next	b0
	return
btn1:
for  b0 = 10 to 19
	readtable b0,b2
	pinsB = b2 		
	pulsout enable,1
next	b0
	return
	
Naposledy upravil(a) jova dne 27 bře 2017, 13:16, celkem upraveno 1 x.

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

Re: PICAXE a menu na LCD

Příspěvek od jova » 15 bře 2017, 00:56

V podstatě vyřešeno, jen je problém s tím že PICAXE je na to v tomto zapojení moc pomalý.

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

Re: PICAXE a menu na LCD

Příspěvek od jova » 21 čer 2019, 16:54

Zdravím.
S novým projektem: http://www.jova1.cz/dilna/odvalovacka/odvalovacka.html vyvstal starý problém a to je ukládání textů do paměti procesoru co řídí LCD.
Zapojené to mám následovně:
LCD řídí z důvodu vyšší frekvence komunikace picaxe 20X2. V jeho paměti jsou uložené texty (table) a ty postupně načítám na LCD posíláním příkazů z hlavního procesoru 40x2, např.: serout C.3,baud,(253,128,0)

Kód: Vybrat vše

table 0,("zbyva zubuZBYVA ZUBUpocet zubu")

symbol baud = N9600_64					
symbol RX	= C.0	
symbol enable 	= C.2	
symbol rs 	= C.1	

init:
	gosub LCD_init 	
		
main:
	serin RX,baud,b1
					
		if b1 < 253 then
		high rs
		pinsB = b1 	
		pulsout enable,1 
		goto main		
		
	else if b1 = 254 then	
		low rs 
	     	serin RX,baud,b1	
		pinsB = b1 
		pulsout enable,1 
		goto main		
		
	else if b1 = 253 then
		low rs
		serin RX,baud,b1
		pinsB = b1
		pulsout enable,1
		goto msg
		goto main
		
	else 	
		serin RX,baud,b1	
		pinsC =b1 & %10111000 |%00000010 	
		goto main					
				
	end if		
			
msg:
	serin RX,baud,b1 
	high rs
	
	branch b1,(btn0,btn1,btn2)

btn0:
for  w10 = 0 to 9
	readtable w10,b1
	pinsB = b1 		
	pulsout enable,1
	next	w10
	goto main
	
btn1:
for  w10 = 10 to 19
	readtable w10,b1
	pinsB = b1 		
	pulsout enable,1
	next	w10
	goto main
	
btn2:	
for  w10 = 20 to 29
	readtable w10,b1
	pinsB = b1 		
	pulsout enable,1
	next	w10
	goto main
	

LCD_init:
	dirsC = %10111110	; PortC en sortie sauf C.6 et C.0
	dirsB = %11111111	; PortB all outputs	

	; Standard LCD Module Initialisation
	pause 15 			; Wait 15ms for LCD to reset.

	pinsB = %00110000 	; 8 bit, 2 line
	pulsout enable,1  	; Send data by pulsing enable
	pause 5 			; Wait 5 ms
	pulsout enable,1 	 	; Send data 48 again
	pulsout enable,1  	; Send data 48 again
	
	setfreq m64		; now change to 16Mhz

	pinsB = %00111000 	; LCD  - 8 bit, 2 line, 5x8  
	pulsout enable,1
			
	pinsB = %00000001		; Clear Display
	pulsout enable,1 	
	pause 16			; 8 = 2ms at 16MHz
	
	pinsB = %00000010 	; return home
	pulsout enable,1

	pinsB = %00000110		; Entry mode
	pulsout enable,1 	
	pause 4			; 2	

	pinsB = %00001100		; Display on, no cursor, no blink
	pulsout enable,1
	;gosub cardef		'sub définition caractčres utilisateur	 	
	high rs			; Leave in character mode
	return
Potud to vše funguje dobře. V okamžiku kdy ale pošlu další příkaz na vypsání textu např.:serout C.3,baud,(254,148) serout C.3, baud,("00",#zbyvazubu), což je na stejný řádek, ale odsazený o 3 úhozy za prvním textem, dojde k "přilepení" tohoto textu za ten text první :?
Abych ho dostal na správné místo, musím po tom prvním textu dát pazu aby to vypsalo jak má. Takže pak celý příkaz co musí ta 40x2 poslat, vypadá takto:

Kód: Vybrat vše

serout C.3,baud,(253,128,0) pause 20 serout C.3,baud,(254,148) serout C.3, baud,("00",#zbyvazubu)
Dá se nějak upravit program v procesoru LCD abych tam tu pauzu nemusel používat?

Odpovědět

Kdo je online

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