Параллельные задачи в ATmega8
- GoldenAndy
- Поставщик валерьянки для Кота
- Сообщения: 1925
- Зарегистрирован: Чт июл 28, 2016 07:58:37
- Откуда: Kyiv, UA
- Контактная информация:
Re: Параллельные задачи в ATmega8
Dimon456, насколько я понял ARV, вопрос в том, можно ли погасить светодиод при нажатой кнопке...
И в общем случае ответ - нет. А если последовательно с кнопкой включить резистор, в несколько раз меньший сопротивления при светодиоде (но такой, который не сожжет порт МК при выводе единички в порт), то можно.
А так - да, задача решаема динамическим опросом состояния кнопки.
И в общем случае ответ - нет. А если последовательно с кнопкой включить резистор, в несколько раз меньший сопротивления при светодиоде (но такой, который не сожжет порт МК при выводе единички в порт), то можно.
А так - да, задача решаема динамическим опросом состояния кнопки.
- Реклама
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Параллельные задачи в ATmega8
Я в больнице, ищите мои сообщения на этом форуме и на easyelectronics.ru. Demiurg1978. Есть видео некоторых моих поделок на ютубе. Во всех проектах я использую описанный подход. Вкратце, логическое разделение на модули, автоматное программирование, дробление всех процессов. Условиями, флагами, состояниями. Суть, все процессы дробятся, чтобы итерация основного цикла с запасом выполнялась за один системный тик. И да, программные таймеры. Последнюю версию я выложил в сообществе easyelectronics.ru. ссылка
- Starichok51
- Модератор
- Сообщения: 19048
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Параллельные задачи в ATmega8
читаем первый пост.
для данной простой задачи не надо быть гением.
мне это видится так:
все необходимые тайминги отсчитываем программно, с помощью той же _delay(us).
для мигания диода с частотой 100 Гц отсчитываем по 10 мс и переключаем выход диода.
одновременно увеличиваем счетчик переключений диода.
когда счетчик набрал 100 (1 секунду), счетчик сбрасываем и начинаем отправлять телеграмму по NEC-протоколу.
внутри передачи протокола продолжаем рассчитывать тайминги программно.
если передача всей телеграммы занимает больше 10 мс, то по прошествии очередных 10 мс в соответствующих местах переключаем выход диода. и так каждые 10 мс, пока не передадим весь пакет. и во время передачи пакета не забываем увеличивать счетчик переключений диода (по 10 мс который).
после окончания передачи пакета переходим на цикл только управления диодом.
ВСЁ! и никаких прерываний нет вообще!
а в теме все время ведутся разговоры про таймеры и, соответственно, про прерывания от таймеров.Запрещено использовать прерывания.
для данной простой задачи не надо быть гением.
мне это видится так:
все необходимые тайминги отсчитываем программно, с помощью той же _delay(us).
для мигания диода с частотой 100 Гц отсчитываем по 10 мс и переключаем выход диода.
одновременно увеличиваем счетчик переключений диода.
когда счетчик набрал 100 (1 секунду), счетчик сбрасываем и начинаем отправлять телеграмму по NEC-протоколу.
внутри передачи протокола продолжаем рассчитывать тайминги программно.
если передача всей телеграммы занимает больше 10 мс, то по прошествии очередных 10 мс в соответствующих местах переключаем выход диода. и так каждые 10 мс, пока не передадим весь пакет. и во время передачи пакета не забываем увеличивать счетчик переключений диода (по 10 мс который).
после окончания передачи пакета переходим на цикл только управления диодом.
ВСЁ! и никаких прерываний нет вообще!
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Параллельные задачи в ATmega8
да все верно вы, Starichok51, говорите, только вот подсчитать точные тайминги операторов Си далеко не тривиальная задача. да и бессмысленная, ибо другой компилятор (даже другая версия того же) сведет все старания к нулю.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Параллельные задачи в ATmega8
[uquote="ARV",url="/forum/viewtopic.php?p=3687495#p3687495"]да все верно вы, Starichok51, говорите, только вот подсчитать точные тайминги операторов Си далеко не тривиальная задача. да и бессмысленная, ибо другой компилятор (даже другая версия того же) сведет все старания к нулю.[/uquote]
Посмотрите мой пример. Там есть вариант использования программных таймеров без прерывания. Главное условие дробление процессов. Тогда разбег на единицы, десятки и даже сотню мкс не критичны. Программные таймеры используются в некритичных модулях. Опрос кнопок, помигать светодиодов, обновление дисплея. А это все человеко интерфейсы.
Посмотрите мой пример. Там есть вариант использования программных таймеров без прерывания. Главное условие дробление процессов. Тогда разбег на единицы, десятки и даже сотню мкс не критичны. Программные таймеры используются в некритичных модулях. Опрос кнопок, помигать светодиодов, обновление дисплея. А это все человеко интерфейсы.
- Реклама
- GoldenAndy
- Поставщик валерьянки для Кота
- Сообщения: 1925
- Зарегистрирован: Чт июл 28, 2016 07:58:37
- Откуда: Kyiv, UA
- Контактная информация:
Re: Параллельные задачи в ATmega8
Starichok51, И использование таймера не обязательно тянет за собой прерывание....
Можно в цикле просто отлавливать флаг события таймера.. На асме это вообще в две команды укладывается - SBRS, RJMP....
Потому что отсчитывать тайминги - задача неблагодарная. Реализуема только на асме. И с трудом расширяема.
Принцип бесконечного цикла с периодичностью "системного тика" и дроблением задач на атомарные короткие участки в этом плане более красив и удобен. Особенно, если писать на каком то ЯВУ, что большинству удобнее и проще (да, я знаю вашу позицию про асм и ЯВУ на МК).
Опрос кнопок и вывод инфы - человекозависимы.
А отправка команд по протоколу пульта - хоть и с допусками, но все же достаточно жесткая в плане таймингов.
Мигание светодиодом в 100 герц тоже должно придерживаться этих 100 герц....
Никто не спорит по поводу подходов к программированию. Мало того, разные позиции приветствуются.
Просто в этом случае выдерживать достаточно жесткие тайминги, отсчитывая такты, как мне кажется, будет менее удобно, нежели иметь какое то периодическое событие, к которому можно привязаться.
А а вообще - эта задача сильно похожа на сферического коня в вакууме....
И топикстартер слился еще 2 дня назад.... Даже не указав, на каком языке ему нужно реализовать задачу, с какой точностью и т.д.
Алгоритмов ему уже накидали вагон.
Можно в цикле просто отлавливать флаг события таймера.. На асме это вообще в две команды укладывается - SBRS, RJMP....
Потому что отсчитывать тайминги - задача неблагодарная. Реализуема только на асме. И с трудом расширяема.
Принцип бесконечного цикла с периодичностью "системного тика" и дроблением задач на атомарные короткие участки в этом плане более красив и удобен. Особенно, если писать на каком то ЯВУ, что большинству удобнее и проще (да, я знаю вашу позицию про асм и ЯВУ на МК).
Опрос кнопок и вывод инфы - человекозависимы.
А отправка команд по протоколу пульта - хоть и с допусками, но все же достаточно жесткая в плане таймингов.
Мигание светодиодом в 100 герц тоже должно придерживаться этих 100 герц....
Никто не спорит по поводу подходов к программированию. Мало того, разные позиции приветствуются.
Просто в этом случае выдерживать достаточно жесткие тайминги, отсчитывая такты, как мне кажется, будет менее удобно, нежели иметь какое то периодическое событие, к которому можно привязаться.
А а вообще - эта задача сильно похожа на сферического коня в вакууме....
И топикстартер слился еще 2 дня назад.... Даже не указав, на каком языке ему нужно реализовать задачу, с какой точностью и т.д.
Алгоритмов ему уже накидали вагон.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Параллельные задачи в ATmega8
спасибо, не надоDemiurg писал(а):Посмотрите мой пример.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Параллельные задачи в ATmega8
[uquote="goldenandy",url="/forum/viewtopic.php?p=3687525#p3687525"]Starichok51, И использование таймера не обязательно тянет за собой прерывание....[/uquote]
Не увидел в предложенном алгоритме прерываний, пока это единственное нормальное предложение, согласно требовариям ТС:
указание на каком языке тоже есть в первом посте - явно си и диалект тоже понятен по инклудам.
В данном си можно легко использовать ассемблерные подпрограммы, как - достаточно посмотреть, например исходники японца Чена (тот который всемирно известный FatFs)
з.ы. тоже бы слился, будучи новичком, прочитав коменты местных "умников" не по теме
Не увидел в предложенном алгоритме прерываний, пока это единственное нормальное предложение, согласно требовариям ТС:
думаю и не сферический конь, судя по коментарию в программе ТС:ВСЁ! и никаких прерываний нет вообще!
Код: Выделить всё
//вычисление номера этажа В данном си можно легко использовать ассемблерные подпрограммы, как - достаточно посмотреть, например исходники японца Чена (тот который всемирно известный FatFs)
з.ы. тоже бы слился, будучи новичком, прочитав коменты местных "умников" не по теме
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Параллельные задачи в ATmega8
зато какова теперь закалка, а?oleg110592 писал(а):з.ы. тоже бы слился, будучи новичком, прочитав коменты местных "умников" не по теме
извините за оффтоп - не удержался.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Starichok51
- Модератор
- Сообщения: 19048
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Параллельные задачи в ATmega8
именно использование флага события таймера приведено в исходнике работающей программы в первом посте. я даже разглядел в этом исходнике два таймера. но почему-то ТС не устраивает эта работающая программа.goldenandy писал(а):Можно в цикле просто отлавливать флаг события таймера.
я прекрасно это понимаю. но без прерываний по таймеру я другого пути не вижу.goldenandy писал(а):отсчитывать тайминги - задача неблагодарная
ребята, задания, выдаваемые в учебном процессе, иногда, прямо скажем, выглядят идиотскими. но учебный процесс призван развивать сообразительность и умение логически мыслить.
понятно, что данное задание противоречит здравому смыслу при решении подобных задач. использование таймеров позволяет решить эту задачу без проблем, что мы и видим в исходнике из первого поста. поэтому не остается ничего другого, как отрабатывать каждый тайминг программным способом.
да, Си и компиляторы не позволяют точно отрабатывать задержки (тайминги). но и в условии задачи не оговорена точность выдерживания временных интервалов.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Параллельные задачи в ATmega8
Воть чего я всегда нявчу - алгоритм подбирается ПОД КОНКРЕТНУЮ СХЕМКУ И ЗАДАЧУ.
Иначе будет огроменное количество правильных решений со таким же количеством спорящих о том,
что лучше.
(при том, что каждый из участников обсуждения предлагает правильное решение).

