Как изменить рабочий цикл на ШИМ AVR (сборка - нет C) - PullRequest
0 голосов
/ 30 мая 2019

Я хочу изменить свой рабочий цикл ШИМ с 20% до 70%. Хотя пока я меняю свое значение OCR1AL. Рабочий цикл остается тем же. Это почему? Должен ли я изменить что-то еще? Насколько я понимаю, хотя OCR1A показывает верхнее значение, это единственный параметр (регистр), который я могу использовать для изменения коэффициента заполнения.

.include "m16def.inc"
.cseg

PWM:
    ;input
    ldi r16, 0x00
    out DDRA, r16

    ;output
    ldi r16, 0xff
    out DDRD, r16
    out PORTD, r16

    ldi r20, 0xc1
    out TCCR1A, r20
    ldi r20, 0x01


    out TCCR1B, r20
    ldi r20, 0x00
    out OCR1AH, r20
    ldi r20, 0x33
    out OCR1AL , r20

    in r22, TIFR
    andi r22, 0b00000100
    out PORTD, r22

SW0:

in r23, PINA
cpi r23, 0b11111110
brne SW0

ldi r16, 0x82
in r17, OCR1AL
ADD r16,r17
out OCR1AL, r16
jmp SW0

ldi r16, 0x00
out PORTD, r16

Я использую AVR ATmega16 на частоте 4 МГц

1 Ответ

0 голосов
/ 08 июня 2019

Ваша проблема связана с настройкой таймера. Вы должны проверить это в первую очередь. Если вы хотите использовать 16-битный таймер, вы должны установить настройки таймера с помощью этой конфигурации: Тип: быстрый ШИМ-топ 0xFFFF

Вы можете узнать, как настроить таймер, в таблице данных вашего микроконтроллера.

После этой конфигурации, если вы измените старшие 8 бит, рабочий цикл изменится хорошо.

Я думаю, что вы настроили 8-битный таймер, поэтому вы должны изменить OCR1AL с 0 на 255, чтобы изменить рабочий цикл с 0 до 100 процентов.

...