Hola,
Estoy trabajando en un proyecto de desfase de PWMs, mediante un timer para asi variar el angulo de desfase entre 2 PWMs con el mismo ciclo de trabajo. El gran inconveniente es que esas PWMs deben ser de 15[KHz] y utilizando un contador dentro de la interrupcion Overflow mediante el ISR, y sacando los calculos solo me salen PWMs de 400[Hz] aprox.
mi consulta es si es que estoy empleando mal el codigo o es que el nivel de prosesos por segundos el arduino no los puede realizar.
el codigo es:
#define ledPin 13
int maxdesp=20;
int desp;
int cont_a, cont_b;
int botonA, botonB;
void setup(){
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
pinMode(12,OUTPUT);
pinMode(9,OUTPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
noInterrupts();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 65535; // preload timer 65536-16MHz/1/15000*90
TCCR1B |= (1 << CS10); // 256 prescaler
TIMSK1 |= (1 << TOIE1); // Habilito el desbordamiento
interrupts();
}
ISR(TIMER1_OVF_vect){
TCNT1 = 65535;
digitalWrite(ledPin, digitalRead(ledPin) ^ 1);
if(_BV(TOV1)){
cont_a++;
desp=90;
if (cont_a == 180){
cont_a=0;
}
if (cont_a > 90){
digitalWrite(12,HIGH);
}
if (cont_a < 90){
digitalWrite(12,LOW);
}
cont_b = cont_a + desp;
if(cont_b >= 180){
cont_b=cont_b-180;
}
if (cont_b > 90){
digitalWrite(9,HIGH);
}
if (cont_b < 90){
digitalWrite(9,LOW);
}
}
}
void loop(){
}
Mod2.ino (1013 Bytes)