Autor Tema: Programa para Sensor DS18B20  (Leído 2140 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Programa para Sensor DS18B20
« en: 10 de Septiembre de 2019, 09:16:20 »
Buenas a todos!

estoy intentando medir la temperatura con el sensor DS18B20 a través del micro STM32F4 y que se muestre en un LCD 16x2.
Os muestro el código que he hecho pero la pantalla me muestra "0" por lo que algo hay mal. El pin que utilizo es el E8 del micro STM32F469 de 144 pin. Lo que intento únicamente es eso, mostrar la temperatura. (En mi código hay includes y otras cosillas que no intervienen en esta función porque es para otras cosas)

Espero vuestra ayuda. Saludos.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1295
Re:Programa para Sensor DS18B20
« Respuesta #1 en: 10 de Septiembre de 2019, 14:18:05 »
Que tal kspids,

Veo varios problemas en tu código. El primero es que no le estás dando el tiempo necesario para realizar la conversión. Después de enviar el comando para iniciar una conversión de temperatura (0x44) solo le das 800 us para realizar al operación [usas HAL_Delay(800)] y lo que necesitas es esperar al menos 750 milisegundos (me imagino que lo que intentaste fue esperar 800 ms, pero no es así, solo esperas 800 microsegundos), por lo tanto cuando lees el resultado de la temperatura esta no está lista aún.

El siguiente porblema es que cuando lees el Scratchpad solo estás leyendo los dos primeros bytes que son los que contienen la temepratura. La hoja de datos menciona que debes leer todos los nueve bytes, pero tal vez no sea neceario porque despues regresas y haces un RESET al DS18B20.

Pero en fin el principal problema es que no le das el tiempo para realizar la conversión de temperatura. Recuerda son 750 milisegundos, NO microsegundos.

elreypic.

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:Programa para Sensor DS18B20
« Respuesta #2 en: 11 de Septiembre de 2019, 03:35:49 »
Cierto, se me ha olvidado poner un cero más...
Lo he corregido pero sigue marcando "0", ó 4095 si pongo la resistencia de 4K7...

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1295
Re:Programa para Sensor DS18B20
« Respuesta #3 en: 11 de Septiembre de 2019, 10:43:23 »
Cierto, se me ha olvidado poner un cero más...
Lo he corregido pero sigue marcando "0", ó 4095 si pongo la resistencia de 4K7...

No se si todavía estabas dormido o tus matemáticas no andan muy bien. Jejeje.
Si olvidaste un cero, significa que has colocado 8000 en tu subruitna de delay, eso solo haría un delay de 8 milisegundos. Entiendo que la subrutina de delay está en microsegundos, por lo tanto para hacer una subrutina de 800 milisegundos tienes que:

1ms = 1000us
800ms = xxxxxxus?

saludos

elreypic.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Programa para Sensor DS18B20
« Respuesta #4 en: 11 de Septiembre de 2019, 12:10:44 »
Ademas.... un delay de 800ms ¿?¿??¿? Genial, tengamos al micro haciendo nada por 1 segundo aproximadamente  :D

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1295
Re:Programa para Sensor DS18B20
« Respuesta #5 en: 11 de Septiembre de 2019, 13:52:19 »
Ademas.... un delay de 800ms ¿?¿??¿? Genial, tengamos al micro haciendo nada por 1 segundo aproximadamente  :D
Bueno eso ya lo tendría que cambiar Kspids en su código, pero el sensor de temperatura DS18B20 requiere de 750ms para realizar una conversión de temperatura en su modo default de 12 bits. Este tiempo varía dependiendo de la configuración que se haga del sensor. Pero en el caso de Kspids no realiza ningún cambio en la configuración del sensor, por lo que está realizando la conversión a 12 bits (valor por default), así que el tiempo mínimo de espera son 750ms.

elreypic.

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:Programa para Sensor DS18B20
« Respuesta #6 en: 12 de Septiembre de 2019, 05:15:30 »
Citar
No se si todavía estabas dormido o tus matemáticas no andan muy bien. Jejeje.

La librería HAL_Delay son ms, lo que creo que te ha confundido son los comentarios que hay al lado. Eso es porque cogí el código de un ejemplo y lo adecué a mi librería de tiempos. HAL_Delay(1000); es 1 segundo.

Citar
Ademas.... un delay de 800ms ¿?¿??¿? Genial, tengamos al micro haciendo nada por 1 segundo aproximadamente  :D
Esto es cierto pero no se hacer funcionar mi código mientras que el sensor de temperatura trabaje a parte... entonces quería hacer primero funcionar este sensor y luego dedicarme a saber cómo hacerlo trabajar en paralelo sin que me interrumpa mis otras funciones.


Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1295
Re:Programa para Sensor DS18B20
« Respuesta #7 en: 12 de Septiembre de 2019, 10:39:33 »
Kspids,

Entonces las rutinas que tienes para comunicarte con el DS18B20 tiene mal los tiempos. POrque si dices que la subrutina HAL_Delay es en milisegundos, entonces tu función de ds18b20_init tiene los tiempos incorrectos:

Código: [Seleccionar]
uint8_t ds18b20_init (void)
{
   gpio_set_output ();   // set the pin as output
   HAL_GPIO_WritePin (GPIOE, GPIO_PIN_8, 0);  // pull the pin low
   HAL_Delay(480);   // delay according to datasheet [b]---> Desde que está mal porque deberían ser 480 microsegundos y no 480ms[/b]

   gpio_set_input ();    // set the pin as input
   HAL_Delay(80);    // delay according to datasheet[b] --->Este tiempo también está mal deberían ser 80 microsegundos y no 80ms[/b]

   if (!(HAL_GPIO_ReadPin (GPIOE, GPIO_PIN_8)))    // if the pin is low i.e the presence pulse is there
   {
      HAL_Delay(400);  // wait for 400 us [b]---> Este de igual manera aunque tienes el comentario que son microsegundos no lo son[/b]
      return 0;
   }

   else
   {
      HAL_Delay(400); [b]---> Deben ser microsegundos[/b]
      return 1;
   }
}

Basado en esto, entonces, en cualquier función que estás usando HAL_Delay para la comunicación con el sensor, esos tiempos estarían incorrectos ya que como mencionas la tueina es en ms y según el datasheet, los tiempos deben ser de microsegundos.

elreypic.

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:Programa para Sensor DS18B20
« Respuesta #8 en: 13 de Septiembre de 2019, 08:51:45 »
Eso sí que es cierto y no había caído...
Gracias! voy a ver si encuentro librerías de us porque esta no deja tomar tiempos menores a 1ms.



 

anything