Autor Tema: Sensor DS18B20 y display de 7 segmentos triple  (Leído 1847 veces)

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

Desconectado JulioCarrillo

  • PIC10
  • *
  • Mensajes: 6
Sensor DS18B20 y display de 7 segmentos triple
« en: 12 de Junio de 2013, 19:35:29 »
Eh estado experimentando con los displays que tienen mas de 2 digitos en común de ánodo y cátodo, en este caso tengo un display triple de cátodo común que me debe mostrar la temperatura real del sensor DS18B20. Si me imprime la temperatura pero se ve muy baja la intensidad y hace un parpadeo que no hace visible el dato del digito de las decenas y centenas (por si acaso) solamente las unidades se ven fijas y al variar la temperatura si varia el display pero los digitos de decenas y centenas siguen con parpadeo. Agradecería si alguien ah tenido el mismo inconveniente, incluso uso transistores npn para activar los digitos, si es software agradezco comentarios, dejo el codigo:

#include <16F886.h>
#fuses INTRC_IO,NOWDT,NOPUT,NOMCLR,NOPROTECT,NOCPD,NOBROWNOUT,NODEBUG,BORV40
#use delay(internal=8M)

#define ONE_WIRE_PIN PIN_A0
#include <onewire.h>


byte const display_catodo[10]={0x3f,0x06,0x5b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0 1 2 3 4 5 6 7 8 9 *Catodo Común
//byte const display_anodo[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18}; //0 1 2 3 4 5 6 7 8 9 *Ánodo Común
int temp=0;//setpoint=0;
int unidades,decenas,centenas;

void main(){
SETUP_ADC_PORTS(NO_ANALOGS);
SETUP_ADC(ADC_OFF);

int t_centenas=(0x04);// t_decenas(0x04);
int t_decenas=(0x02); //t_decenas=(0x7D); 
int t_unidades=(0x01);  //t_unidades=(0x7E); 

set_tris_c(0x00); //set_tris_b(0x00);
//set_tris_b(0x00); // set_tris_b(0xFF);

while(true){
temp=ds1820_read();
centenas=(temp/100);
decenas=(temp-(centenas*100))/10;
unidades=temp-(centenas*100)- (decenas*10);

   
   output_b(t_unidades);
   output_c(display_catodo[centenas]);
   output_c(0x00); //output_b(0x00);*/

   output_b(t_decenas);
   output_c(display_catodo[decenas]);
   output_c(0x00); //output_b(0x00);
   
   output_b(t_centenas);
   output_c(display_catodo[unidades]);
   output_c(0x00); //output_b(0x00);
   }
  }
"La diferencia entre un hombre ordinario y un hombre esta en el extra"

Desconectado Darkman_A

  • PIC18
  • ****
  • Mensajes: 288
Re: Sensor DS18B20 y display de 7 segmentos triple
« Respuesta #1 en: 12 de Junio de 2013, 22:41:14 »
Hola.
Si estas multiplexando el display quizas tenga un problema con el timming. Es decir, no estas respetando los tiempos correctos para que los digitos se visualicen bien.
No veo ninguna demora en el codigo.Ponele una demora entre caracter y caracter en esta parte del codigo que transcribo. No se que valor debe llevar, juga un poco con los tiempos. Si fuera assembler lo podria calcular, pero como es C la demora de cada instruccion depende de como este implementada.

   output_b(t_unidades);
   output_c(display_catodo[centenas]);
   output_c(0x00); //output_b(0x00);*/

   output_b(t_decenas);
   output_c(display_catodo[decenas]);
   output_c(0x00); //output_b(0x00);
  
   output_b(t_centenas);
   output_c(display_catodo[unidades]);
   output_c(0x00); //output_b(0x00);
   }

Una consulta de puro curioso. ¿Porque tenes mezclado los nombres de variables centenas y unidades  (te las marco en color)? ¿Tiene que ser asi o es un error?. No he mirado tu codigo en profundidad.
Saludos.
« Última modificación: 12 de Junio de 2013, 22:43:49 por Darkman_A »

Desconectado JulioCarrillo

  • PIC10
  • *
  • Mensajes: 6
Re: Sensor DS18B20 y display de 7 segmentos triple
« Respuesta #2 en: 12 de Junio de 2013, 22:59:53 »
Si es un error, estas en lo cierto. Ok son demoras,que me faltarían? Lo intentare amigo y escribo que fue lo que paso. Gracias  ((:-))
"La diferencia entre un hombre ordinario y un hombre esta en el extra"