Autor Tema: Convertidores 16f877  (Leído 1583 veces)

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

Desconectado lhyaz

  • PIC10
  • *
  • Mensajes: 11
Convertidores 16f877
« 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!!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Convertidores 16f877
« Respuesta #1 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!!!
El papel lo aguanta todo

Desconectado lhyaz

  • PIC10
  • *
  • Mensajes: 11
Re: Convertidores 16f877
« Respuesta #2 en: 25 de Julio de 2008, 01:30:00 »
ok, tomo nota del mosfet... gracias por el dato!!

un saludo!!

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Convertidores 16f877
« Respuesta #3 en: 25 de Julio de 2008, 02:27:38 »
en un articulo de la pagina de nocturno esta como hacer un DAC ejemplo DAC cuando no tenemos DAC en el micro, saludos
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Convertidores 16f877
« Respuesta #4 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
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....