Easyelectronics.ru

Электроника для всех
Текущее время: 24 апр 2017, 18:15

Часовой пояс: UTC + 5 часов



    • Изготовление печатных плат. Примерные цены: 10 штук 2-слоя 100*100mm 8.21$ или около ~470 рублей
    • Создание принципиальных схем и проектирование печатных плат
    • Симуляция работы на spice моделях
    • Просмотр GERBER файлов

Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 15 мар 2017, 21:58 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
Перенесено из темы про матрицу УФ-светодиодов. Финский.

Для изготовления плат методом плёночного фоторезиста удобно иметь таймер для UV-LED-засветки слоёв, масок и т.д.
Трёх пресетов должно хватить на обычные случаи жизни, а тратить на установки времени семисегментные индикаторы - жаба против.
Потому идея опытных товарищей иметь "три пресета с обучением" показалась наиболее здравой. Тем более, что для такой конструкции достаточно и "сорного" МК ATtiny13A.

Схема под спойлером
Show Таймер УФ-LED с самообучением на три пресета на ATtiny13


Прошивку в объёме "скелет с мышцами" предоставил Яверт (низкий поклон ему), блёстки и фенечки навесил я сам. Потому код выглядит сильно разнообразным по классу: от профессионального до быдлокодинга. Всё, что выглядит страшно - моё. :)

Конструкция пока в процессе разработки.

Идея следующая:

Питание 12В ~0,5 А.
Двусторонний фольгированный текстолит.
С верхней стороны схема управления (логика и силовой ключ), LED-индикаторы POWER, LEARNING и ULTRAVIOLET, четыре кнопки PRESET 1, 2, 3 и MANUAL.
С нижней стороны покупная 12В-лента УФ-светодиодов.

Логика работы:
Для пользования при коротком нажатии кнопки любого пресета ответно кратко мигает LEARNING и на предустановленное время загораются ULTRAVIOLET и УФ-лента. По истечении времени кратко мигает LEARNING и гаснут ULTRAVIOLET и УФ-лента. Впрочем, любая кнопка в любой момент работы ультрафиолета отключает таймер.
Для ручного управления экспозицией используется кнопка MANUAL.
Для обучения соответсвующая кнопка пресета зажимается на >5 сек (и отпускается). Загорается постоянным светом LEARNING, УФ-лента не загорается. Пользователь по своим часам отмеряет необходимый промежуток времени и повторно коротко нажимает кнопку пресета. LEARNING сначала гаснет, потом даёт вспышки "короткая-длинная-короткая" (буква R морзянкой означает "принято, понято"; ну или "recorded" - кому как нравится), записывает получившееся время себе во FLASH, и устройство возвращается в режим ожидания.

В архиве все основные файлы проекта (релиз ver. 20170415)

Историю создания см. ниже.


Вложения:
UV-LED_Timer (ver.20170415).rar [161.09 Кб]
Скачиваний: 3


Последний раз редактировалось VladyMile 17 апр 2017, 14:54, всего редактировалось 15 раз(а).
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ультрафиолетовая светодиодня матрица
СообщениеДобавлено: 23 мар 2017, 14:31 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
В ожидании прибытия УФ-LED-ленты набросал фотошаблон для проверки.
Вдруг ещё кому пригодится?...


Вложения:
UV_sked.rar [4.58 Кб]
Скачиваний: 17
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ультрафиолетовая светодиодня матрица
СообщениеДобавлено: 26 мар 2017, 13:30 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
Есть несколько вопросов по программированию. Помогите, пожалуйста, чем сможете.
Код:
if (--MODE_LED_Blink_tmp < (255-(2*MODE_LED_Blink_time)))
По-хорошему, умножение нужно просто заменить сдвигом. Но не могу понять - как.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ультрафиолетовая светодиодня матрица
СообщениеДобавлено: 26 мар 2017, 16:13 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
Ржу. Код уже компилится, но ещё совсем не работает. :)
Вот такой из меня программер :)
Show УФ-таймер на 3 пресета с самообучением


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ультрафиолетовая светодиодня матрица
СообщениеДобавлено: 26 мар 2017, 16:49 
Старожил

Зарегистрирован: 05 фев 2013, 00:58
Сообщения: 1330
VladyMile писал(а):
По-хорошему, умножение нужно просто заменить сдвигом. Но не могу понять - как.

