разные режимы работы ШИМ в Tiny13

Обсуждаем контроллеры компании Atmel.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

речь пойдет об микроконтроллере Tiny13
вот датащит http://www.promelec.ru/pdf/ATTINY2313.pdf исправлено (спасибо blackx за замечание ) http://www.promelec.ru/pdf/Attiny13.pdf

начал изучать разные режимы работы ШИМ. Почитал вот вот эту статью.
И казалось бы, что я уже все понял, но открыв датащит на этот МК у меня появились некоторые сомнения и вопросы.

открываем датащит на странице 75 и смотрим таблицу №40
СпойлерИзображение
возьмем к примеру режим Fast PWM (быстрый ШИМ)
этого режима бывает два варианта (Mode 3 и Mode 7)
в варианте Mode 3 счетчик считает от нуля до 255 - с этим режимом все понятно и вопросов не возникает! :)
а вот в варианте Mode 7 - счетчик считает от нуля до OCR** - и вот тут странность. в этом режиме ни какой ШИМ не получится сделать! Для чего этот режим? и какое отношение он имеет к ШИМ ? :shock:

________________________

такая же ситуация обстоит с режимом PWM, Phase Correct ( ШИМ с точной фазой )
так же два варианта ( Mode 1 и Mode 5 )
с Mode 1 все понятно - тут счетчик считает от нуля до 255 :)
с Mode 5 - точно такой же вопрос как и в режиме FAST PWM - тут счетчик считает от нуля до OCR**
_________________________


сам вопрос я выделил жирным шрифтом :))
Заранее Всем благодарен за ответы :beer:
Последний раз редактировалось uwrtey Ср янв 30, 2013 14:49:39, всего редактировалось 3 раза.
не зная броду не лезь к вольтмоду
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

uwrtey писал(а):речь пойдет об микроконтроллере Tiny13
Правильный datasheet
http://www.atmel.com/Images/doc2535.pdf
uwrtey писал(а): а вот в варианте Mode 7 - счетчик считает от нуля до OCR** - и вот тут странность. в этом режиме ни какой ШИМ не получится сделать! Для чего этот режим? и какое отношение он имеет к ШИМ ? :shock:
В этом режиме OCRA устанавливает частоту ШИМ генерации, а через OCRB можно выставить скважность (OCRB < OCRA).

UPD. Тьфу, OCR2B а не OCRB, эти дурацкие названия :))). Соотв. выход ШИМ будет на ноге OC2B.
Последний раз редактировалось blackx Ср янв 30, 2013 12:23:22, всего редактировалось 1 раз.
Изображение only pure true norwegian blackx Изображение
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Сообщение Pika4u »

Вот тут про ШИМ почитайте, все разжевано донельзя http://easyelectronics.ru/avr-uchebnyj- ... -shim.html
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

:facepalm: ТС по этой статье и спрашивает.
Изображение only pure true norwegian blackx Изображение
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Сообщение Pika4u »

Оййй :))) :))) :facepalm: :facepalm:
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

blackx, спасибо :beer:
blackx писал(а): В этом режиме OCRA устанавливает частоту ШИМ генерации, а через OCRB можно выставить скважность (OCRB < OCRA).

UPD. Тьфу, OCR2B а не OCRB, эти дурацкие названия :))). Соотв. выход ШИМ будет на ноге OC2B.
это как? где можно поподробней почитать ? ( с Английским у меня плохо, переводчики переводят теряя логический смысл, поэтому чтение датащита занимает очень много дней)

П.С. а чем плох датащит который я указал ?
не зная броду не лезь к вольтмоду
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

Насчет поподробнее почитать не знаю, в даташите раздел 11.7.3. Но там особо много не расписано. Вообще это не очень документировано, встречал уже когда-то такой вопрос.
Если быть точнее, OCR0A выставляет верхнюю границу счета таймера - как в режиме CNC. Таким образом, управляя частотой. А OCR0B теперь выставляет скважность. Когда таймер начинает счет с 0, на ноге OC0B (PB1) появляется лог "1". Вывод OC0A в этом режиме недоступен для ШИМ вообще. Как только таймер досчитает до OCR0B, на PB1 устанавливается "0", таймер считает дальше. А вот когда доходит уже до верхнего порога - OCR0A - тогда на PB1 опять выставляется "1", таймер сбрасывается и все начинается сначала.
uwrtey писал(а): П.С. а чем плох датащит который я указал ?
ATtiny13 и ATtiny2313 - разные микроконтроллеры. По периферии они друг от друга не очень сильно отличаются, но лучше пользоваться правильным даташитом от 13ой.
Изображение only pure true norwegian blackx Изображение
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

