TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: JulioCarrillo en 12 de Junio de 2013, 19:35:29

Título: Sensor DS18B20 y display de 7 segmentos triple
Publicado por: JulioCarrillo 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);
   }
  }
Título: Re: Sensor DS18B20 y display de 7 segmentos triple
Publicado por: Darkman_A 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.
Título: Re: Sensor DS18B20 y display de 7 segmentos triple
Publicado por: JulioCarrillo 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  ((:-))