Компилятор все умножения и деления на 2 сам заменяет на сдвиги. А программу лучше оставлять читаемой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ультрафиолетовая светодиодня матрица
СообщениеДобавлено: 26 мар 2017, 16:55 
Старожил

Зарегистрирован: 19 июн 2012, 14:17
Сообщения: 3395
VladyMile писал(а):
Код:
// Отслеживание состояний кнопок
      for (counter=0; counter<15; counter++) {
         if (PINB & (1<<counter))
         {   if (keys[counter] > LONG_PRESS) dispatch(BTN_LONG, counter);
            else if (keys[counter] > SHORT_PRESS) dispatch(BTN_SHORT, counter);
            keys[counter]=0;
         }
         else keys[counter]++;
      }

Кнопок 3, массив keys[] тоже на 3 элемента, зачем counter до 15?
Выход за пределы массива затрет другие переменные в памяти.

Задержка в главном цикле 100мс, кнопки довольно медленные будут 10*100мс=1с короткое нажатие, 500*100мс=50с длинное.
Да и 500 больше чем тип uint8_t массива keys может вместить.

Светодиод mode как должен работать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ультрафиолетовая светодиодня матрица
СообщениеДобавлено: 26 мар 2017, 18:31 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
Вышеуказанное щас поправлю.

MODE_LED горит всегда, кроме режима обучения: в нём он должен мигать 2Гц. И ещё он коротко выключается-включается при каждом изменении состояния - и при любом нажатии на кнопки, и при возврате из режимов в WAIT

UPD: ВНИМАНИЕ, в режиме обучения УФ не включается, а индикация осуществляющегося подсчёта и запоминания времени идёт путём мигания красного MODE_LED

iev91, я ступил: компилятор же посчитает конкретное значение перед вставкой в код. Благодарю :)


Последний раз редактировалось VladyMile 26 мар 2017, 19:16, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ультрафиолетовая светодиодня матрица
СообщениеДобавлено: 26 мар 2017, 18:45 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
яверт писал(а):
Да и 500 больше чем тип uint8_t массива keys может вместить
Кстати, а почему MAX_TIMER не ругается на тип?
Код:
#define MAX_TIMER   18000   // 18000*LOOP_DELAY = 30 мин

Так, теперь он хоть на что-то реагирует.
Включается, но не запоминает. Или я не додерживаю кнопки?...

Может, модель и текущий код выложить, чтобы нам в синхроне быть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ультрафиолетовая светодиодня матрица
СообщениеДобавлено: 26 мар 2017, 22:32 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
Работает. Причем без учёбы - вполне похоже на "хорошо работает".
А вот когда начинается учёба, то косяков масса вылезает. Но я не вижу, где они в коде. Не понимаю.
Мож, кто что подскажет?
Show Схема и код


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер для фоторезиста на ATtiny13
СообщениеДобавлено: 27 мар 2017, 01:25 
Старожил
Аватара пользователя

Зарегистрирован: 02 фев 2012, 02:14
Сообщения: 520
Откуда: Вiльна та самостiйна Баварiя
С кодом не подскажу, не чирикаю :)
Вопрос по синему СИД-у: ~30 мА не многовато для него будет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер для фоторезиста на ATtiny13
СообщениеДобавлено: 27 мар 2017, 08:58 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
Fahivec, здравое замечание :)
Беда в том, что в модели использованы леды-генерики, которые вообще можно втыкать в модель без токоорганичителей, "не сгорят". Соответственно, при "номинальных" токах их свечения практически не видно. Я даже потратил пол-дня на то, чтобы понять "почему D6 не светится???", подразумевая под ним в реале сверхяркий лед с соответствующим током около 1 мА. И остальные тоже не светились, но они хоть от МК управлялись - хоть какое-то объяснение, мол, программа не работает. А этот-то чего???!!!
Так и появились на схеме R7D6. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 31 мар 2017, 09:25 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
Выкладываю код на ваш суд. Глюков в модели не нашёл.
Если что подчистить/поправить/оптимизировать - не сочтите за труд, буду признателен.
Show Релиз кода


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 14 апр 2017, 11:56 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
Есть у меня постоянная неудовлетворённость некоторыми функциями, которые выглядят тупо и работают слишком "в лоб".
Одна из них - "фигурные" мигания светодиодами. Такие мигания у меня есть в каждом проекте - они для меня очень информативны.
Например, мигание морзянкой буквы R (короткий-длинный-короткий):
Код:
   LEARN_LED_Off();      // гасим LEARN_LED на 0.5 сек, тем самым
   _delay_ms(500);         // "отделяем" индикацию от предыдущего состояния

   LEARN_LED_On();
   _delay_ms(100);

   LEARN_LED_Off();
   _delay_ms(100);

   LEARN_LED_On();
   _delay_ms(300);

   LEARN_LED_Off();
   _delay_ms(100);

   LEARN_LED_On();
   _delay_ms(100);

   LEARN_LED_Off();         // гасим LEARN_LED, тем самым
   _delay_ms(500);         // "отделяем" момент выхода из функции
