MadDoc

Аппаратный ШИМ на Attiny13 и Proteus

6 сообщений в этой теме

MadDoc    1

Начинаю осваивать микроконтроллеры, так что сильно не бейте...

Не запускается симуляция ШИМ в 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;
 }

Схема:

599ad14c7cad5_.thumb.jpg.958fd10082f4015c140e83184d90c850.jpg

Компилятор - WinAVR; Proteus 8.6 SP 2

Проект в Proteus  прилагается.

При переключении COM0A1 COM0A0 в режим "Toggle OC0A on Compare Match" - работает как генератор прямоугольных импульсов с изменяемой частотой, в зависимости от OCR0A.

Подскажите, что не так, а то уже и по колесам стучал и лобовое стекло протирал...:(

TEST.pdsprj

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alexeyslav    628

Так так и должно быть, в этом режиме ты генерируешь меандр т.к. состояние вывода OC0A будет меняться на противоположное при достижении условия совпадения в регистре сравнения. Этот режим предназначен для меандра переменной частоты(пищалки и т.д.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
MadDoc    1

Возможно я не совсем корректно сформулировал вопрос:

В режимах "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  или я не учитываю что-то в регистрах?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Yurkin2015    297
В 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, и всё заработает как надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
MadDoc    1

Спасибо откликнувшимся. Тему можно закрывать.

Сам тоже доехал... Не правильно истолковал даташит.

При 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Сообщения

    • Продаются 2 корпуса от ресиверов BBK AV-220. Первый полностью выпотрошен, но дисплей, кнопки/крутилки/болтики/радиаторы и подставки под них все на месте. Где то в кладовке может что и осталось от основной платы. Комплектность второго на фото - не хватает основного трансформатора и платы усилителя. Основная плата, входы/выходы, декодер, контроллер дисплея, крутилки/кнопки/болтики  - все на месте.  Индикация рабочая 100%. Ссылку на сервис мануал могу дать, если кто то задумает дисплей и регуляторы под свои задачи запрограммировать и  использовать.   По конструкции корпуса очень неплохие - толстый металл, вся обвеска снимается без проблем, останется только днище на ножках. Крышка со сплошной перфорацией. Когда то в аналогичном жила ЭА2014 - вентиляции хватало вполне, места с избытком.   По ценам - первый экземпляр 1500, Этот пусть будет 2500. Оба сразу отдам за 3500. Доставка на покупателе. По доставке - КИТ или могу выложить на Авито и получите по Авито.Доставка. Находятся в Москве.
    • Так что НОВОГО позволяет новая теория по сравнению со старой?  Ну вот нафига мне вычисление хорошо известного "Пи", но неким новым способом, если синус угла даже в военное время все-равно не достигнет четырех? А что меняет приставка "термо-"? В ядра я не имею оборудования лезть, поэтому квантовые уровни меня практически не интересуют, а что касается физического мира (до атомов-молекул), так вся энергетика (что гидро-, что угле- (в т.ч. угле-водородных) носителей) основана лишь на силах гравитации и солнечного излучения, так что все остальные преобразования на пути к розетке это лишь преобразования. 1. Так что ваши изыскания позволяют достичь в области электрогенерации (согласно названию темы)? 2. Изложите закон "о двух иерархиях уровней энергий" сделав это на качественном уровне, словами, как сэр Ньютон еще 300 лет назад делал.
    • Вечером покажу после работы, подавал сигнал с телефона (Тон-генератор) Забыл вчера по фоткать...
    • Пара корпусов "Надел-75", фото которых в постах выше, ещё есть....
    • Если минимальная подготовка включает в себя способность отличать ток от напряжения то скриншот будет вполне понятен.  Вам удобней схема загромождённая "окошечками" с напряжениями и токами, мне нет. Когда схема состоит из 3-х 5-ти деталей ещё терпимо, а когда элементов сотни что делать?  R8 и R9 разделены конденсатором и на режим по постоянному току не как не влияют, а по "переменке" так вообще С7 не даёт никаких шансов на что то повлиять. Так что с Вашего позволения я продолжу её "не замечать".