Hola,
Si realizando este programa, veo que el led va cambiando de luminosidad, ¿porque cuando lo coloco en el programa del control PID no funciona?, ¿tiene algo que ver con las interrupciones que uso de los timers 0 y 1? Posteo el código:
#include "C:\15 - Program Files C\Contol_PID.h"
#include <max187.c> // Subrutina de tratamiento conversor A/D MAX187.
#include <hd44780u.c> // Subrutina de tratamiento display 16x2 HD44780U.
#include <max4534.c> // Subrutina de tratamiento multiplexor MAX4534.
#use fast_io (A) // Directiva para el manejo normal de puertos.
#use fast_io (B)
#use fast_io (C)
#use fast_io (D)
#use fast_io (E)
#byte port_a=0X05 // Declarando la direccion de los puertos.
#byte port_b=0X06
#byte port_c=0X07
#byte port_d=0X08
#byte port_e=0X09
int periodo=255; //Variable para el periodo
int duty=0; //Variable para la anchura del pulso
int i=0;
main()
{
output_c(0x00); //Borra las salidas
set_tris_c(0xb1111101); //RC2 salida
//El módulo CCP1 actúa en el modo PWM con salida de señal por RC2/CCP1
//El TMR2 trabaja con un preescaler 1:1 por lo que con una frecuencia de 4MHz evoluciona
//cada 1uS (4*Tosc)
setup_timer_2(T2_DIV_BY_16,periodo-1,1); //Carga el periodo
lcd_init();
lcd_putc("\f");
for(;
{
lcd_gotoxy(1,1);
printf(lcd_putc,"%i",i);
lcd_gotoxy(1,2);
printf(lcd_putc,"%i",duty);
CCP_2_LOW=duty; //Carga la anchura del pulso
setup_ccp2(CCP_PWM); //Modo PWM para el CCP
output_high(PIN_B7); // Se activa el rele
delay_ms(50);
output_low(PIN_B7);
if(duty>=124)
{
duty=0;
output_high(PIN_B5); // Se activa el rele
delay_ms(50);
output_low(PIN_B5);
}
if(duty>=124) i=0;
i++;
duty++; //apunta a siguiente frec
}
}
veo que funciona, pero sigo sin entender que hago mal en el otro programa para no ver el PWM
Un saludo,