Контакт 9 и 10 с различными рабочими циклами

Я хочу контролировать контрастность и подсветку ЖК-дисплея HD44780 с двумя сигналами ШИМ. Я хотел бы использовать PB1 и PB2 (Pin 9 и Pin 10). Что касается моих исследований, то за эти два контакта отвечает timer1. OCR1A и OCR1B отвечают за пульс длина.

С приведенным ниже кодом я получаю частоту 7,823 кГц и рабочий цикл 88%. Но он работает только на PB1. PB2 по-прежнему постоянный 0V. Я использую AtmelStudio, поэтому у меня нет доступа к таким функциям, как pinMode(10, Output)

Как я могу использовать разные рабочие циклы на выводах 9 и 10?

#define F_CPU 16000000UL
#include <avr/io.h>

int main(void)
{
    DDRB |= (1 << DDB1) | (1 << DDB2);
    OCR1A = 900;
    OCR1B = 400;
    TCCR1A |= (1 << COM1A1);
    TCCR1A |= (1 << WGM11) | (1 << WGM10);
    TCCR1B = (TCCR1B & 0b11111000) | (1 << CS10);

}
2 голоса | спросил Albritter 9 PM00000060000005931 2017, 18:02:59

1 ответ


2

Попробовав много вещей, я начал работать. И даже контраст работает непосредственно на сигнале pwm.

#define F_CPU 16000000UL
#include <avr/io.h>
void main(void){
    DDRB = 0x06;
    OCR1A = 200; //Duty cycle for PB1 ~80%
    OCR1B = 100; //Duty cycle for PB2 ~40%
    TCCR1A = 0; //Set TCCR1A to zero. We will configure it manually
    TCCR1A |= (1 << COM1A1) | (0 << COM1A0) | ( 0 << COM1B0) | (1 << COM1B1);
    TCCR1A |= (0 << WGM12) | (0 << WGM11) | (1 << WGM10); 
    TCCR1B = 0; //Set TCCR1B to zero. We will configure it manually
    TCCR1B |= (0 << CS12) | (0 << CS11) | (1 << CS10);
    while(1){

    }
}
ответил Albritter 12 PM00000090000004931 2017, 21:08:49

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132