Вроде код относительно компактный, легко читается, но понятно, что чисто в лоб и по-быдлокодерски. А мне ж хочется вырваться из яселек.
Пробовал придумать, как переписать код из контроллера новогодних гирлянд (там его компактность - просто потрясает), чтобы "разборщик" просто бежал с заданной задержкой по битам u08 (или u16 или u32 или u64) и зажигал/гасил светодиод, но пока это слишком сложно для меня.
Пробую придумать другой алгоритм, а ничего лучше такой вот лесенки не получается:
Код:
uint8_t i;
for (i=0; i<170; i++)    {
   i<50? LEARN_LED_Off() :
      (i<60? LEARN_LED_On() :
         (i<70? LEARN_LED_Off() :
            (i<100? LEARN_LED_On() :
               (i<110? LEARN_LED_Off() :
                  (i<120? LEARN_LED_On() :
                     LEARN_LED_Off() ))))));
   _delay_ms(10);
}
Что тоже выглядит так себе.
Подскажите плз что-то гениальное.
Ведь вы же мигаете как-то хитро светодиодами?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 14 апр 2017, 14:23 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 676
В подобных ситуациях я, обычно, использую функцию типа "плеер", которая "играет" на светодиоде указанную последовательность. Что-то типа такого:

Код:
void play(char* code) {
    while(*code) {
        if(*code == '.') {
            LEARN_LED_On();
       _delay_ms(100);

       LEARN_LED_Off();
       _delay_ms(100);
        } else if (*code == '-') {
            LEARN_LED_On();
       _delay_ms(300);

       LEARN_LED_Off();
       _delay_ms(100);
        }
        code++;
    }
    LEARN_LED_Off();
    _delay_ms(500);
}


Потом в коде просто вызываешь, например, play(".-."). Сами последовательности можно сделать константами. Заодно требования к памяти заметно уменьшатся, поскольку каждый вызов занимает куда больше места, чем последовательность символов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 14 апр 2017, 15:11 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
Классная идея, кстати.
Она мне в голову не могла придти по определению, т.к. с чарами я пока вообще не разбирался.
Благодарю и за науку, и за пример.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 14 апр 2017, 23:29 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
Вау, evsi, вы открыли мне целый Мир!
Я наигрался как ребёнок :)
Таймер так шкодно мигает морзянкой, что меня потянуло назад в молодость: я захотел заменить светодиод на баззер, чтобы он реально пел морзянкой.
Или даже поставить параллельно светодиод и баззер.

Вроде всё просто.
Ан не тут-то было: в режиме обучения LEARN_LED сейчас светится непрерывно.
Но вот несколько минут непрерывно баззер зудеть не должен - это перебор.
Он должен кратко вспикивать каждую десятую секунду.
А как это сделать, не имея таймера - чё-та ничего в голову нейдёт.

Хотя... там же во время лёнинга timer декрементится каждые 50 мсек.
Более того, timer декрементится не только при лёнинге, но и во время работы пресетов - так пусть тоже пикает каждые 10 сек.
Так надо же просто добавить переменную, декрементить её каждый "систик", и каждые 10 сек делать LEARN_LED_play(".").
Теперь надо догадаться, как это запрограммить...

Тогда лёнинг будет отличаться от работы пресета только отсутствием УФ.
Это мелочи или можно смириться?
Хм...

