Можно ли использовать одновременно ШИМ и внешнее прерывание?

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 134
Зарегистрирован: Вс дек 28, 2008 18:07:28
Откуда: Москва

Сообщение Алексей bird »

Привет, коллеги!
Задача: управлять RGB лентой через ИК-пульт. Объект: ATmega8A
Проблема: не управляется, когда всё сразу включено.
Т.к. надо 3 ШИМ, то задействованы все таймеры. А при приёме ИК-данных с пульта надо считать импульсы через таймер. Получается мы можем делать, либо ШИМ либо подсчет импульсов, так получается? Атмега8 не подходит?
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Естественно, если таймер занят внутренним тактированием, то он не может работать от внешнего тактирования. Это же логично :dont_know:
Также логично, если таймер занят для чего-либо, то использовать его для чего-то другого нереально.
Или я что-то не допонимаю... :roll:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 134
Зарегистрирован: Вс дек 28, 2008 18:07:28
Откуда: Москва

Сообщение Алексей bird »

небольшое уточнение, заняты не все таймеры, а 16-битный и 8-битный, который может работать "Сброс по совпадению". Оставшийся таймер не подходит, т.к. при считывании важны точные измерения.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Алексей bird писал(а):Атмега8 не подходит?
уверен на 100% - подходит.
дело в том, что вашу задачу можно решить даже на attiny13 - см. мой вариант http://simple-devices.ru/prj/9-electr/8 ... te-control позже я модифицировал этот проект для работы с "настоящим" пультом, обычно применяемым для RGB-лент.

просто если вам надо РЕШИТЬ ЗАДАЧУ - это можно легко и просто сделать. но если вам надо ДЕЛАТЬ, КАК ПОЛОЖЕНО - вы можете столкнуться с проблемами, как сейчас.

прочтите о моём способе приема IR-сигналов с пульта и, если решитесь пойти не той дорогой, что ходят все, вы легко справитесь с решением своей задачи!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Использовать целый аппаратный таймер для одного канала такой вещи как светодиод - ИМХО расточительство, хотя если много каналов не надо, то это ваше право...
Имея всего ОДИН таймер, можно сделать количество каналов программной ШИМ, ограниченное только:
1) разрешающей способностью
2) частотой ШИМ
3) общей загруженностью контроллера
А остальные таймеры можно использовать как угодно, хоть для ИК.
Например не проблема сделать 8 каналов с разрешающей способностью 8 бит и частотой от 100Гц при тактовой 8МГц и при этом занять менее 20% вычислительной способности ядра. Последнее что я делал было на меге48 с 21х16 каналами (т.е 336, хотя всего 4 разряда ШИМ) и оно еще по UART принимало картинку 21х16 пикселей со скоростью почти 20 кадров в секунду.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Реклама
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

У меня есть пример на ассемблере. Программный шим. 32 светодиода. Мк занят на 100 %. Так что не торопитесь утверждать, что шимить и параллельно выполнять еще много чего раз плюнуть.
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Demiurg писал(а):У меня есть пример на ассемблере. Программный шим. 32 светодиода. Мк занят на 100 %
а частота ШИМа-то какая? я делал на Си 32 канала ШИМ - при частоте порядка 60Гц еще мноооого времени оставалось...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

ARV писал(а):а частота ШИМа-то какая?
Ага, и еще тактовая МК сколько? У меня тоже есть примерчик: 48 каналов, 8 бит, 120Гц, тут да 100% загрузка, но там тактовая 8МГц и вывод не на прямую на ноги контроллера, а по SPI (и ни одного таймера или прерывания кстати не задействовано, тупо все в цикле).
Ну а вообще, конечно надо задачу полностью знать, а то может у топикстартера там контроллер "логарифмы тангенсов" считает от чисел, которые ему с ик-пульта присылают, тогда конечно програмной ШИМ не отделаться...
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Встал на лапы
Аватара пользователя
Сообщения: 134
Зарегистрирован: Вс дек 28, 2008 18:07:28
Откуда: Москва

Сообщение Алексей bird »

В итоговом варианте задача выглядеть будет так: контроллер RGB ленты, будет управляться с ИК-пульта, а также управляться через Синезуб. Синезуб планируется пока только на прием, хотя и надо предусмотреть возможность отправки какой-нибудь инфы))) Поэтому и выбран был изначально вариант в аппаратным ШИМ. До этого так плотно таймеры не использовал, а тут они сразу все и понадобились, даже получается не хватает... Сейчас пока другие задачи возникли, с этим проектом продолжу чуть позже и обязательно попробую советы выше.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Алексей bird писал(а):В итоговом варианте задача выглядеть будет так: контроллер RGB ленты, будет управляться с ИК-пульта, а также управляться через Синезуб.
atmega8 - за глаза хватит! можно даже о atmega48 задуматься.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1315
Зарегистрирован: Пт ноя 27, 2009 19:47:13
Откуда: Казань

Сообщение НАПАЛМ »

Ну там у таймеров регистров сравнения всего 2 штуки, так что 3 канального чисто аппаратно на одном таймере не получится. Можно программно-аппаратно сделать. Настраиваете таймер, в обработчике прерывания инкрементируете 3 переменные и сравниваете их же и по результату сравнения логические уровни на ногах контроллера переключаете. Что-то типа виртуальных таймеров на одном аппаратном.
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

НАПАЛМ писал(а):Настраиваете таймер, в обработчике прерывания инкрементируете 3 переменные и сравниваете их же и по результату сравнения логические уровни на ногах контроллера переключаете. Что-то типа виртуальных таймеров на одном аппаратном.
Ну примерно так и делается, только инктементировать надо не 3 переменных, а одну - программный счетчик, и по результату его сравнения с тремя переменными - дергать ногами RGB. Аппаратный таймер запускается в режиме CTC, так можно легко регулировать частоту программной ШИМ. Если делать 8 разрядов, то частота получится как частота срабатывания CTC/256. При этом на основе этого же таймера можно сделать еще несколько программных делителей с удобными частотами срабатывания, которые потом могут понадобиться в программе, например 1с для встроенных часов или какой-нибудь 50мс для анимации/плавного изменения цвета.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Ответить

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