Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 13.01.2009, 23:46  
kvark85
Прописка
 
Регистрация: 31.08.2008
Сообщений: 183
Сказал спасибо: 25
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
kvark85 на пути к лучшему
По умолчанию Несколько операций одновременно

Здравствуйте. Проблема такая.Диммер с ИК пультом. Управляющий элемент - симистор. Микроконтролер отслеживает переход ~220 через 0 и в каждый полупериод открывает симистор. 100 раз в сеукнду. для этого задействовано прерывания INT0 (по нему определяем переход через 0) и прерывание по таймеру-счетчику1 (2 прерывания: первое по компаратору для открытия в положительной полуволне ~220, и по переполнению для открытия в отрицательной полуволне).

ИК датчик припаян на INT1. я отдельно написал программу для регулирования яркостью. она отлажена и работает. потом написал программу которая запоминает и в последующем распознает команду с пульта.

А вместе програмы соединить не получается. вся посылка ик пульта это приблизительно 67 милисекунд. За это время проходит 3 периода сетевого напряжения. если я брошу следить за перепадом сетевого напряжения и буду принимать команду с ик пульта лампочка потухнет. а если эта не нужная мне кнопка на пульте нажата - уже моргает лампочка. я бы бросил уже думать, уже думал 2 микроконтролера в схеме делать. но ведь аналогичные схемы другим удается сделать на 1 мк. значит есть выход, только не могу дойти до него. что можно сделать?

-- Прилагается рисунок: --

Реклама:
kvark85 вне форума  
Непрочитано 14.01.2009, 00:34  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Работой в прерываниях добиваются "одновременности" выполнения нескольких процессов.

Кстати оба полупериода по INT можно отвлеживать - просто переключая от чего он срабатывает.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 14.01.2009, 00:39  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Такая проблема возникает достаточно часто - в этом случае обычно запускают таймер, которым делят процессорное время на задачи - в основном цикле по флагам и состоянию таймера определяют, какую задачу именно сейчас нужно выполнять - и ее реализуют.
при этом сбрасыывают флаг задачи. установленный в прерывании.
время в прерывании используют только для анализа и установки флага задачи - и ни на что более - само прерывание должно быть как более коротким - ни в коем случае не приближаться к времени выпонения задачи в основном цикле.
Как-то путано рассказал..
__________________
warez
urry вне форума  
Непрочитано 14.01.2009, 00:56  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Добавлю что повышение тактовой частоты иногда помагает.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 14.01.2009, 01:22  
deCoder
Прописка
 
Регистрация: 27.05.2005
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
deCoder на пути к лучшему
По умолчанию

По моему всю задачу можно решить чисто программно.
urry пытался объяснить как работает операционная система)
Что типа этого и нужно сделать.
Хватит одного единственного таймера.
Забывем про остальные прерывания.
Создаем одно прерывание по таймеру. "Квант времени" например 1 ms.
Внутри прерывания проверяем состояния входов контроллера и накапливаем данные, либо формируем очередь на передачу. Смысл в том что наш код должен должен выполняться меньше по времени чем 1 мс. То есть,например, за 1 секунду мы 1000 раз попадем в прерывание и каждый 10ый раз будем открывать симистор.
то же самое для ИК приемника. квант времени у нас известен. соответственно собираем команду от пульта
deCoder вне форума  
Непрочитано 14.01.2009, 01:50  
kvark85
Прописка
 
Регистрация: 31.08.2008
Сообщений: 183
Сказал спасибо: 25
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
kvark85 на пути к лучшему
По умолчанию

deCoder, я не понял сути. у меня команда длится 67,2 ms. тоесть квант времени должен быть больше 67,2 ms?
а это невозможно так как полупериод 10 ms длится. обьясните пожалуйста еще раз
kvark85 вне форума  
Непрочитано 14.01.2009, 03:20  
deCoder
Прописка
 
Регистрация: 27.05.2005
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
deCoder на пути к лучшему
По умолчанию

например у тебя от ик идет сигнал с периодом 1,72 мс. Значит нужен квант времени минимум раз в 8 меньше.
пусть это будет 1.72/8. С этим интервалом будет вызываться прерывание по таймеру. В начале приема команды мы ожидаем едиинцу (или какой там сигнал начала команды)
Произошло изменение, выставляем флаг и далее необходимое количество циклов прерываний мы записываем в ОЗУ. потом выдергиваем каждый 4ый бит и получаем команду. То есть чтобы получить всю команду длиной 67,2 мс нужно будет нырнуть в прерывание 67,2/квант времени
то есть в данном случае примерно 313 раз.

Все это не будет мешать коду управления симистором.
deCoder вне форума  
Непрочитано 14.01.2009, 09:45  
domowoj
Почётный гражданин KAZUS.RU
 
Аватар для domowoj
 
Регистрация: 09.12.2007
Адрес: Новосибирск
Сообщений: 1,021
Сказал спасибо: 10
Сказали Спасибо 70 раз(а) в 63 сообщении(ях)
domowoj на пути к лучшему
По умолчанию

kvark85
Перепиши ты прогр. обработки пульта не используя внешние прерывания.

Вот так люди делают
http://www.ivica-novakovic.from.hr/Lightdimmer.htm

Иеще существует вложенность прерываний,
но это только для ассов,
такой гемор...
__________________
И на камнях растут деревья!
domowoj вне форума  
Непрочитано 14.01.2009, 11:16  
Beduin
Прописка
 
Регистрация: 21.10.2005
Сообщений: 251
Сказал спасибо: 11
Сказали Спасибо 22 раз(а) в 17 сообщении(ях)
Beduin на пути к лучшему
По умолчанию

Предлагаю в обработчиках прерываний просто запускать таймеры ,а команду с пульта и димминг удобней будет обрабатывать через прерывания от таймеров.Один таймер настраивается на время задержки димминга ,а второй на время приема одного бита от пульта. При обработке прерываний другие прерывания не запрещать ,пусть стоят в очереди (опоздание на пару мкс проблем на создаст ).В этом случае у Вас все должно получится и останется еще куча свободного процессорного времени .В общем у Вас изначально неправильно был полстроен алгоритм ,потому и проблемки .Придется все переписывать сначала.
Beduin вне форума  
Непрочитано 14.01.2009, 11:46  
Beduin
Прописка
 
Регистрация: 21.10.2005
Сообщений: 251
Сказал спасибо: 11
Сказали Спасибо 22 раз(а) в 17 сообщении(ях)
Beduin на пути к лучшему
По умолчанию

вот апнот от атмела ,может будет полезно http://www.efo.ru/ftp/pub/atmel/_AVR...avr/AVR410.pdf
Beduin вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Триггер на несколько секунд rewacom Электроника средств транспорта 9 30.06.2009 11:47
Несколько вопросов по IAR AVR graham Микроконтроллеры, АЦП, память и т.д 15 02.05.2006 17:38
Шим и несколько портов dosikus Микроконтроллеры, АЦП, память и т.д 0 15.04.2006 11:51
Симуляция двух PICов одновременно в MPLAB AndrySivolap Proteus, KiCAD и другие ECAD 5 08.03.2006 21:50


Часовой пояс GMT +4, время: 16:40.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot