реклама на сайте
подробности

 
 
> Многопоточность на attiny2313
aivs
сообщение Apr 6 2013, 21:15
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 114
Регистрация: 3-10-09
Пользователь №: 52 731



Продолжаю изучать программирование под avr.
Написал программу "Часы", добавил три кнопки для выставления времени, кнопки обрабатываются по прерыванию от Таймера каждые 0.1 сек, время тикает от того же таймера, все красиво и четко работает.
Затем я задействовал термодатчик ds18b20 с шиной 1ware и написал программу для показа температуры на дисплее hd44780, датчик опрашивается по прерыванию от таймера каждые 0.1 сек, прекрасно работает.
А затем я решил совместить эти две программы, чтобы часы в одной части дисплея работали, а температура в другой части. Получилось кривенько, при опросе датчика прерывания запрещены, соответственно на нажатия кнопок реакция заторможенная.
Подскажите, как бы реализовать подобие многопоточности?
Может тут подойдут конечные автоматы?
Приветствую список литературы по этому вопросу!
А может для attiny2313 вообще это не возможно сделать без тормозов?

Сообщение отредактировал aivs - Apr 6 2013, 21:16
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ARV
сообщение Apr 8 2013, 17:48
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



всем начинающим всегда рекомендую мудрить поменьше, а поступать попроще: делайте в прерываниях только то, что либо требует мгновенной реакции на внешнее событие, либо должно происходить незаметно для всех остальных дел. для первого подходят прерывания от внешних сигналов типа INT0, встроенных SPI и т.п. интерфейсов, а для второго - таймеры (иногда иначе). при этом всегда обработчик прерывания должен стремиться быть максимально коротким по времени выполнения.

кнопки по определению не попадают в эти категории, т.к. работа с ними всегда ведется в диапазоне человеческих реакций: человек физически неспособен заметить разницу между мгновенной реакцией на нажатие кнопки и реакцией, последовавшей через 150 миллисекунд (чертовски много по меркам МК), т.к. только специально тренированный человек имеет мускульную реакцию, соизмеримую с этим интервалом времени, все прочие тормозят сильнее.

все это я к тому, что работу кнопок в 99% случаев следует делать самым тупым способом - методом опроса пинов в главном цикле. при числе кнопок не более 8, особенно если они подключены к пинам одного порта, лучше этого способа вряд ли можно придумать.

итак, опрос кнопок - методом поллинга в главном цикле, т.е. без прерываний.

надеюсь, проведя аналогичные рассуждения можно прийти к выводу, что индикация на ЖКИ и работа с DS18B20 так же не попадают в категорию, для которой применение прерываний является НЕОБХОДИМЫМ. следовательно, не мудрите понапрасну, в главном цикле делайте все максимально просто:
1. вывели на индикатор подготовленные данные
2. опросили кнопки
3. обменялись с датчиком температуры
4. в зависимости от нажатой кнопки подготовили новые данные
5. перешли к п.1

и будет вам счастье!


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- aivs   Многопоточность на attiny2313   Apr 6 2013, 21:15
- - ILYAUL   ЦитатаПолучилось кривенько, при опросе датчика пре...   Apr 6 2013, 21:52
- - Xenia   Цитата(aivs @ Apr 7 2013, 01:15) Получило...   Apr 6 2013, 23:39
|- - _Артём_   Цитата(Xenia @ Apr 7 2013, 02:39) что нел...   Apr 7 2013, 00:31
- - aivs   В прерывании я опрашиваю три кнопки, и если кнопка...   Apr 7 2013, 07:38
|- - Xenia   Цитата(aivs @ Apr 7 2013, 11:38) Код // ...   Apr 7 2013, 12:23
||- - _Pasha   Цитата(Xenia @ Apr 7 2013, 15:23) Возможн...   Apr 7 2013, 14:19
||- - Xenia   Цитата(_Pasha @ Apr 7 2013, 18:19) Там в ...   Apr 7 2013, 14:31
||- - _Pasha   Цитата(Xenia @ Apr 7 2013, 17:31) А syste...   Apr 7 2013, 14:35
|- - mempfis_   ЦитатаЗадержки с использованием _delay_us и _delay...   Apr 7 2013, 12:58
- - _Pasha   Могу сказать, как делаю я. 1. Беру за основу идею,...   Apr 7 2013, 09:58
- - mempfis_   Цитата(aivs @ Apr 7 2013, 01:15) Затем я ...   Apr 7 2013, 11:12
|- - _Артём_   Цитата(mempfis_ @ Apr 7 2013, 14:12) Есть...   Apr 7 2013, 19:37
|- - mempfis_   ЦитатаПроблемы скорее нет, чем есть. Разве самому ...   Apr 8 2013, 07:31
|- - _basile   DATASHEET 2313: "The External Interrupts are ...   Apr 8 2013, 07:52
||- - _Pasha   Цитата(_basile @ Apr 8 2013, 10:52) Как т...   Apr 8 2013, 07:57
|||- - _basile   Цитата(_Pasha @ Apr 8 2013, 11:57) Вы не ...   Apr 8 2013, 08:08
|||- - _Pasha   Цитата(_basile @ Apr 8 2013, 11:08) И что...   Apr 8 2013, 08:22
||- - aivs   Цитата(_basile @ Apr 8 2013, 11:52) DATAS...   Apr 8 2013, 16:37
|- - _Артём_   Цитата(mempfis_ @ Apr 8 2013, 10:31) Не в...   Apr 8 2013, 14:36
- - aivs   Спасибо, уберу из прерывания: Код_delay_ms(25...   Apr 8 2013, 13:36
- - Xenia   Я тоже сразу заметила, что в этой программе пока д...   Apr 8 2013, 22:36
- - _Pasha   Цитата(Xenia @ Apr 9 2013, 01:36) Поэтому...   Apr 9 2013, 01:23
- - aivs   Цитата(Xenia @ Apr 9 2013, 02:36) Поэтому...   Apr 9 2013, 08:17
- - _Pasha   Цитата(aivs @ Apr 9 2013, 11:17) Нет...   Apr 9 2013, 09:14
- - mempfis_   Цитата(aivs @ Apr 9 2013, 11:17) Нет...   Apr 9 2013, 09:43
- - ARV   Цитата(mempfis_ @ Apr 9 2013, 13:43) Прос...   Apr 9 2013, 10:11
- - mempfis_   Цитата(ARV @ Apr 9 2013, 13:11) P.S. судя...   Apr 9 2013, 14:14


Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01401 секунд с 7
ELECTRONIX ©2004-2016