Быстрый ШИМ - ATTiny2313 на OC0A (PB2) - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь отправить сигнал ШИМ на OC0A (PB2) с ATTiny2313, но по какой-то причине на порте B2 ничего не происходит.Мой код выглядит следующим образом:

#define F_CPU 8000000UL

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

/**
 * Initialize fast pwm on PB2 (OC0A)
 */
void pwmInit() {
    // Setup the output for PWM
    DDRB |= (1 << DDB2);

    // Set Timer/Counter0 prescaler to clock/1.
    // At 8MHz this is 8MHz.
    TCCR0B |= (1 << CS00);

    // Set to 'Fast PWM' mode
    TCCR0A |= (1 << WGM01) | (1 << WGM00);

    // Clear OC0A output on compare match, upwards counting.
    TCCR0A |= (1 << COM0A1);

    // If the value '128' is reached, the PWM signal will set to LOW
    OCR0A=128; // 128 = 50% duty cycle
}

void setup() {
    pwmInit();

    DDRB |= (1 << DDB0); // Setup the Output fon port B0
}

int main(void) {
    setup();

    while(1) {
        PORTB |= (1<<PB0);
        _delay_ms(500);

        PORTB &= ~(1<<PB0);
        _delay_ms(500);
    }

    return 0;
}

Светодиод на PB0 мигает, но на осциллографе не отображается сигнал ШИМ (на PB2), а светодиод на PB2 по-прежнему выключен.Я неправильно настроил MCU?

Аналогичный код на ATTiny13A все еще работает.

1 Ответ

0 голосов
/ 02 октября 2018

Хорошо, я случайно выбрал неправильную архитектуру MCU (в моем случае attiny13 вместо attiny2313) при создании проекта в Code :: Blocs.Я решил эту проблему, изменив конфигурацию в ".cbp" и изменив любое attiny13 на attiny2313 (в моем случае в окружении, конфигурации компилятора и компоновщика).

Как я это обнаружил: при попытке установить

DDRD |= (1<<DD5);

для проверки OC0B вместо OC0A в качестве выхода ШИМ, возникает ошибка компилятора, так как DDRD не может быть найден.

...