blackx писал(а):ATtiny13 и ATtiny2313 - разные микроконтроллеры. По периферии они друг от друга не очень сильно отличаются, но лучше пользоваться правильным даташитом от 13ой.
Ой, блин я не тот датащит указал :oops: этот хотел http://www.promelec.ru/pdf/Attiny13.pdf
и еще возмущаюсь что то... :oops:

Спасибо, blackx :beer:
не зная броду не лезь к вольтмоду
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

blackx писал(а):UPD. Тьфу, OCR2B а не OCRB, эти дурацкие названия :))). Соотв. выход ШИМ будет на ноге OC2B.
OCR2B нету в тини 13, ты хотел сказать OCR0B, а ШИМ будет на OC0B ( шестой вывод микросхемы )

я тоже путаюсь в этих названиях, и те кто составляет datasheet'ы то же ошибаются... :)))
не зная броду не лезь к вольтмоду
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

ну вот теперь еще один вопрос появился

а если к примеру я выбрал Fast PWM (mode 7) в котором счетчик считает до OCRA ( wgm02=1)

теперь нужно настроить поведение вывода OC**
для этого смотрим таблицу Table 11-3. ( датащита )

в таблице написано, что ШИМ будет именно на OC0A
00 - OC0A отключено
01 - OC0A переключается по совпадению
10 - прямой ШИМ на OC0A
11 - обратный ШИМ на OC0A

тут что то не понятно....

если Ты говоришь, что генерация будет на OC0B, то почему они не пишут что OC0A в этом режиме будет НЕДОСТУПЕН ?
тут видимо нужно выбирать 01 ( OC0A переключается по совпадению ) и далее настраивать OC0B ?
а что будет если я выберу 10 - (прямой ШИМ на OC0A) или 11 - (обратный ШИМ на OC0A) ???

ну вот теперь я совсем запутался.... :o
не зная броду не лезь к вольтмоду
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

uwrtey, Я, когда начинал разбираться с таймерами делал так: в компиляторе создавал простенькую программку для конкретного контроллера, а именно, инициализировал какой нибудь режим таймера, в протеусе подключаю осцил к выходу OCn соответствующего таймера того же контроллера и смотрим что происходит на выходе контроллера, меняя те или иные параметры в инициализации таймера. Так быстее доходит, чем теория, на много. Какой режим и как работает, сразу понятно, что мне нужно для реализации той или иной задачи.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

пойдет - как вариант.
не зная броду не лезь к вольтмоду
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Протеус - это все таки виртуальная среда.
Лучше реальной схемы нет ни чего. :))

Как раз необходимо сделать некое устройство, которое генерировало бы импульсы с частотой 50Гц и разной длительностью.
например 1400 мкс и 1600 мкс

Выбрал МК ATtiny2313


Написал код. Но что то сделал не так :(
Генерации нет! ни на одном из выводов OC1A OC1B

при включении оба эти вывода выдают лог_1 до тех пор пока не выключу....

Что же не так ?
Вложения
ШИМ тини 2313-var2.0.asm
(4.99 КБ) 532 скачивания
ШИМ тини2313 - копия.jpg
(110.92 КБ) 422 скачивания
не зная броду не лезь к вольтмоду
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

Как раз необходимо сделать некое устройство, которое генерировало бы импульсы с частотой 50Гц и разной длительностью.
например 1400 мкс и 1600 мкс
Нужны два сигнала с частотой 50ГЦ и разной длительностью 1400 и 1600 мкс на разных каналах, они должны появляться при нажатой кнопке, так?
Правильно понимаю?

P.S. Генерация данных сигналов без обработки нажатия кнопки
Вложения
PWM_ICR_tn2313.asm
(3.77 КБ) 488 скачиваний
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Спасибо большое, zero648. :beer:
______________________

Ну в обще нужно два сигнала с частотой 50 Гц и длительностью импульса 1400 мкс
При нажатой кнопке длительность должна изменится на 1600 мкс на обеих ножках. Частота при этом изменится не должна!

______________________

Но это для меня пока сложно! я только начал изучать программирование МК и вот дошел до ШИМ

В своем проекте я решил сделать только один канал с ШИМ,

при включении устройства на ножке OC1B должна появиться генерация импульсов с частотой 50Гц
и длительностью импульса 1400 мкс. При нажатии на кнопку длительность должна изменится на 1600 мкс.
второй контакт - OC1A - я вывел для того, что бы посмотреть что на нем будет.

В датащите очень мало информации о ШИМ с регулируемой частотой.
blackx подсказал мне о режиме ШИМ с изменяемой частотой.
blackx писал(а): В этом режиме OCRA устанавливает частоту ШИМ генерации, а через OCRB можно выставить скважность (OCRB < OCRA).

UPD. Тьфу, OCR2B а не OCRB, эти дурацкие названия :))). Соотв. выход ШИМ будет на ноге OC2B.


