Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

23/01/2013 #1


Pwm como parametrizar la fecuencia
hola buenas tarde tengo este programa que quiero que me entregue una frecuencia de 33.khz a 370khz cuando meta en la entrada A0 de 0 a 5 volts y como hacer que me lea la instruccion que le de en A1 enseguida les dejo cogido si alguien me puede ayudar se lo agradeceria bastante saludo.
Código:
#include <16f877a.h>
#fuses NOWDT,HS,NOPUT, NOPROTECT,NODEBUG,NOBROWNOUT, BROWNOUT, NOLVP ,NOCPD,NOWRT
#use delay(clock=12000000)
 
void main()

{
   setup_adc_ports(AN0_AN1_AN3);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DIV_BY_1, 64, 1); 
   setup_ccp1(CCP_PWM);
   setup_comparator(NC_NC_NC_NC);
  
   int duty;
   int  j;
   set_adc_channel(0); // elegimos el canal que vamos a leer.
   set_adc_channel(1);
   output_low(PIN_C2);
 
   
  
   while(1)
   {
      for(duty=0; duty<64;  duty++)
      {
        setup_timer_2(T2_DIV_BY_1, duty, 1);
        duty=read_adc(); // leemos la tension en el canal que  elegimos.
        delay_us(20);
        set_pwm1_duty(duty/2); 
      }
       for(j=0; j < 64; j++)
      {
        
         j=read_adc();
         delay_us(20); 
         set_pwm1_duty(j);
         
      }        
   }
}
23/01/2013 #2

Avatar de LaElectronicaMeOdia

la verdad no entiendo lo que quieres hacer pero veo algo raro en tu codigo.

Código:
for(j=0; j < 64; j++)
{

j=read_adc();
delay_us(20); 
set_pwm1_duty(j);

}
ahi utilizas la variable j para leer el ADC y como contador, me parece que tienes un conflicto de valores.
ademas de que lo que varias no es la frecuencia sino el duty(periodo).
23/01/2013 #3


Código:
#include <16f877a.h>
#fuses NOWDT,HS,NOPUT, NOPROTECT,NODEBUG,NOBROWNOUT, BROWNOUT, NOLVP ,NOCPD,NOWRT
#use delay(clock=12000000)
 
void main()

{
   setup_adc_ports(AN0_AN1_AN3);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DIV_BY_1, 64, 1); 
   setup_ccp1(CCP_PWM);
   setup_comparator(NC_NC_NC_NC);
  
   int duty;

   set_adc_channel(0); // elegimos el canal que vamos a leer.
 
   output_low(PIN_C2);
 
   
  
   while(1)
   {
      for(duty=0; duty<64;  duty++)
      {
        setup_timer_2(T2_DIV_BY_1, duty, 1);
        duty=read_adc(); // leemos la tension en el canal que  elegimos.
        delay_us(20);
        set_pwm1_duty(duty/2); 
      }}}
pues en si este es el programa de hecho lo que quiero es variar el duty y la frecuencia lo que me hace bien es la frecuencia que sera este codigo que pongo ahorita y lo que me falta es determinar bien la frecuancia que valla de de 33.khz a 370khz si pudieras ayudarme te lo agradeceria mucho lo estoy haciendo en css
23/01/2013 #4

Avatar de Scooter

No entiendo para que quieres cambiar las dos cosas, lo normal es cambiar solo la proporción.
Si varías la frecuencia ¿como calculas los filtros?
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.