MadDoc Опубликовано 21 августа, 2017 Поделиться Опубликовано 21 августа, 2017 Начинаю осваивать микроконтроллеры, так что сильно не бейте... Не запускается симуляция ШИМ в Proteus Код: #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/sleep.h> #include <util/delay.h> int main() { DDRB=(0<<DDB4)|(1<<DDB3)|(0<<DDB2)|(1<<DDB1)|(1<<DDB0); PORTB=(0<<PB4)|(0<<PB3)|(0<<PB2)|(0<<PB1)|(0<<PB0); TCCR0A = (1 << COM0A1)|(0 << COM0A0)|(1 << WGM01)|(1 << WGM00); TCCR0B = (1 << WGM02)|(0 << CS02)|(1 << CS01)|(1 << CS00); TIMSK0 = 0x00; TCNT0 = 0x00; OCR0A = 0x5F; while (1) { //OCR0A++; //_delay_ms(100); } ; return 0; } Схема: Компилятор - WinAVR; Proteus 8.6 SP 2 Проект в Proteus прилагается. При переключении COM0A1 COM0A0 в режим "Toggle OC0A on Compare Match" - работает как генератор прямоугольных импульсов с изменяемой частотой, в зависимости от OCR0A. Подскажите, что не так, а то уже и по колесам стучал и лобовое стекло протирал... TEST.pdsprj 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alexeyslav Опубликовано 21 августа, 2017 Поделиться Опубликовано 21 августа, 2017 Так так и должно быть, в этом режиме ты генерируешь меандр т.к. состояние вывода OC0A будет меняться на противоположное при достижении условия совпадения в регистре сравнения. Этот режим предназначен для меандра переменной частоты(пищалки и т.д.) 0 Учение - изучение правил. Опыт - изучение исключений. Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
MadDoc Опубликовано 22 августа, 2017 Автор Поделиться Опубликовано 22 августа, 2017 Возможно я не совсем корректно сформулировал вопрос: В режимах "Phase Correct PWM Mode" (WGM02:0 = 5) и "Fast PWM Mode" (WGM02:0 = 7) при установке (COM0A1:0 = 2 или 3 - "Clear OC0A on Compare Match, set OC0A at TOP" и "Set OC0A on Compare Match, clear OC0A at TOP") ничего не происходит. Вывод ШИМ OCA устанавливается или сбрасывается один раз в зависимости от начальной установки порта и больше ничего не происходит. Счетчик считает от 0 до OCR0A и сбрасывается хотя по даташиту должно быть так: Скрытый текст Phase Correct PWM Mode The phase correct PWM mode (WGM02:0 = 1 or 5) provides a high resolution phase correct PWM waveform generation option. The phase correct PWM mode is based on a dual-slope operation. The counter counts repeatedly from BOTTOM to TOP and then from TOP to BOTTOM. TOP is defined as 0xFF when WGM2:0 = 1, and OCR0A when WGM2:0 = 5. In non-inverting Compare Output mode, the Output Compare (OC0x) is cleared on the Compare Match between TCNT0 and OCR0x while upcounting, and set on the Compare Match while down- counting. In inverting Output Compare mode, the operation is inverted. Fast PWM Mode The counter counts from BOTTOM to TOP then restarts from BOTTOM. TOP is defined as 0xFF when WGM2:0 = 3, and OCR0A when WGM2:0 = 7. In non-inverting Compare Output mode, the Output Compare (OC0x) is cleared on the Compare Match between TCNT0 and OCR0x, and set at BOTTOM. In inverting Compare Output mode, the out-put is set on Compare Match and cleared at BOTTOM. В AVR Studio поведение программы аналогичное Proteus. При программировании ШИМ в Bascom-AVR - ШИМ в Proteus ведет себя корректно. Подскажите, почему так: это глюк Proteus или я не учитываю что-то в регистрах? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Alexeyslav Опубликовано 23 августа, 2017 Поделиться Опубликовано 23 августа, 2017 Хм... тогда не знаю, вроде всё должно работать. 0 Учение - изучение правил. Опыт - изучение исключений. Ссылка на комментарий Поделиться на другие сайты Поделиться
Yurkin2015 Опубликовано 24 августа, 2017 Поделиться Опубликовано 24 августа, 2017 В 8/22/2017 в 10:33, MadDoc сказал: Счетчик считает от 0 до OCR0A потому что у Вас все три бита WGM установлены в 1, т.е. WGM2:0 = 7 Надо бит WGM02 установить в 0. Если сделать так TCCR0B = (0 << WGM02)|(0 << CS02)|(1 << CS01)|(1 << CS00) то счётчик будет считать до 0xFF, и всё заработает как надо. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
MadDoc Опубликовано 26 августа, 2017 Автор Поделиться Опубликовано 26 августа, 2017 Спасибо откликнувшимся. Тему можно закрывать. Сам тоже доехал... Не правильно истолковал даташит. При WGM02=0 Phase Correct PWM Mode: счетчик считает от 0 до FF и от FF до 0 при совпадении значения с OCR0A происходит переключение вывода OCA. Fast PWM Mode: счетчик считает от 0 до FF и сбрасывается в 0 при совпадении значения с OCR0A и при сбросе происходит переключение вывода OCA. При WGM02=1 Phase Correct PWM Mode и режим "Toggle OC0A on Compare Match": счетчик считает от 0 до OCR0A и от OCR0A до 0 при совпадении значения с OCR0A происходит переключение вывода OCA. Fast PWM Modeи и режим "Toggle OC0A on Compare Match": счетчик считает от 0 до OCR0A и сбрасывается в 0 при совпадении значения с OCR0A происходит переключение вывода OCA. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.