Easyelectronics.ru

Электроника для всех
Текущее время: 22 сен 2017, 12:53

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



    • JLCPCB for PCB Prototyping: 10 шт. 2-слоя 100*100mm 2$(около 140rub), изготовление за 24 часа.
    • Создание принципиальных схем и проектирование печатных плат
    • Крупнейший китайский онлайн магазин радиодеталей. Скидка 50%
    • Просмотр GERBER файлов

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

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

Для изготовления плат методом плёночного фоторезиста удобно иметь таймер для 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 Кб]
Скачиваний: 23


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

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


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

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


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

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


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

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

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


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

Зарегистрирован: 19 июн 2012, 14:17
Сообщения: 3437
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
Сообщения: 1506
Откуда: Русь, Новороссийск
Вышеуказанное щас поправлю.

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

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

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


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

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

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

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

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


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

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


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

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


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

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


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

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


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

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1506
Откуда: Русь, Новороссийск
Есть у меня постоянная неудовлетворённость некоторыми функциями, которые выглядят тупо и работают слишком "в лоб".
Одна из них - "фигурные" мигания светодиодами. Такие мигания у меня есть в каждом проекте - они для меня очень информативны.
Например, мигание морзянкой буквы 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
Сообщения: 891
В подобных ситуациях я, обычно, использую функцию типа "плеер", которая "играет" на светодиоде указанную последовательность. Что-то типа такого:

Код:
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
Сообщения: 1506
Откуда: Русь, Новороссийск
Классная идея, кстати.
Она мне в голову не могла придти по определению, т.к. с чарами я пока вообще не разбирался.
Благодарю и за науку, и за пример.


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

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1506
Откуда: Русь, Новороссийск
Вау, 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
Сообщения: 609
Откуда: Вiльна та самостiйна Баварiя
Off Topic.
Блин, я думал, что не понимаю С (язык программирования), но я перестал понимать и русскую речь!


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

Зарегистрирован: 18 фев 2014, 11:27
Сообщения: 158
может стоит задействовать таймер собаки для мигания диодов?
Код:
//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
Сообщения: 1506
Откуда: Русь, Новороссийск
Fahivec писал(а):
Блин, я думал, что не понимаю С (язык программирования), но я перестал понимать и русскую речь!
:)))
Прошу прощения. Вы, несомненно, правы.
Постараюсь сократить жаргонизмы до вменяемых пределов. :)
mishany984 писал(а):
может стоит задействовать таймер собаки для мигания диодов?
Show Код на собаке
(смеётся) Собака - это для меня, видимо, что-то кармическое :)))
На протяжении трёх десятков страниц я пытался (фактически вслепую) работать с таймером собаки со всеми возможными версиями софта, но в Протеусе на собаке так модель и не заработала.
Проект отложен, но не закрыт - сейчас нет на него времени и появилась здравая мысль полностью пересмотреть его концепцию в пользу РТОС. Слишком много задач для моего опыта написания кода на "флаговых автоматах".

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

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


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

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

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


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

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

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

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

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

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

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

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


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

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


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

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

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

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


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

Зарегистрирован: 02 фев 2012, 02:14
Сообщения: 609
Откуда: В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
Сообщения: 3437
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 часов


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

Сейчас этот форум просматривают: Cthulhu


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

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

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