TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: lhyaz en 23 de Julio de 2008, 15:39:19

Título: Convertidores 16f877
Publicado por: lhyaz en 23 de Julio de 2008, 15:39:19
Hola a todos....

Estoy tratando de hacer un circuito de prueba con el pic 16f877, el circuito debería leer un voltaje, convertirlo de AD y DA para obtener un voltaje a la salida. Se como configurar el AD, pero nunca he trabajado con el DA... alguien me puede ayudar con el programa??? 

Gracias, un saludo!!
Título: Re: Convertidores 16f877
Publicado por: MLO__ en 23 de Julio de 2008, 23:44:45
Hola.

El micro tiene un conversor AD y es el PWM, debes configurarlo con el timer 2 para el pre escaler y asignar el duty cicle en funcion de la conversion, normalmente se le pasa el valor de la conversion directamente.

Obviamente, la salida del PWM debe ir a un transistor (un MOSFET preferiblemente) para poder conectarle una buena carga.

Saludos

EDITO: Es DA y no AD .. mis dedos no responden muchas veces!!!
Título: Re: Convertidores 16f877
Publicado por: lhyaz en 25 de Julio de 2008, 01:30:00
ok, tomo nota del mosfet... gracias por el dato!!

un saludo!!
Título: Re: Convertidores 16f877
Publicado por: scientist en 25 de Julio de 2008, 02:27:38
en un articulo de la pagina de nocturno esta como hacer un DAC ejemplo DAC (http://www.micropic.es/index.php?option=com_content&task=view&id=63&Itemid=1) cuando no tenemos DAC en el micro, saludos
Título: Re: Convertidores 16f877
Publicado por: scientist en 25 de Julio de 2008, 02:42:19
aqui pego un programa que lee el valor analogico, y el valor lo manda como el ancho de pulso del pwm, asi, el pwm variara dependiendo del valor analogico

Código: [Seleccionar]
long duty;

int grados_temperatura;

 
void toma_adc(void){
set_adc_channel(0);
delay_ms(1);
duty= read_adc();
delay_ms(1);

}

void main()
{

   setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DIV_BY_8,0x4F,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(TRUE);
   setup_ccp1(CCP_PWM);
   set_tris_a(0xFF);
   
   // TODO: USER CODE!!

   do{
   toma_adc();
   output_b(duty);
   set_pwm1_duty(duty);
   
   }while(true);

}

espero te sirva,saludos