collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]


Focos LED SMD por almamater
[16 de Dezembro de 2023, 14:12]


I Belive por dropes
[15 de Dezembro de 2023, 13:59]


Carga de corrente eletrónica ZPB30A1 60W por jm_araujo
[11 de Dezembro de 2023, 13:27]

Autor Tópico: DS18B20 + Atmega88  (Lida 3369 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline zepedro

  • Mini Robot
  • *
  • Mensagens: 17
DS18B20 + Atmega88
« em: 13 de Junho de 2012, 18:50 »
Estou a tentar fazer um termómetro com um Atmega88. Tenho um DS18B20 que comprei e já vinha com um cabo. No entanto não estou a conseguir comunicar com ele. Encontrei várias bibliotecas e escolhi uma que me pareceu boa.

Ainda não detectei o problema ao certo mas sei que ele não consegue ler as temperaturas e logo no inicio, quando faço reset ao sensor tenho sempre uma resposta que penso ser negativa segundo a biblioteca.

Fica aqui o código da função reset:

uint8_t therm_reset()
{
   uint8_t i;
   //Pull line low and wait for 480uS
   THERM_LOW();
   THERM_OUTPUT_MODE();
   therm_delay(us(480));
   //Release line and wait for 60uS
   THERM_INPUT_MODE();
   therm_delay(us(60));
   //Store line value and wait until the completion of 480uS period
   i=(THERM_PIN & (1<<THERM_DQ));
   therm_delay(us(420));
   //Return the value read from the presence pulse (0=OK, 1=WRONG)
   return i;
}


Os defines são:

#define THERM_PORT PORTC
#define THERM_DDR DDRC
#define THERM_PIN PINC
#define THERM_DQ PC2
/* Utils */
#define THERM_INPUT_MODE() THERM_DDR&=~(1<<THERM_DQ)
#define THERM_OUTPUT_MODE() THERM_DDR|=(1<<THERM_DQ)
#define THERM_LOW() THERM_PORT&=~(1<<THERM_DQ)
#define THERM_HIGH() THERM_PORT|=(1<<THERM_DQ)
/* list of these commands translated into C defines:*/
#define THERM_CMD_CONVERTTEMP 0x44
#define THERM_CMD_RSCRATCHPAD 0xbe
#define THERM_CMD_WSCRATCHPAD 0x4e
#define THERM_CMD_CPYSCRATCHPAD 0x48
#define THERM_CMD_RECEEPROM 0xb8
#define THERM_CMD_RPWRSUPPLY 0xb4
#define THERM_CMD_SEARCHROM 0xf0
#define THERM_CMD_READROM 0x33
#define THERM_CMD_MATCHROM 0x55
#define THERM_CMD_SKIPROM 0xcc
#define THERM_CMD_ALARMSEARCH 0xec



Quando imprimo o caracter "i" dá-me sempre 1, ou seja ou sensor não foi iniciado devidamente.
« Última modificação: 13 de Junho de 2012, 20:01 por zepedro »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: DS18B20 + Atmega88
« Responder #1 em: 13 de Junho de 2012, 19:06 »
Eu já usei esta:
http://www.siwawi.arubi.uni-kl.de/avr_projects/tempsensor/index.html
É bastante completa e funciona bem, mas é mais complicada que o código que tens ai, mas tem exemplos, portanto é simples de usar.
Avr fanboy

Offline zepedro

  • Mini Robot
  • *
  • Mensagens: 17
Re: DS18B20 + Atmega88
« Responder #2 em: 14 de Junho de 2012, 02:13 »
Isso é um bocado completo demais! :P
Tem código a mais! Já conseguir resolver parte do problema, mas ainda assim não consigo por isto a dar. Se alguém souber de uma lib fixe que funcione que diga sff :)

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: DS18B20 + Atmega88
« Responder #3 em: 14 de Junho de 2012, 03:34 »
Os exemplos sim, têm muito código, mas essa biblioteca é 100% funcional e está bem feita, e tem muitas funções auxiliares/ de suporte.
Se não, google is your friend.
Avr fanboy