ATMEGA32U4 ШИМ выпуск - PullRequest
1 голос
/ 02 мая 2020

Я разрабатываю простую программу для запуска зуммера в AVR на Teensy 2.0 (ATMEGA32u4), и мне очень трудно заставить работать выход PWM. Выход ШИМ находится на PB6, и я могу проверить его в цифровом виде, поэтому меня не беспокоит аппаратная настройка зуммера.

В конце концов, у ШИМ будет 50% рабочий цикл, однако частота будет модулироваться, однако Я больше обеспокоен тем, что в данный момент я не получаю никаких выходных данных.

Я пробовал несколько различных настроек ШИМ и даже запускаю второй таймер для выполнения других задач.

Вот мои настройки и скелет программы:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>


void button_handler(void);

void setup(void)
{
    cli(); // Disable interrupts

    // Set sysclk to 16 MHz
    CLKPR = (1<<CLKPCE); // Prescaler change enable
    CLKPR = 0x00; // Set prescaler to zero

    DDRB = (1<<DDB6); // configure PORT B6 (buzzer) as output

    // initliase timer1
    // Fast PWM, TOP = OCR1A, Update OCR1B at TOP, TOV1 flag set on TOP
    // Clear OC1B on compare match, set OC1B at TOP
    // clkI/O/1 (No prescaling)
    TCCR1A = (1<<COM1B1)|(1<<WGM11)|(1<<WGM10);
    TCCR1B = (1<<WGM13)|(1<<WGM12)|(1<<CS10);
    OCR1A = 1023; // Setup PWM Registers
    OCR1B = 511;    // 50% duty cycle

    sei(); // Enable interrupts
}


int main(void)
{
    setup(); // initialise device

    for (;;)
    {
       // runs led blinking on PORTD, removed for simplicity
    }
}

Очень трудно понять, где я ошибаюсь, поэтому любая помощь будет высоко ценится!

...