Buenas Pocher y demas foreros!!
Muchas gracias, ya me di cuenta de mi error, el que no sabia era el del timer2 el 61 que me decias, pero ya lo he cambiado, aunque no se el porque...
He conseguido hacer esto, pero al simular si le doy una vez al RB0 dependiendo del tiempo que lo este pulsando me sube hasta el 100% del duty, o hasta casi el 100%, ya se cual es el error, pero no se como solucionarlo. El fallo esta en que depende del tiempo que lo mantanga pulsado, durante ese tiempo me eincrementa el duty constantemente, por eso va directamente al 62.5, que es el 100%. Supongo que se solucionaria con delays, o haciendo que solo incremente una vez cada vez que lo pulse, aunque lo tenga pulsado durante un minuto (exagerando, es para que se vea lo que quiero decir). Claro con el RB1 pasa lo mismo logicamente!
Si me pudieras ayudar de alguna manera por favor!!!
Muchas gracias de todas formas y saludos!!!
+++++++++++++++++++++++++++++++++++++++++++++++
#include <16f873.h>
#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, WRT
#byte portB=0x06
#byte portC=0x07
#bit RB0 = 0x06.0 //cada pulsacion aumenta 5 unidades el duty cycle
#bit RB1 = 0x06.1 //cada pulsacion decrementa 5 unidades el duty cycle
int CalcularDuty(void)
{
//Aqui es donde testeo el puerto B para ver si se ha tocado o RB.0 o RB.1, si es el primero aumento 5 unidades
// y si es el segundo decremento 5 unidades
int duty_PWM;
if(RB0==1)
{
if(duty_PWM>=62.5)
duty_PWM=62.5;
else
duty_PWM=duty_PWM+5;
}
if(RB1==1)
{
if(duty_PWM>=5)
duty_PWM=duty_PWM-5;
else
duty_PWM=0;
}
//duty_PWM=31.25; //pongo 31.25 que es el 50% de duty, pero tendria que depender de los pulsadores
return duty_PWM;
}
main(void){
int duty_PWM;
// (4/4000000)*1*(62+1)=0.001seg 1KHz--1ms
duty_PWM=0; //inicializo duty=0 para que inicialmente sea 0
setup_timer_2(T2_DIV_BY_16, 61, 1);
// seleccionamos PWM para el módulo CCP
setup_ccp1 (CCP_PWM);
while(1){ //bucle infinito.
duty_PWM=CalcularDuty();
set_pwm1_duty(duty_PWM);
}
}