Иначе будет огроменное количество правильных решений со таким же количеством спорящих о том,
что лучше.
(при том, что каждый из участников обсуждения предлагает правильное решение).
- GoldenAndy
- Поставщик валерьянки для Кота
- Сообщения: 1925
- Зарегистрирован: Чт июл 28, 2016 07:58:37
- Откуда: Kyiv, UA
- Контактная информация:
Re: Параллельные задачи в ATmega8
oleg110592, обычно если задача практическая - то человек описывает, что ему нужно и для каких целей. А не просто вопрос- как сделать это и это при таких условиях.
Ибо вообще какая то непонятка. Пульт от 100этажного лифта? Зачем там светодиод 100 гц передача команды по НЕК-протоколу?
Ладно, это внешний ИК-пульт управления с вводом числа от 1 до 100 и отправки этого по нек протоколу.
Зачем тогда еще 100 гц мигание?
И если это ИК-пульт (иначе зачем модуляция 36 кгц и протокол НЕК), то как , чемодан с батарейками прилагается в комплекте? оно ж от 5 вольт да на 8 мгц жрать будет 10-15 ма....
Вобщем, с учетом отсутствия подробностей и ТЗ - задача - сферический пульт в вакууме.
Добавлено after 6 minutes 42 seconds:
Из того что я понял из вопроса топикстартера - как в его готовый листинг вкорячить еще мигание 100 гц....
И, кстати, в задаче не 2 параллельных процесса, а 3.
Мигание 100 гц, опрос кнопок, отправка кода кнопки по НЕКу
Ибо вообще какая то непонятка. Пульт от 100этажного лифта? Зачем там светодиод 100 гц передача команды по НЕК-протоколу?
Ладно, это внешний ИК-пульт управления с вводом числа от 1 до 100 и отправки этого по нек протоколу.
Зачем тогда еще 100 гц мигание?
И если это ИК-пульт (иначе зачем модуляция 36 кгц и протокол НЕК), то как , чемодан с батарейками прилагается в комплекте? оно ж от 5 вольт да на 8 мгц жрать будет 10-15 ма....
Вобщем, с учетом отсутствия подробностей и ТЗ - задача - сферический пульт в вакууме.
Добавлено after 6 minutes 42 seconds:
Из того что я понял из вопроса топикстартера - как в его готовый листинг вкорячить еще мигание 100 гц....
И, кстати, в задаче не 2 параллельных процесса, а 3.
Мигание 100 гц, опрос кнопок, отправка кода кнопки по НЕКу
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Параллельные задачи в ATmega8
[uquote="goldenandy",url="/forum/viewtopic.php?p=3687603#p3687603"]обычно если задача практическая - то человек описывает, что ему нужно и для каких целей[/uquote]
задача тоже описана - имхо не практическая (см. 2 пост ТС):
задача тоже описана - имхо не практическая (см. 2 пост ТС):
начинающему простительно неумение написать четкое Т.З., задача "умников" помочь, и в этом тоже (имхо)я учусь в освоении AVR, не все идеально, но я и не претендую на звание "гуру м/к"
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Параллельные задачи в ATmega8
в таком случае это, хоть и несколько грубо, было сделано в первом же ответе топикстартеру: не маяться дурью и использовать прерывания. в таком ключе ТЗ делает задачу не простой, а очень простой.oleg110592 писал(а):задача "умников" помочь, и в этом тоже (имхо)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Параллельные задачи в ATmega8
[uquote="BOB51",url="/forum/viewtopic.php?p=3687601#p3687601"]Воть чего я всегда нявчу - алгоритм подбирается ПОД КОНКРЕТНУЮ СХЕМКУ И ЗАДАЧУ.[/uquote]
На практике, любой проект базируется на уже имеющихся наработках. Чем универсальней эти наработки - тем быстрее реализуется проект, меньше его себестоимость, а значит больше шансы выиграть в тендере. При московских расценках в 2-3 тыс. рублей без НДС за час работы разаработчика, каждый час имеет значение для клиента.
На практике, любой проект базируется на уже имеющихся наработках. Чем универсальней эти наработки - тем быстрее реализуется проект, меньше его себестоимость, а значит больше шансы выиграть в тендере. При московских расценках в 2-3 тыс. рублей без НДС за час работы разаработчика, каждый час имеет значение для клиента.
- GoldenAndy
- Поставщик валерьянки для Кота
- Сообщения: 1925
- Зарегистрирован: Чт июл 28, 2016 07:58:37
- Откуда: Kyiv, UA
- Контактная информация:
Re: Параллельные задачи в ATmega8
Вот человек хочет научиться.
Похвально.
Не хочет использовать прерывания. Может, боится... Или не умеет... (Или таки это лабораторка и прихоть препода)
Но зачем тогда подключать interrupt.h и разрешать прерывания sei() при запуске ?!
По алгоритму много вопросов... Слать нек-команды каждую секунду все время или только при нажатой кнопке?
Если слать все время, а кнопка не нажата - что слать? И т.д.
И писать надо честно.
Если хочу научиться - то надо или обосновать запрет прерываний (не умею, боюсь, нужны для другой задачи) или честно сказать - вот препод озадачил.... я нек осилил, а как 100 гц прикрутить - не знаю....
А так - не понятно... Тут уже накидали идей. Как с прерываниями, так и без. И на просчетах таймингов и большом цикле.
Пусть ТС отзовется и решает, что ему надо. А то общественность переживает.
Похвально.
Не хочет использовать прерывания. Может, боится... Или не умеет... (Или таки это лабораторка и прихоть препода)
Но зачем тогда подключать interrupt.h и разрешать прерывания sei() при запуске ?!
По алгоритму много вопросов... Слать нек-команды каждую секунду все время или только при нажатой кнопке?
Если слать все время, а кнопка не нажата - что слать? И т.д.
И писать надо честно.
Если хочу научиться - то надо или обосновать запрет прерываний (не умею, боюсь, нужны для другой задачи) или честно сказать - вот препод озадачил.... я нек осилил, а как 100 гц прикрутить - не знаю....
А так - не понятно... Тут уже накидали идей. Как с прерываниями, так и без. И на просчетах таймингов и большом цикле.
Пусть ТС отзовется и решает, что ему надо. А то общественность переживает.





