Como usar um LCD 16×2 em conjunto com o sensor DS18B20 para ler temperaturas ambientes? De forma bem simples? E pouco componentes?
Medir temperatura com sensor DS18B20 se torna fácil com uso de um PIC 16F628a e um LCD. Isto porque não se exige rotinas de multiplexação para apresentar cada dígito, necessárias nos displays de 7 seguimentos. Basta termos uma rotina de inicialização do LCD e rotinas de envio de dados/comandos.
Veja o esquema abaixo:
O DS18B20 é um sensor da Maxim (antiga Dallas) que fornece valores de temperaturas entre -55 a +125°C utilizando o protocolo 1-wire (usa apenas um fio e o gnd para se comunicar). O microcontrolador PIC 16F628a deverá gerar um reset na linha para começar a comunicação. Em seguida é enviado o comando para comunicar com o dispositivo (skip rom). Este deve ser seguido por um comando de conversão de temperatura, para se obter os novos valores de temperatura. Para ler este valores, repete-se um reset, um comando de skip rom, e o comando de leitura de 2 bytes.
Estes 2 bytes são então convertidos para decimal e enviados para o LCD. Note que todas as rotinas são ‘caseiras’ sem uso de bibliotecas. Foi acrescentado um trimpot de 4k7 no terminal ‘VO’ do LCD para controlar o contraste. Ajuste ele de forma a apresentar de forma nítida os caracteres. Pouco contraste poderá apagar toda a imagem e muito contraste poderá gerar ‘quadradinhos’ negros em todas as posições.
Poderá usar qualquer fonte de alimentação de 5 volts, desde que seja regulada. Alguns carregadores de celulares com saída de 5 volts podem ser usados.
Obs. Esta montagem é de caráter didática, sendo montada e testada apenas em placa de protoboard, sujeita a bugs ainda não observados. Está sendo fornecido os arquivos “C” e HEX que poderão ser alterados conforme a necessidade do hobista.
Segue pasta com os arquivos “C” e HEX (Compilador CCS v3.200):
Clique aqui para link de termômetro usando display de 7 seguimentos.
Manuais:
DS18B20
PIC16F628a
Curiosidades:
Adolescência — preparação para a vida adulta
Petróleo — bênção e maldição?
Retratos de famosos e de criminosos
Como criar filhos bondosos num mundo egoísta
Evolução — mitos e fatos
Quem atende seu pedido de socorro?
A arte e a ciência da previsão do tempo
Quantos sentidos temos realmente?
Temperatura em carros estacionados
Os alimentos transgênicos são seguros?
Como uma música se torna um sucesso?
Enxaqueca — o que você pode fazer?
Como estimular o desejo de aprender
Como ajudar pessoas com transtornos de ansiedades
Dicas sobre congelamento de alimentos
Outros assuntos:
Como controlar os gastos
Estou pronto para sair de casa?
Um site para você
Quando seu casamento não é o que você esperava
Como resolver diferenças no casamento
Como recuperar a confiança no casamento
Como controlar o estresse
Quando um dos cônjuges tem necessidades especiais
Aprenda a perdoar
Como acabar com a tática do silêncio
Como criar filhos responsáveis
Como administrar o seu dinheiro
Ensine valores morais a seus filhos
Como posso ter ânimo para exercitar
Como posso controlar meu peso?
Adolescentes- O que fazer se estou sofrendo bullying?
Como evitar ferir com palavras?
Como tratar seu cônjuge com respeito?
Até o próximo artigo!!!
➡ ola,Larios no programa descrito por vc assembly,esta escrito eliminar mensagem de erro ao compilar,como faço para eliminar esse erro ❓ 😯
Olá Aramis!
Na realidade, não se trata de ‘erro’, mas uma ‘advertência’ sobre uma situação que o compilador foi programado a emitir esta mensagem.
Toda vez que você troca de banco de registradores, ocorre uma mensagem ‘errorlevel 302 “Register in operand not in bank 0. Ensure that bank bits are correct.” Mas não quer dizer que é um erro, mas um aviso ao programador, para verificar se realmente deve ser assim, se não houve engano. Isto é desnecessário, porque muitas vezes desejamos operar em outro banco, como quando vamos acertar o TRIS ou OPTION_REG, por exemplo. Por isto, costumo eliminar usando esta diretiva de compilação ‘ERROR LEVEL -302’.
Já o aviso 202 indica quando você está fora da faixa de operação da memória. Mas há casos que você deseja isto, como quando você quer copia o endereço menos significativo de um Label
como abaixo:
……meio do programa
pula27
movlw mens1 ;aqui aparecera mensagem de aviso pois ira copiar somente o endereço menos significatico do label ‘mens1’ (no caso 00h ao invés de 0700h)
movwf regc
……
movlw 7 ; numero do banco da flash
movwf pclath
movf regc,w
addwf pcl,f ;salto goto
……
……fim do programa
org 0x7000
mens1
dt “perigo”,0
Conforme o acima, ocorrerá o aviso de que o argumento está fora de faixa, pois realmente precisaria de 2 bytes para obte-la. Mas no programa, eu coloco no pclath o valor do banco e assim aponto corretamente o salto para o local, com endereço lsb no registrador regc para o PCL. Então, o programa vai funcionar e a mensagem torna-se desnecessária .
Também se elimina ela por usar a diretiva ‘ERRORLEVEL -202.
Espero que tenha entendido. Não dá para eliminar no programa, como se fosse um erro. Não existe erro. Existe sim avisos de situações que podem ou não indicar uma falha de programa. O programador analisa e se ver que está tudo ok, elimina manualmente este avisos.
Cláudio
😛 Olá Claudio, este exemplo aqui, tem a possibilidade de colocar mais de um sensor ds18b20 na mesma linha, no mesmo pino para poder fazer a leitura interna de um ambiente e externa também, eu vi funcionando em um termômetro comercial.
Olá Foxconn!
Sim, é possível. Para usar 2 sensores ou mais, em um único pino, existe duas maneiras de ser feito:
1) Conhecendo o ‘serial number’ de cada sensor e acessa-los um por vez. Exigiria primeiro aprender um sensor por vez, manualmente, com um botão de ‘prog’, colocando um sensor por vez na linha. Algo parecido ao que fazemos com controles remotos, e depois de cadastrados, usa-los de forma normal.
2) Auto-aprendizagem: Processo em que o mestre procura por sensores no pino e gradativamente vai selecionando um a um e cadastrando-os na eeprom (interna ou externa se for muitos). Esta opção é um pouco complicada, e estou ainda em estudo de como fazer estas linhas de código. Se tiver sucesso, postarei.
Cláudio