• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!
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

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


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

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Alexeyslav    590

Так так и должно быть, в этом режиме ты генерируешь меандр т.к. состояние вывода 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    274
В 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 смайлов.

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

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

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

Загрузка...

  • Сообщения

    • Судя по тому как по мере зарядки повышается напряжение на USB девочке, она подключена прямо к аккумулятору через штатный выключатель. Как говорится, пора бы уже привыкнуть. Да, вставлял разобранный USB мальчик и измерял. Саму колонку не разбирал, гарантия две недели.
    • Быть такого не может, или уж совсем друзья ваши охренели?
    • При наличии аппаратного SPI не придется. Но тактовая - да, должна быть высокой.

    • Собрал оба канала, вчера вечером проводил запуск с лампочкой. Интегратор OPA134PA, транзисторы NJW, MJE, КТ850, а также KSP42TA вместо MPSA42. Оба канала явного коротыша не показали, лампа вспыхнула и погасла в обоих случаях. Но на одном канале постоянка 0,3 вольта висит, что показалось в пределах нормы. На другом канале вообще 3 вольта, хотя собирал оба канала параллельно, и они должны быть одинаковы. Решил подать полное напряжение на канал, где на выходе 0,3, то есть включиться уже без лампы на +/-45 вольт. В результате на выходе оказалось почти полное отрицательное напряжение питания, -42 вольта. Номиналы резисторов и транзисторы устанавливал в соответствии с обозначениями на шелкографии. Надеюсь, что в ней ошибок нет, хотя при сборке ОМ2 я сталкивался с тем, что 2 резистора на шелкографии были перепутаны по номиналам относительно схемы. Но там после перепайки всё заработало.  Понятно, что надо теперь смотреть все компоненты на соответствие со схемой, но если есть у кого-то предположения, где вероятнее всего косяк, рад был бы услышать. А то не хочется выпаивать половину элементов... Спасибо.
    •   Это как? Или все таки речь про разные бп???
    • какие-то нестыковки у тебя. а ты ставишь задержку 5 мкс перед чтением результата.
    • Вот как я доработал данную акустику. Изготовил новые разделительные фильтры из серьезного провода(2,0мм и 1,0мм) и нормальных конденсаторов . Фильтры рассчитал и изготовил по этим рекомендациям  http://baseacoustica.ru/raschet/16-raschet-filtrov-akusticheskih-sistem/12-raschet-filtrov-trehpolosnyh-gromkogovoritelej.html. Проклеил корпус клеем ПВА по всему периметру для герметичности. Поставил четыре распорки из березовых круглых брусков для увеличения жесткости корпуса, распорки вклеил на ПВА и снаружи притянул черными саморезами по дереву. Внешний вид они не испортили, так как сделаны впотай заподлицо и практически не видны.А на лицевой стороне головки саморезов закрылись декоративными кольцами динов. Корпус изнутри заполнил стнтепоном . Чтобы синтепон не попадал на мембрану НЧ дина окна были заклеены сеточкой. Вокруг фазоинвертора сделал огороженное пространство проволокой , также для того чтобы не попадал туда синтепон. посадочные фланцы динов промазал герметиком. Каркасы катушек изготовил из стеклотекстолита 5мм.- это щеки. Центр - канализационная труба на 50мм. Это большие фильтры. Маленькие катушки изготовлены из пластиковых барабанов от ленты "фум". Каркасы скреплены суперклеем. Монтаж фильтра выполнен на щеках больших катушек на медных шпильках (из того же эмаль провода, предварительно очистив эмаль). Соединение выполнено акустическим проводом 1,5кв. Сначала сделал отду колонку чтобы сравнить со старой. Что можно сказать : звук ощутимо улучшился. Во первых значительно уменьшилась "каша" и жесткость звучания СЧ и ВЧ, стал четче слышен каждый инструмент в миксе, и даже появилась локализация партий инструментов в пространстве. Бас стал более ровный, без выскочек отдельных нот, ну и исчез скрип корпуса на большой мощности. Измерения АЧХ не проводил но на слух есть небольшой горбик на 500Гц , но это не сильно напрягает, нужно немного досогласовать СЧ головку, может делитель поставить, середины теперь немного лишко, но не критично.Считаю что доработка стоила того, и данная акустика имеет свой потенциал. Вот импровизированный фотоотчёт. Позже выложу фото как вейчас выглядят, на настоящий момент всборе не сфоткал. Колонкам уже 19 лет. Все динамики целые. За все это время слушали и громко и тихо и очень громко, музыку разную, в основном рок, Хард-рок, Хеви. Усилитель Technics SU-V620 100Вт. на канал. Поэтому не могу понять тех людей которые пишут что у них все дины сгорели при подведении 50Вт. Хочется посоветовать им купить нормальный усь, который не давит гармоники на сч,вч , именно от этого обычно сгорают пищалки.