Как изменить скважность на PWM AVR (сборка - нет C)

Я хочу изменить рабочий цикл ШИМ с 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 МГц.

Вы уже пробовали ту же программу на C?

Martin Rosenau 31.05.2019 10:25

Объясните, пожалуйста, алгоритм изменения OCR1AL при нажатии кнопки? Также, пожалуйста, добавьте полный код инициализации и/или объясните схему подключения кнопки. Почему PA0 должен быть равен 0 и почему PA1-PA7 должен быть равен 1? В любом случае лучше добавить к вашему вопросу полную информацию: как вы пришли к выводу, что это не работает: что вы ожидали, что вы получили.

AterLux 31.05.2019 13:48
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
531
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Другие вопросы по теме