Стоп...
LEARN_LED...
UV_ON...
UV_OFF...
А это мысль - сделать "железную" логику для баззера...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 15 апр 2017, 03:14 
Старожил
Аватара пользователя

Зарегистрирован: 02 фев 2012, 02:14
Сообщения: 520
Откуда: Вiльна та самостiйна Баварiя
Off Topic.
Блин, я думал, что не понимаю С (язык программирования), но я перестал понимать и русскую речь!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 15 апр 2017, 05:27 
Свой человек
Аватара пользователя

Зарегистрирован: 18 фев 2014, 11:27
Сообщения: 126
может стоит задействовать таймер собаки для мигания диодов?
Код:
//init dog timer
WDTCR|=(1<<WDCE)|(1<<WDTIE)|(1<<WDP1)|(1<<WDP2);      //1 sec
sei();
///////////////////
ISR (WDT_vect)
{
///////code blink
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 15 апр 2017, 11:41 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
Fahivec писал(а):
Блин, я думал, что не понимаю С (язык программирования), но я перестал понимать и русскую речь!
:)))
Прошу прощения. Вы, несомненно, правы.
Постараюсь сократить жаргонизмы до вменяемых пределов. :)
mishany984 писал(а):
может стоит задействовать таймер собаки для мигания диодов?
Show Код на собаке
(смеётся) Собака - это для меня, видимо, что-то кармическое :)))
На протяжении трёх десятков страниц я пытался (фактически вслепую) работать с таймером собаки со всеми возможными версиями софта, но в Протеусе на собаке так модель и не заработала.
Проект отложен, но не закрыт - сейчас нет на него времени и появилась здравая мысль полностью пересмотреть его концепцию в пользу РТОС. Слишком много задач для моего опыта написания кода на "флаговых автоматах".

Ваше предложение интересное.
Но думаю, что всё же откажусь от buzzer'а (короткий взгляд на Fahivec ;) ) в пользу упрощения индикации - только LED. Надо из кода убрать все вчерашние игрища.
Хотя сама идея индикации звуком морзянки мне глубоко симпатична и, несомненно, я буду ею пользоваться в будущих проектах.

Есичто, то вот:
Show Текущая версия разрабатываемого кода


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 17 апр 2017, 02:27 
Старожил
Аватара пользователя

Зарегистрирован: 02 фев 2012, 02:14
Сообщения: 520
Откуда: Вiльна та самостiйна Баварiя
VladyMile писал(а):
... (короткий взгляд на Fahivec ;) )
:)))
VladyMile писал(а):
... и появилась здравая мысль полностью пересмотреть его концепцию в пользу РТОС. Слишком много задач для моего опыта написания кода на "флаговых автоматах"...
А что там такого во флаговом автомате, что ОСРВ больше соблазняет?

Я не знаток этих операционок, но имею личный опыт использования ФА (правда на ассемблере). Применяю их нередко, можно сказать даже с удовольствием.
Увы, не проследил весь ход твоих программерских изысканий с начала, именно из-за моей несимпатии моего незнания Си. Поэтому прямой помощи, к сожалению, пока предложить не могу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 17 апр 2017, 09:26 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
Сложности в том, что КАЖДАЯ процедура в текущем (августовском'2016) коде требует проверки кучи флагов. Например, светодиоды:
- каждые 100 мс (точнее - по счётчику разов запуска функции) проверить, прошли ли эти 100мс, чтобы идти дальше в функцию; если нет - выйти;
- проверить, есть ли заявки от других функций на горение или мигание; если нет - выйти;
- разобрать, на какие светодиоды подаются одновременно заявки и на горение, и на мигание, и на мигание быстрое: миганию приоритет, причём быстрому - бОльший приоритет;
- проверить, есть ли изменения в текущем состоянии заявок на постоянное горение по сравнению с предыдущим;
- проверить счётчик, пришло уже время на (быстрое или медленное) переключение мигающих светодиодов или ещё нет; переключить, если пришло...

И так далее.
И так по каждому пункту, а таких пунктов - с десяток уже набралось.

На момент августа я ещё не запутался, но уже начал "не мочь держать всё под контролем".

А выход прост - избавиться хотя бы от большинства временнЫх флагов через самый простейший диспетчер/ОСРВ.
Например, такой, как предложил мне в том треде sva_omsk (написанный им самим, я так понял).

Я хотя бы смогу сосредоточиться на своей задаче управления и мониторинга вентиляторами и решить её (и, наконец собрать "в железе" нужные мне контроллеры!), а не решать ещё попутно вопросы диспетчеризации, к которым я не очень-то готов по своему уровню/опыту программирования.
И, главное, - мой быдлокодинг ограничится косяками в конкретных функциях, а не в системном проектировании.

Это понизит мне "порог входа" в "настоящие ОСРВ" типа FreeRTOS.

Нужны они ("настоящие ОСРВ") мне или нет?
Конечно нужны, если я не хочу стать Настоящим Программистом МК, а хочу лишь воплощать свои относительно простые домашние хотелки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 18 апр 2017, 23:00 
Старожил
Аватара пользователя

Зарегистрирован: 02 фев 2012, 02:14
Сообщения: 520
Откуда: Вiльна та самостiйна Баварiя
Распечатал себе твой код с предидущего сообщения, хочу поковыряться. Глядишь и у меня к Си симпатии появятся ;)
{ мля, Си-си... :)))) }
А что ты имел ввиду "текущий (августовский 2016)" ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 19 апр 2017, 00:17 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1181
Откуда: Русь, Новороссийск
Вау :)
Я даже растерялся. :)

