#define __ATmega2560__
#define __AVR_ATmega2560__
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#include <stdint.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdbool.h>
#include <stdint.h>
#include <util/delay.h>
#include <stdint.h>
#include <stdlib.h>
#include <avr/interrupt.h>
/**
* @brief Configura TC1 para gerar um sinal PWM em OC1A (terminal 11 da placa de
* desenvolvimento, ou terminal PB5). Usamos o modo 10, PWM com fase corrigida,
* para gerar um sinal de 50 Hz
*/
void config_TC1 (void){
//Modo 10
TCCR1A = 0x82; // COM1A[1:0]=10 COM1B[1:0]=00 COM1C[1:0]=00 WGM1[1:0]=10
TCCR1B = 0x12; // ICNC1=0 ICES1=0 reservado[0]=0 WGM1[3:2]=10 CS0[2:0] = 010 N=8
TCCR1C = 0x00; // FOC0A = 0 FOC0B = 0 FOC0C = 0 reservado[4:0]=00000
TIMSK1 = 0x00; // reservado[1:0]=00 ICIE1=0 reservado[0]=0 OCIE1C=0 OCIE1B=0 OCIE1A=0 TOIE1=0
ICR1 = 20000; // valor de TOP = 20000
OCR1A = 500; // valor de COMP = 500. Inicialmente th = 500us
DDRB |= (1 << DDB5); // fazemos OC1A uma saída (pino 11)
}
int main (void){
config_TC1();
while(1){
_delay_ms(1000); // aguardamos 1 s
OCR1A = 2400; // COMP=2400. Geramos um sinal de 50 Hz com th=2400us
_delay_ms(1000); // aguardamos 1 s
OCR1A = 500; // COMP=500. Geramos um sinal de 50 Hz com th=500us
}
return 0;
}