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);
}
}