Мы говорим о двух разных проектах.
Код "Таймера с самообучением" - ver. 20170415, есть в самом первом сообщении этой темы. Это самый новый стабильный код.

А августовский - это другой проект. В котором я запутался и который будет на ОСРВ. Потом. Когда-нить. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 19 апр 2017, 01:07 
Старожил
Аватара пользователя

Зарегистрирован: 02 фев 2012, 02:14
Сообщения: 520
Откуда: Вiльна та самостiйна Баварiя
Короче, штудирую вот это:
VladyMile писал(а):
Есичто, то вот:
Show Текущая версия разрабатываемого кода
Не глядя на всякие ЖЖЖ, от которых губы расплылись в улыбке, задумываюсь над отдельными участками.
Вот, к примеру, твой "систик" нифига не стабилен. Особенно, когда СИД морзянит.
Пока там эти пассажи отмигаются, твой timer спит спокойненько.
Может оно и неважно, но мне в глаза бросилось.

Хотя, нет, на время засветки не влияет, т.к. при этом ничего не морзянит.
Х.З. не врубаюсь я в эти конструкции пока...

Вот как я пока понял:
Код:
case WAIT - ждет нажатия кнопки,
         case BTN_SHORT  - было короткое нажатие, присваиваем таймеру соотв. значение, включаем УФ и выставляем состояние "PRESET".
При следующей итерации:
case PRESET - мигаем точку, отключаем УФ, сбрасываем таймер, и опять на ожидание.

Я правильно понял?

PS Нет, неправильно понял.
- Как в главном цикле передается управление на "case PRESET" ?
- а вообще в dispatch, кроме как BTN_SHORT/ BTN_LONG/ TIMER_OVERFLOW ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер УФ-LED с самообучением на 3 пресета на ATtiny13
СообщениеДобавлено: 19 апр 2017, 02:17 
Старожил

Зарегистрирован: 19 июн 2012, 14:17
Сообщения: 3395
Fahivec писал(а):
Как в главном цикле передается управление на "case PRESET" ?
- а вообще в dispatch, кроме как BTN_SHORT/ BTN_LONG/ TIMER_OVERFLOW ?

Это конечный автомат Мили на вложенных switch-case. Переход в новое состояние зависит от текущего состояния и входного сигнала(события).
Например короткое нажатие на кнопку в состоянии ожидания (комбнация state==WAIT и signal== BTN_SHORT) ведет к переходу в состояние PRESET, т.е. к включению светодиодов на предварительно записанное в еепром время.

Обработчик кнопок и таймер из главного цикла вызывают функцию dispatch и передают параметр - сигнал. В dispatch реализован КА, который проверяет текущее состояние (глобальная переменная state, используя внешний switch-case) и сигнал ( используя внутренние switch-case, у каждого состояния свой). Потом выполняются предусмотренные действия и переход в другое состояние, если в этом есть необходимость.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB