Boa noite pessoal, gostaria muito da ajuda de vocês. Estou tentando desenvolver um codigo para gerar pulsos com duração de 10 ms, porém eles devem seguir uma sequencia conforme a figura abaixo.
eu já utilizei algumas interrupçoes mas a sequencia tem que ser está pois depois vou utilizar um subtrator com AmpOp, para criar uma quadrada bifásica.
eu tentei o código abaixo:
#define F_CPU 16000000
#define set_bit(reg,bit) (reg |= (1<<bit))
#define reset_bit(reg,bit) (reg &= ~(1<<bit))
#include <avr/io.h>
#include <avr/interrupt.h>
int counter1;
int counter2;
ISR(TIMER0_OVF_vect)
{
counter1++; // counter é minha frequencia
if(counter1 == 49) // o que está em parenteses pode ser uma variavel para a Duração dos pulsos
{
PORTB = 0x03; //fase positiva canal 01 e 02
PORTD = 0x00; //fase negativa canal 01 e 02
counter1 = 0x00;
}
}
ISR(TIMER1_OVF_vect)
{
counter2++;
if(counter2 ==60)
{
PORTB = 0x00; //fase positiva canal 01 e 02
PORTD = 0x03; //fase negativa canal 01 e 02
counter2 = 0x00;
}
}
int main(void)
{
cli();
DDRB |= (1<<0); //O PB0 será saída digital
DDRB |= (1<<1); //O PB1 será saída digital
DDRD |= (1<<0); //O PD0 será saída digital
DDRD |= (1<<1); //O PD1 será saída digital
PORTB &= ~(1<<0); //Inicia o PB0 em nível low
PORTB &= ~(1<<1); //Inicia o PB1 em nível low
PORTD &= ~(1<<0); //Inicia o PD0 em nível low
PORTD &= ~(1<<1); //Inicia o PD1 em nível low
TCNT0 = 0X00;
TCNT1 = 0X32;
TCCR0B = 0X04;
TCCR1B = 0X01;
TIMSK0 = 0x01;
TIMSK1 = 0X01;
sei(); //Habilitar a interrupção global
while (1)
{
}
}
Outra dúvida, é possivel o timer 1 trabalhar com overflow e comparação ao mesmo tempo?