• 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.

fre_deri_co

boas... não entendi ainda se já conseguis-te readtemp12 ou não, mas para o caso de não (é que também devido ao meu curto tempo actualmente não li tudo.... quanto a programação no teu primeiro post tens vários erros críticos)

(esta pequena parte é exemplo de o codigo que usei para o termometro, isto é muito util para memorizar a temp max e min juntamente com outras linhas)
readtemp12 termometro, temperatura
if temperatura >= 1600 and temperatura <= 2000 then let temperatura = 1599 : endif ;  limite de temperatura máxima = 99.9º (100º a 125º(valor máximo de leitura = 99.9º)
if temperatura > 64655 and temperatura <= 65375 then let temperatura =65377 : endif ;limite de temperatura mínima = -9.9º (-10º a -55º (valor negativo maximo) = -9.9º)
if temperatura > 65376 then let temperatura = 65535 - temperatura + 1 : let negativo = 1 else let negativo = 0 : endif; temperatura negativa limitando ate -9.9º


temperatura = temperatura * 10 / 16 (por exemplo supondo que leu 445 dividindo por 16 (conversão directa) da aproximadamente 27.8º, mas como ja deves saber casa decimais arredonda então a multiplicação anterior por 10)

bintoascci temperatura, auxiliar, auxiliar, aux1, aux2, aux3 (onde auxiliar é para desprezar, aux1 equivale ao 2, aux2 = 7, aux3= 8, dando entao os 27.8º) 



espero ainda ajudar ^^
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

andre_f_carvalho

#31
ganda confusão xD

já resolvi o problema em relação a temperatura, mas n mexi nas partes negativas (a seu tempo), estou de volta com o meu menu para o lcd onde estou a ter problemas em por uma palavra  por cada linha do lcd

edit:.
sendo este o código
menu1:
    writei2c 0,(0,1,4)
    writei2c 0,(".:Menu:.")
    writei2c 0,(0,2,1)
    writei2c 0,("-Temperatura")
    writei2c 0,(0,3,1)
    writei2c 0,("Calendário")
    writei2c 0,(0,4,1)
    writei2c 0,("Estacionamento")

andei a ver nos manuais do picaxe e nenhum faz referencia a esta parte, a minha ideia é colocar cada palavra que ali está, uma por baixo da outra, nas minhas tentativas falhadas aparecia as palavras uma em cima e outra em baixo (1º e 4º linha), ou tudo misturado qual é a solução para este caso?

XicoMBD

Quote from: andre_f_carvalho on 15 de September de 2010, 22:57
ganda confusão xD

já resolvi o problema em relação a temperatura, mas n mexi nas partes negativas (a seu tempo), estou de volta com o meu menu para o lcd onde estou a ter problemas em por uma palavra  por cada linha do lcd

edit:.
sendo este o código
menu1:
    writei2c 0,(0,1,4)
    writei2c 0,(".:Menu:.")
    writei2c 0,(0,2,1)
    writei2c 0,("-Temperatura")
    writei2c 0,(0,3,1)
    writei2c 0,("Calendário")
    writei2c 0,(0,4,1)
    writei2c 0,("Estacionamento")

andei a ver nos manuais do picaxe e nenhum faz referencia a esta parte, a minha ideia é colocar cada palavra que ali está, uma por baixo da outra, nas minhas tentativas falhadas aparecia as palavras uma em cima e outra em baixo (1º e 4º linha), ou tudo misturado qual é a solução para este caso?

Bem dizes que andas todo atrofiado ;)
Dá uma vista de olhos ao datasheet do lcd.
Quando metes writei2c 0,(0,1,4) estás a posicionar o cursor na posição home e depois a escondê-lo.

Se o que queres é colocá-lo na 4ª posição da 1ª linha então o que devias pôr era:  writei2c 0,(0,3,1,4) ou então  writei2c 0,(0,2,4)

Vê lá se assim não funciona:
menu1:
    writei2c 0,(0,2,4)
    writei2c 0,(".:Menu:.")
    writei2c 0,(0,2,21)
    writei2c 0,("-Temperatura")
    writei2c 0,(0,2,41)
    writei2c 0,("Calendário")
    writei2c 0,(0,2,61)
    writei2c 0,("Estacionamento")


andre_f_carvalho

tens razão  ;D
não sei o que seria de mim sem ti xD

andre_f_carvalho

boas,

é possível criar um bitmap para cada quadrado do lcd sendo ele 8x5 e enviar o carácter por i2c?

fre_deri_co

se o pretendes fazer so podes num total de 8 caracteres em simultâneo uma vez que a cgram não tem memoria disponível para mais...
para isso necessitas de enviar instrução por exemplo $40 que é o 0 disponível para iniciares o primeiro carácter, de seguida passas a dados enviando 5 bits de cada vaz (de cima para baixo o carácter) conforme o que pretendes desenhar, no fim cada 8 vezes enviada tens um caracter feito... para parar de "desenhar" envia uma instrução qualquer, por exemplo $01 (cursor home) de seguida da mesma forma que envias um carácter envias $00 corespondendo ao primeiro caracter desenhado de $40 a $47 da memoria cgram
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

andre_f_carvalho

mas usando o cgram é só para o serial ou dá para i2c?

fre_deri_co

se dá para um da para o outro, uma vez que i2c "simula" convertendo a comunicação i2c para paralelo, ou seja basta saberes como comunicar através de i2c, para isso necessitaras de saber como o conversor i2c "fala",...
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

andre_f_carvalho

bahhh

"I do not speak i2c" xD



vou googlar um pouco a ver se descubro

fre_deri_co

vê se te ajuda...
http://www.geocities.com/dinceraydin/djlcdsim/djlcdsim.html
é em paralelo... foi aqui que aprendi como fazer e a intender a linguagem que o display pede por paralelo...
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

andre_f_carvalho

#40
Quote from: fre_deri_co on 16 de September de 2010, 21:53
vê se te ajuda...
http://www.geocities.com/dinceraydin/djlcdsim/djlcdsim.html
é em paralelo... foi aqui que aprendi como fazer e a intender a linguagem que o display pede por paralelo...

parece-me que n seja igual, estive a ver o datacheet e na parte
Custom char generator mostra com se faz, agora a minha duvida é como escrever aqueles nº e por que ordem os devo escrever, sendo que já sei criar a numeração para o bitmap que quero (caso interesse é usando a tabela de verdade onde 128 corresponde a 00000 e 159 a 11111 e ai por diante entre estes nºs).

edit.: mais uma ajuda possível, quem é que já conseguiu escrever os bits num único carácter?

fre_deri_co

eu ja consegui assim como consigo mas fiz- em paralelo...
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

andre_f_carvalho

no datacheet do lcd estive a ver e esta lá uma seta como explicação, e para fazer a tal seta é nesseçario escrever estes nº por esta ordem:
    *  27 (comando para dizer que é a construção do carácter )
    * 128 (location to be filled)
    * 128 (byte 0)
    * 132 (byte1)
    * 142 (byte2)
    * 149 (byte3)
    * 132 (byte 4)
    * 132 (byte 5)
    * 132 (byte 6)
    * 128 (byte 7)


agora, tinha a ideia que pode-se ser assim, mas n funciona   :-\:
writei2c 0,(0,27,128,128,132,142,149,132,132,132,128)

fre_deri_co

que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

andre_f_carvalho

não, porque nem deixa enviar dá erro logo ao inicio