Если быть точнее, OCR0A выставляет верхнюю границу счета таймера - как в режиме CNC. Таким образом, управляя частотой. А OCR0B теперь выставляет скважность. Когда таймер начинает счет с 0, на ноге OC0B (PB1) появляется лог "1". Вывод OC0A в этом режиме недоступен для ШИМ вообще. Как только таймер досчитает до OCR0B, на PB1 устанавливается "0", таймер считает дальше. А вот когда доходит уже до верхнего порога - OCR0A - тогда на PB1 опять выставляется "1", таймер сбрасывается и все начинается
Вот собственно из того что отложилось в моем сознании я и написал код - только он не заработал...
не зная броду не лезь к вольтмоду
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

Тогда нужно просто определить новую переменную с нужной длительностью сигнала в мксек и выполнить вот такую цепочку кода для канала А:

например задаем переменную VAR:
.equ VAR = 1600 ; задается в микросекундах для моего примера
и выполняем следующее:
ldi r16, low(VAR-1)
ldi r17,high(VAR-1)
out OCR1AH, r17
out OCR1AL, r16


Аналогично для канала В. При этом частота сигнала остается постоянной для обоих каналов
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Спойлера почему у тебя в записи

Код: Выделить всё

ldi   r16, low(Duration_A-1)
присутствует "-1" ? для чего это ?
____________

Спасибо! :beer: как это сделать я знаю. :)


Ты использовал ICR1
с ним все становится намного проще! :) я до сих пор про него не знал :oops: :)

я сначала задумывал на тини_13 сделать
а у него нет ни какого ICR1

вот и прицепился к OC1A в TOP

спасибо!
Последний раз редактировалось uwrtey Пн фев 18, 2013 23:45:27, всего редактировалось 4 раза.
не зная броду не лезь к вольтмоду
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Может, до кучи, подскажешь где я сделал ошибку в своем варианте ?
:roll:
что бы я освоил урок - так сказать....
не зная броду не лезь к вольтмоду
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

uwrtey писал(а):Может, до кучи, подскажешь где я сделал ошибку в своем варианте ?
:roll:
что бы я освоил урок - так сказать....
Хорошо, погляжу, а "-1" это потому, что контроллер поделит тики не на число, а на количество комбинаций числа, т.к. ноль для него тоже число, например 0-20000=20001 комбинаций.


Посмотрел, в протеусе работает так, первоначально на канале В присутствует сигнал 50Гц 1400 мкс, после первого нажатия кнопки сигнал становится 1600мкс, далее при нажатой кнопке сигнал 1400мкс, при отжатой 1600мкс.
Что-то не так?

Таймер настроен нормально, частота по каналу А, длительность по каналу В, на выходе канала А ничего не должно быть, все в порядке. На канале А мы увидеть сможем сигнал, если поставить режим выхода TOGGLE, но значение регистра OCR1A будет равнятся его полупериоду.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Все правильно так и должно быть. Но на реальной схеме генерации нет. :(
Блин, до меня кажется дошло. Этот МК раньше стоял в другом устройстве! Надо же фьюзы поправить на дефолтные! :oops:
Он у меня от кварца пытается запустится... :oops:

Спасибо БОЛЬШУЩЕЕ zero648, Ты очень мне помог! :beer:
не зная броду не лезь к вольтмоду
Ответить

Вернуться в «AVR»