FAÇA UM TERMOMETRO DIGITAL – COM PIC16F628A E SENSOR DS18B20 – VERSÃO DISPLAY DE 7 SEGUIMENTOS (REF141)

1

Gostaria de medir temperatura de uma forma bem fácil, com um pic e um sensor DS18B20? Com apenas alguns componentes?

Esta montagem usa um circuito integrado dedicado para medir temperatura: o DS18B20, da anterior Dallas (atual Maxim). Veja o esquema abaixo:

Foi usado a versão de apenas 3 pinos, com encapsulamento TO-92 (formato identico de um BC548). Para funcionar no modo normal, precisa receber alimentação no pino +Vcc entre 3 a 5,5 volts. Outro pino extremo é ligado ao gnd. Pode ser usado para obter medidas de temperatura na faixa de -55°C a 125°C, com precisão de +- 0,5°C entre -10°c e +85°C.
Como é lida a informação de temperatura?
O pino do meio, chamado de ‘DQ’ recebe e envia dados através do protocolo ‘1-Wire’, para o microcontrolador. Todas as operações são feitas em modo ‘Slave’ ou seja, o microcontrolador coordena todo o processo de medição. Seu conversor analógico/digital pode ser programado de 9 a 12 bits de resolução. Quando adquirimos um DS18B20, ele já vem programado para 12 bits. O tempo médio de uma conversão em 12 bits é de 750 ms. Com resoluções menores temos tempos menores proporcionalmente. Vários destes sensores podem ser ligado a este ‘único fio’ de comunicação, visto que cada peça tem um número serial exclusivo de 64 bits. Apenas aquele que tiver o número serial igual ao enviado pelo barramento é que irá responder aos comandos do microcontrolador.
Para comunicar com o DS18B20, o microcontrolador precisa dar um ‘reset’, seguido pelo ‘rom command’ e pelo ‘function commands’. Esta receita tem que ser repetida para usar outros ‘function commands’. O programa ‘C’ aqui proposto usa apenas poucos ‘function commands’, em especial, o de nova conversão de temperatura (44h) e o de leitura da temperatura (BEh). Lendo o datasheet veremos que tem mais comandos para seleção da rom e de funções adicionais como programar uma temperatura de alarme, ler o modo da alimentação quanto a ser em modo parasita ou com +Vcc, ler o número serial do DS18B20 (usado apenas com um só DS18B20 no barramento), enviar um comando para todos os DS’s no barramentos, etc.
A apresentação do resultado da leitura é feita em 4 dígitos, sendo estes feitos com display de 7 seguimentos do tipo anodo comum. Quando a temperatura é negativa, aparecerá o traço (-) no digito mais a esquerda. A rotina para conversão hex para decimal da parte inteira é feita em 8 bits, pelo método do decremento do valor lido e incremento dos registradores de resultado, conforme seja unidade, dezena ou centena. Já na parte fracionaria (pós virgula), foi usado uma tabela para converter os 4 bits, de forma bem simples (nada de matemática!).
A alimentação poderá provir de uma fonte de 9 a 12 volts, usando um regulador 7805 para reduzir para os 5 volts necessários, ou uma fonte de carga de celular, já com 5 volts de saída.
Obs. Esta montagem é didática, sendo testada apenas em placa de protoboard, sujeita a bug’s ainda não detectados com o uso.
Esta sendo fornecido os arquivos que poderão ser alterados conforme a necessidade dos hobistas.

Segue abaixo pasta com arquivos “C” (CCS Compiler v 3.200) e Hex para versão anodo comum ( antiga, de 24/03/2014):

termometro_ds18b20

Segue adicionalmente, pasta contendo arquivos para montar o projeto usando catodo comum (antiga, de 24/03/2014) :

termometro_ds18b20_ankat

Segue pasta com arquivos “C” (CCS Compiler v 3.200) e Hex para anodo ou catodo comum, sendo uma versão com rotinas melhoradas, de 13/04/2014:

termometro_7seg_ds18b20_v1

Manuais:
DS18B20
PIC16F628A

Curiosidades:
Seu filho está com febre?
São Petersburgo — a “janela para a Europa”
A arte e a ciência da previsão do tempo
Quantos sentidos temos realmente?
Da árvore para a garrafa — a história da cortiça
Ação refrescante natural
Temperatura em carros estacionados
Temperatura do Sol
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:
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!!!

1

