Светодиод Arduino PWM с замиранием в сборке
Я пишу программы Arduino UNO (=ATmega328P-PU) в сборке для экономии памяти, поэтому я использую avra.exe (так же, как avrasm32 от atmel studio) для компиляции и загрузки avrdude, и простые программы, такие как мигание, работают нормально. Но теперь я попытался наполовину осветить светодиод с помощью шим. Я проверил свой код на наличие ошибок, но не нашел ни одной, и индикатор просто загорелся. Я тоже проверил проводку. Меня поражает :c. Вот мой код pwm.asm:
.nolist
.include "m328pdef.inc"
.list
.cseg
.org 0x00
rjmp start
.org 0x34
start: sbi ddrb, 5 ;pin 13
sbi portb, 5 ;pin 13 on, just to compare with the PWMed led
sbi ddrd, 5 ;pin 5 pwm
ldi r16, 0b00100011 ;fast pwm mode, non inverted pwm at oc0b = pin 5 (right?)
out tccr0a, r16 ;I'm using Timer0
ldi r16, 0b00000001 ;no prescaler
out tccr0b, r16
ldi r16, 128 ; duty cycle = 50%
out ocr0b, r16
loop: rjmp loop
@Frazzo, 👍1
Обсуждение2 ответа
Лучший ответ:
Я попробовал вашу программу, после преобразования ее в синтаксис GNU-as. Он работает так, как и ожидалось, как видно на экране. Ваша проблема может заключаться просто в том, что разница между 50% и 100% не очень очевидна для глаза из-за его логарифмического восприятия.
Понял! я попытался установить рабочий цикл на 16 (рабочий цикл 6,25%) и заметил разницу. Я не знал о его логарифмическом восприятии. Спасибо!, @Frazzo
вы должны установить таймеры PRR на
начало: lds r16, PRR и r16,0b10010111 ; PRTIM2 | PRTIM0 | PRTIM1 sts PRR,r16
Мне трудно понять это как ответ на вопрос, на который есть принятый ответ, в котором ничего не говорится о PRR. PRR по умолчанию равен 0x00 при сбросе, то есть по умолчанию ничего не отключается для уменьшения мощности. Это не изменяется загрузчиком или его кодом. Зачем им понадобилось менять PRR?, @timemage
- Можно ли сгенерировать точный тактовый импульс 15 кГц с помощью ардуино?
- 4-битный счетчик вверх и вниз
- Светодиод с кнопочным управлением Arduino со сборкой AVR
- Сборка Arduino uno AVR со светодиодами
- ШИМ-управление, как остановить мерцание светодиода?
- генерировать два сдвинутых по фазе ШИМ-импульса, запускаемых внешним сигналом с частотным разделением, с помощью Arduino uno?
- ATmega328P - проблема с использованием таймера 2 для генерации тона
- Arduino включение/затухание 5 светодиодов, схема действия
Попробуйте написать код на C и посмотрите, получите ли вы какие-либо другие выходные данные, используя "avr-objdump-S <filename>.elf". Исходя из моих ограниченных знаний о сборке, код выглядит как файл. Что произойдет, если вы подключите светодиод наоборот (VCC-резистор-светодиод-шим-вывод против шим-вывода-резистор-светодиод-GND)? Наши глаза не воспринимают различные уровни освещенности в линейной шкале., @Gerben