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?