30 comentários sobre “FAÇA UM TERMOMETRO DIGITAL – COM PIC16F628A E SENSOR DS18B20 – VERSÃO DISPLAY DE 7 SEGUIMENTOS (REF141)

  1. 0

    Sr.. Como em minha cidade não encontro “DS18B20” no projeto: FAÇA UM TERMÔMETRO DIGITAL – COM PIC16F628A E SENSOR DS18B20 (VERSÃO DISPLAY DE 7 SEGUIMENTOS)
    Como posso usar LM35 agradeço Paulo Ferreira

    1. 0

      Olá Paulo!
      O PIC 16F628A não dispõe de conversor analógico/digital, portanto fica mais difícil a implementação tendo que se contruir um a base de software e amplificador operacional interno (delta-sigma). Mas poderá usar o pic 16f676 que facilita as coisas, conforme o artigo FAÇA UM TERMÔMETRO DIGITAL COM PIC 16F676.
      Cláudio

  2. 0

    Claudio pesquisei o data shild desse display , mais so tem de 2 digito no modelo postado KW2-561 AOA.

  3. 0

    Boa noite Cláudio, esse projeto foi feito pelo proteus.

    pq fiz ele pelo proteus, mais a leitura do display so fica em 9999

    1. 0

      Olá Wladimir!
      Quanto ao circuito, ele foi montado e testado em placa de protoboard, não sendo usado o Proteus em nenhum momento. Quanto aos displays, montei o que tinha, que era o mencionado , apenas que usei 2 peças para formar os 4 dígitos. Mas escolha o que desejar (individual ou um que já tenha 4 em uma única carcaça).
      Claudio

  4. 0

    Olá Lários !Bom primeiramente eu montei o circuito com catodo comum, mas deu o problema de varredura dos Display’s …
    Resolvi montar o de Anodo comum , esse sim ficou PERFEITO !!
    LÁRIOS o código dessa montagem vc achou já pronto ou vc mesmo escreveu , de sua autoria ???

    1. 0

      Olá Maxxtor2!
      Os programas postados neste site relativos a microcontroladores são todos de minha autoria. Quanto ao fato de não conseguir funcionar a versão Katodo comum, irei montar em protoboard , para identificar alguma falha e retornarei.
      Obrigado
      Cláudio

    2. 0

      Olá Maxxtor!
      Baixei diretamente do site os arquivos ‘hex’ relativos ao termômetro da versão catodo comum e fiz a montagem em placa de protoboard. Tanto a versão mais antiga como a mais recente funcionarão perfeitamente, sem qualquer problema com varredura.
      Verifique a sua montagem quanto a possíveis erros de ligação, em especial, os transistores de acionamento dos catodos.

      Claudio

      1. 0

        Obrigado por sua preciosa atenção meu amigo !!
        Realmente estou impressionado com seu CONHECIMENTO em microcontroladores !!!
        Olha Larios, a muito tempo atrás(uns quatro anos) fiz um curso Assembler para Pic por correspondência ,o Professor me enviava as lições por email e eu estudava … Mas então eu achei muito complicado e cansativo, desisti do Assembler , Bom ai me apareceu um cidadão que me convenceu a estudar o Pic Basic , até então muito Bom simples sem complicação … Mas com o tempo fui descobrindo o Basic é muito LIMITADO , pois quando você faz uma rotina de piscar um Led ou pequenos Comandos dos port’s tudo bem ,Funciona … Mas quando vc precisa de usar certos recursos , interrupções e mais velocidade de processamento aí o Bicho pega , o Basic não funciona , Muito ruim mesmo !

        Bom amigo eu tenho uma Enorme Vontade de Aprender a Programar em C , eu não quero ficar um Especialista como você !! Mas na minha ignorância atual sobre C , o que vc pode me aconselhar a Praticar com mais humildade ??

        Obrigado novamente .

        1. 0

          Olá Maxxtor2!
          De modo algum posso me considerar algum tipo de ‘especialista’ e nem de ser alguém com muito ‘conhecimento’ em microcontroladores. Na realidade, como um simples hobista , tenho conhecimento limitado, aprendendo pouco a pouco, muitas vezes com os erros. As vezes, busco idéias em matérias de outros colegas que compartilham na internet, pensando em soluções diferenciadas. Estou ainda aprendendo a linguagem “C”, e cada dia descobrindo coisas novas. Uma coisa eu aprendi muito bem: Uma grande mansão é construída com pequenos tijolos colocados um a um. Comece fazendo projetos simples do tipo ‘pisque um led’. Depois, tente fazer outra coisa mais complicada e encare como um desafio, não importa o tempo que demore. Persista sempre! Quando empacar em uma parte do programa, pesquise soluções parecidas em outros programas exemplos, como os fornecidos juntos com os compiladores. Pesquise na internet sobre como usar determinada função ou biblioteca. Veja aulas de programação em “C” no YouTube. Acesse os blogs dos ‘programadores profissionais’ e aprenda com suas soluções. Compartilhe também com outros os seus sucessos! Tudo isto leva tempo, mas com esforço poderá alcançar o seu objetivo.
          Quem sabe daqui uns meses não teremos mais um blog sobre microcontroladores do ‘Maxxtor2″!!!
          Cláudio

  5. 0

    Olá amigo , como vai ??
    Bom realizei a montagem , mas acho que tem alguma coisa errada com a rotina de VARREDURA dos display’s
    Fica piscando com brilho fraco , mas no entanto o valor da temperatura está correto , será algum problema de configuração TIMER0 ???

    1. 0

      Olá Maxxtor2! Poderia informar se foi versão catodo comum ou anodo? Está cintilando? Poderá mudar o timer0 para dividir por 8 ao invés de 16.
      Cláudio

  6. 0

    Boa tarde mestre!
    Deixe seu e-mail para podermos conversar com voce tambem! Isso eh util!

    Fiz no Proteus o circuito, posso te mandar pronto e voce so abre o arquivo e manda simular.

    Nao consegui fazer dar certo!
    Alguem conseguiu fazer esse Projeto dar certo?

    1. 0

      Olá Felipe! O circuito foi montado com componentes reais em placa de protoboard. Acabei de remontar no protoboard, na versão anodo comum, e não tive nenhum problema, funcionando normalmente. Mas quanto a uso de simuladores virtuais, confesso não ter afinidade no Proteus para poder te ajudar. Se alguém do blog puder ajudar você…
      Cláudio

  7. 0

    Bom Claudio fiz a montagem como segue a imagem no esquema de anodo comum mas infelizmente nao funcionou. desenhei no proteus mas a temperatura indica -55ºC sendo que o ds18b20 está em 27ºC. alguma ideia de onde eu possa ter errado? Grato espero respostas.

    1. 0

      Olá Daniel! Verifique todas as conexões conferindo pino a pino. Certifique de gravar o hex correto para a versão. Confira a posição dos pinos do Ds18b20 e na dúvida, use outro. O display acende algum digito? Com respeito ao Proteus, não é a minha ‘praia’, não posso te ajudar.
      Cláudio

  8. 0

    Bom dia To com um probleminha pq eu tenho q montar um termometro desse mas com lcd 16×2. tem alguma ideia como eu faço a programação estou usando PIC 16F84A. agradeço se ajudarem.

    1. 0

      Olá Daniel! Tenho a versão com sensor LM35 no artigo ‘FAÇA UM TERMÔMETRO DIGITAL COM PIC 16F676’. Verifique se este serve para você. O problema é que usa o pic 16f676. O pic 16f84a não tem conversor analógico para digital (AD), portanto não será possível usa-lo sem colocar um AD externo. Tem apenas 1k de memória ficando difícil fazer muita coisa.
      Cláudio

      1. 0

        Olá Valter! A escala positiva de temperatura vai até 125 °C, necessitando de 4 dígitos (ex. 123,7°C). Na escala negativa, vai até -55 °C, também necessitando de 4 dígitos , sendo que o mais significativo é o ‘traço’ do sinal negativo (ex. -55,4).
        Claudio

    1. 0

      Olá Valter! Sim, pode ser feito. Só não sei quando poderei faze-lo. Mas basta usar os transistores drive com emissores ao gnd e coletores nos catodos comuns. Todos os seguimentos terão que ser invertidos no programa.
      Cláudio

  9. 0

    Caro Caudio Larios. Antes de mais nada gostaria de parabenizá-lo pelo excelente nível dos circuitos de seu blog. obrigado por tantas ideias boas! gostaria de saber se tem algum circuito de um seletor automático de voltagem para fontes de PC. Achei vários mas ou usam circuitos dedicados dificílimos de encontrar ou usam relés e até transformadores, fora de questão para colocar dentro de uma fonte de PC já existente. Sei que fonte de PC é barata mas o propósito é não ter o inconveniente de por distração queimar a fonte por ligar em voltagem errada, não o preço! Bem, em resumo é o seguinte: A fonte do PC tem uma chave HH que curtocircuita 2 pontos A e B para 110V e abre esses pontos para 220V. O circuito substituiria essa chave sendo que quando a fonte fosse ligada em 110V o circuito faria com que um triac fechasse os pontos A e B. quando ligada em 220V o circuito faria com que o triac entre os pontos A e B ficasse aberto. creio que um triac um microcontrolador meia dúzia de componentes discretos e muita imaginação resolvem o problema. Obrigado!

    1. 0

      Olá Marcustito!
      Obrigado por seu comentário apreciativo. Mas, exceto se sua fonte tem algum diferencial, não seria melhor adquirir um fonte moderna sem esta chave 110/220 (que controla automaticamente de 90 a 240 volts)? Usar microcontrolador em AC fica muito complicado, uma vez que tem que acompanhar o momento exato do disparo de triac, através de timer, etc. Pode-se pensar em um circuito discreto, sem microcontrolador. Pensei em algo simples como este aqui.
      Cláudio

Os comentários estão fechados.