#include <stdint.h> /* usamos os tipos uint8_t e uint16_t */
#define __AVR_ATmega2560__ /* programa para o microcontrolador ATmega2560*/
#include <avr/io.h> /* definições das entradas e saÃdas */
/**
* @brief Configura TC0 para gerar um sinal PWM em OC0B (terminal 4 da placa de
* desenvolvimento, ou terminal PG5), com um ciclo de trabalho de 30 % e
* a frequência de 1 kHz
*/
void TC0_configura(void) {
TCCR0A = 0x23; // COM0A[1:0]=00 COM0B[1:0]=10 reservado[1:0]=00 WGM0[1:0]=11
TCCR0B = 0x0B; // FOC0A = 0 FOC0B = 0 reservado[1:0]=00 WGM0[2]=1 CS0[2:0] = 011
TIMSK0 = 0x00; // reservado[4:0]=00000 OCIE0B=0 OCIE0A=0 TOIE0=0
OCR0A = 249; // valor de TOP = 249
OCR0B = 75; // COMP=75, produz um sinal com ciclo de trabalho de 30 %
DDRG |= (1 << DDG5); // fazemos OC0B uma saÃda
}
/**
* @brief Configuramos o TC0 para gerar um sinal PWM em OC0B, com frequência de
* 1 kHz e ciclo de trabalho de 30 %.
* @return int. O procedimento principal nunca retorna.
*/
int main(void) {
TC0_configura(); // Configuramos o TC0 para gerar um sinal PWM
while (1) // laço infinito
;
return 0;
}