Помогите пожалуйста с алгоритмом и кодом(AVR)

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 42
Зарегистрирован: Сб мар 29, 2014 15:04:39

Сообщение Arturbamb »

Всем привет, есть небольшая задача которая очень мне нужна, я очень хорошо уже разбираюсь в схемотехнике но абсолютно не шарю в программировании, так вот есть один вход и два выхода, при смене логической единици на входе (то есть при переходе с 0 на 1, и обратно) на одном выходе должна появится единица (на минуту например), а на втором несколько импульсов (например 3 импульса длительностью 0.5с), все хотел сделать на авр (желательно тини13), БУДУ БЛАГОДАРЕН ЗА ЛЮБУЮ ПОМОЩЬ.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3497
Зарегистрирован: Вт окт 22, 2013 04:37:23
Откуда: Казань

Сообщение smacorp »

Arturbamb писал(а):есть один вход и два выхода, при смене логической единици на входе (то есть при переходе с 0 на 1, и обратно) на одном выходе должна появится единица (на минуту например), а на втором несколько импульсов (например 3 импульса длительностью 0.5с)
Какой алгоритм Вам нужен, ведь Вы его и описали? И почему так много например - "на минуту например" и "например 3 импульса длительностью 0.5с" - Вы не знаете какие Вам длительности точно нужны? И в каком виде нужна помощь - исходник для правки? Тогда в чём пишете? Или готовый hex? Вы сможете его прошить?
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Реклама
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Программа несложная. Могу написать. Как с вами связаться?
Контактная информация:
Открыл глаза
Сообщения: 42
Зарегистрирован: Сб мар 29, 2014 15:04:39

Сообщение Arturbamb »

Demiurg, буду очень благодарен за помощь, скайп и вк кинул в лс

smacorp, прошить смогу, тайминги это просто цифры всегда можно поменять, я так понимаю программа пишется в avr studio а потом собирается в hex, интересует именно скелет программы, я как-бы там си си++ что то раньше пробывал так что как бы знаю немного и по скелету смогу собрать но интересует какие именно библиотеки, операторы и прочие.... надо использовать
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Сообщение Pnjom-Penb »

Arturbamb писал(а):... БУДУ БЛАГОДАРЕН ЗА ЛЮБУЮ ПОМОЩЬ.
Совсем не остается времени, потому привожу очень приблизительную схему:
1.Настраиваете:
- вход внешнего прерывания на смену уровня,
- таймер на 0,5 секунды
2.Заводите массив системных таймеров. В данном случае размер массива равен 2.
3.В обработчике внешнего прерывания выставляете флаг, скажем bSignalled
4.В обработчике переплнения таймера декрементируете все счетчики в массиве системных таймеров, не равные нулю:

Код: Выделить всё

OnExtInt:
         bSignalled = 2; // взводим два конечных автомата, по числу выходных последовательностей.
OnTimer:
         if (aiTimers[TMR_1]) --aiTimers[TMR_1];
         if (aiTimers[TMR_2]) --aiTimers[TMR_2]; // простите, что в лоб - совсем засыпаю...
Далее, в основном цикле реализуете что-то типа такого:

Код: Выделить всё

#define  TMR_1 0
#define  TMR_2 1
//...
int iStep;

    if (bSignalled)  // если взведен (не отработал) хотя бы один конечный автомат
    {
      // первый таймер отмеряет длительность импульса на первом выходе (это первый конечный автомат)
      if (!aiTimers[TMR_1]) // таймер первого выхода не инициализирован
      {
        PORTx.pinOut1 = 1;
        aiTimers[TMR_1] = 120;  // стартовали первый таймер, задающий темп первого конечного автомата
      } else {
        if ( !--aiTimers[TMR_1] ) // уменьшить систменый таймер 1, и если он иссяк - выключить импульс на выходе 1
          PORTx.pinOut1 = 0;
          --bSignalled;  // уменьшаем число взведенных (не отработавших свою поледовательность) автоматов
      }
      iStep = 3;
      // похожая на создание импульса на PORTx.pinOut1, но трехкратная процедура
      // формирования трех (по величине iStep) импульсов на другом выходе (второй конечный автомат)
      if (iStep--) {
        // ...
      }
    }
Реклама
Открыл глаза
Сообщения: 42
Зарегистрирован: Сб мар 29, 2014 15:04:39

Сообщение Arturbamb »

Pnjom-Penb, спасибо большое за потраченое время , пока нечего не понял , завтра уже с гуглом буду разбираться:)
Реклама
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Сообщение Pnjom-Penb »

Arturbamb писал(а):пока нечего не понял
Я - всё, я - спать. Можем позже по шагам вкурить.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Программные таймеры слишком расточительно прокручивать в прерывании. Поэтому, в прерывании ставим флаг. В основном цикле проверяем флаг. Если флаг установлен, пробегаемся по очереди таймеров.

Цикл статей Татарчевского.
Контактная информация:
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Сообщение Андрей СШ »

Процессор всё равно один. По этому нет никакой разницы расточать его время в прерывании или основной программе.

Arturbamb, а что должен делать таймер если сигнал придёт повторно до истечения времени с предыдущего запуска.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Андрей СШ писал(а):Процессор всё равно один. По этому нет никакой разницы расточать его время в прерывании или основной программе.
Неправильно рассуждаете. Прерывания должны быть максимально короткими. Точка.
Андрей СШ писал(а):Arturbamb, а что должен делать таймер если сигнал придёт повторно до истечения времени с предыдущего запуска.
Присоединяюсь к вопросу. Добавлю: дребезг контактов учитываем? Кнопка? В общем, что на входе?
Контактная информация:
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Сообщение Андрей СШ »

Demiurg писал(а):Прерывания должны быть максимально короткими. Точка.
Надо критичнее относится к догмам, а иначе Вы не инженер, а сектант.

Дайте определение термину "максимально короткий".
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Андрей СШ писал(а):Надо критичнее относится к догмам, а иначе Вы не инженер, а сектант.
Маленькие допущения ведут к большим допущениям. Вы знаете, когда можно резвиться в прерываниях. Я знаю. ТС этого пока не знает. Пусть лучше изначально как должно делает. А понимание, когда можно порезвиться в прерываниях придет само с опытом.
Контактная информация:
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Сообщение Андрей СШ »

Вот такая формулировка значительно адекватнее и полезнее чем, завершающаяся словом "Точка".
Ответить

Вернуться в «AVR»