• Welcome to LusoRobótica - Robótica em Português.
 

[Ajuda] Picaxe 40x2 + ds18b20 +ds1307 + lcd03(i2c)

Started by andre_f_carvalho, 10 de September de 2010, 14:29

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

andre_f_carvalho

boas,

comecei  meu projecto hoje, visto que os meus ds18b20 chegaram ontem, e tenho as seguintes duvidas:

consigo mostrar o valor da temperatura na 1º linha com este código
init:
   pause 500
   i2cslave $c6, i2cslow, i2cbyte
   writei2c 0,(254,128,255,19,12,4)

ler_temp:
   readtemp 0,w1
   debug w1
   pause 10
   
escrever_lcd:   
   writei2c 0,(254,128,255,19,12,4)
   pause 10
   bintoascii w1,b0,b1,b2
   hi2cout(" interior=",b1,b2,"")
   pause 10
   pause 1000
   goto ler_temp


e ao tentar juntar as duas temperaturas, aquilo fica tudo seguido com este código:
init:
   pause 500
   i2cslave $c6, i2cslow, i2cbyte
   writei2c 0,(254,128,255,19,12,4)

ler_temp:
   readtemp 0,w1
   debug w1
   pause 10
   readtemp 1,w2
   debug w2
   pause 10
   
   
escrever_lcd:   
   writei2c 0,(254,128,255)
   pause 10
   writei2c 0,(".:Temperatura:.")
   bintoascii w1,b0,b1,b2
   bintoascii w2,b3,b4,b5
   writei2c 0,(254,192,255)
   pause 10
   hi2cout("interior=",b1,b2,"","")
   pause 10
   hi2cout("exterior=",b4,b5,"","")
   pause 1000
   goto ler_temp


alguém já trabalhou com este tipo de sistema?


durza


andre_f_carvalho

provavelmente no segundo código, no 1º esta bom, pelo menos no lcd está

XicoMBD

#4
Boas,

Não sei se tens o datasheet do LCD, mas se não tiveres aqui o tens em anexo.

A tabela de comandos dá bastante jeito.



Na terceira linha podes encontrar o seguinte:

decimal           command                                                                          description
     2          |  Set cursor (1-80) | Cursor to a position specified by the next byte, where 1 is the top left and 80 is the bottom right


Portanto se  escreveres "writei2c (0,2,5)" vais colocar o cursor na posição 5 do LCD, ou seja o 5º rectâgulo da primeira linha, se quisesses na linha seguinte terias de trocar o 5 por 25.


Acho que assim deve funcionar:

init:
pause 500
i2cslave $c6, i2cslow, i2cbyte
writei2c 0,(254,128,255,19,12,4)

ler_temp:
readtemp 0,w1
debug w1
pause 10
readtemp 1,w2
debug w2
pause 10


escrever_lcd:
writei2c 0,(254,128,255)
pause 10
writei2c 0,(".:Temperatura:.")
bintoascii w1,b0,b1,b2
bintoascii w2,b3,b4,b5
writei2c 0,(254,192,255)
pause 10


writei2c (0,2,22)

hi2cout("interior=",b1,b2,"","")
pause 10

writei2c (0,2,42)


hi2cout("exterior=",b4,b5,"","")
pause 1000
goto ler_temp


andre_f_carvalho

o datacheet do display já o tinha, em relação a modança de cursor o "writei2c (0,2,5)" este 2 serve para que efeito?

XicoMBD

Quote from: XicoMBD on 14 de September de 2010, 17:09
decimal           command                                                                          description
     2          |  Set cursor (1-80) | Cursor to a position specified by the next byte, where 1 is the top left and 80 is the bottom right

andre_f_carvalho

Quote from: XicoMBD on 14 de September de 2010, 17:53
Quote from: XicoMBD on 14 de September de 2010, 17:09
decimal           command                                                                          description
     2          |  Set cursor (1-80) | Cursor to a position specified by the next byte, where 1 is the top left and 80 is the bottom right

peço desculpa não tinha reparado com precisão para a frase


cump


andre_f_carvalho

#9
boas,

funciona, alterei um bocado o código, ficando assim
init:
pause 500
i2cslave $c6, i2cslow, i2cbyte
writei2c 0,(254,128,255,19,12,4)

ler_temp:
readtemp 0,w1
debug w1
pause 10
readtemp 2,w2
debug w2
pause 10


escrever_lcd:
writei2c 0,(254,128,255,4)
pause 10
writei2c 0,(".:Temperatura:.")
pause 10


writei2c (0,2,22)
bintoascii w1,b0,b1,b2
hi2cout(" interior=",b1,b2,"")
pause 10

writei2c (0,2,42)
bintoascii w2,b3,b4,b5
hi2cout(" exterior=",b4,b5,"")
pause 10
goto ler_temp


mas tenho agora dois problemas, um é a 2º temperatura que esta a 20 mas se a aquecer com os dedos passa a 31(valor normal) e dp passa a 20, a segunda coisas é a escrita de temperatura a mais e alguns caracteres manhosos, vou inserir um vídeo para mostrar com está.

edit:

tive problemas ao filmar, está aqui uma foto onde podes ver o valor a 20 da temp e os caracteres manhosos


XicoMBD

Porque metes sempre "writei2c 0,(254,128,255,4)" antes de temperatura?

Experimenta pôr só:

"writei2c 0,(0,1,12)
writei2c 0,(0,2,3) "

andre_f_carvalho

tb n sei pq, agora está tudo ok, menos o valor da temp que esta a 20, vou tentar resolver o código e vou dando noticias a medida que avanço,

cump

XicoMBD

Com a temperatura é que não te devo poder ajudar, nunca utilizei nenhum sensor desse género...

andre_f_carvalho

eu tenho uma ideia do que seja, mas so confirmo quando obter os resultados

andre_f_carvalho

n prebo é porque é que a segunda temperatura está com valores diferentes, ao ver o debug da segunda temperatura esta  b4 esta a 2 e b5 a 0, depois passa a n ter nenhum nº e continua a alternar nesses dois nº, o que é estranho