Помогите пожалуйста с алгоритмом и кодом(AVR)
- Сообщения: 42
- Зарегистрирован: Сб мар 29, 2014 15:04:39
Всем привет, есть небольшая задача которая очень мне нужна, я очень хорошо уже разбираюсь в схемотехнике но абсолютно не шарю в программировании, так вот есть один вход и два выхода, при смене логической единици на входе (то есть при переходе с 0 на 1, и обратно) на одном выходе должна появится единица (на минуту например), а на втором несколько импульсов (например 3 импульса длительностью 0.5с), все хотел сделать на авр (желательно тини13), БУДУ БЛАГОДАРЕН ЗА ЛЮБУЮ ПОМОЩЬ.
- Реклама
Какой алгоритм Вам нужен, ведь Вы его и описали? И почему так много например - "на минуту например" и "например 3 импульса длительностью 0.5с" - Вы не знаете какие Вам длительности точно нужны? И в каком виде нужна помощь - исходник для правки? Тогда в чём пишете? Или готовый hex? Вы сможете его прошить?Arturbamb писал(а):есть один вход и два выхода, при смене логической единици на входе (то есть при переходе с 0 на 1, и обратно) на одном выходе должна появится единица (на минуту например), а на втором несколько импульсов (например 3 импульса длительностью 0.5с)
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
- Сообщения: 1492
- Зарегистрирован: Ср июн 25, 2008 15:19:44
Программа несложная. Могу написать. Как с вами связаться?
- Сообщения: 42
- Зарегистрирован: Сб мар 29, 2014 15:04:39
Demiurg, буду очень благодарен за помощь, скайп и вк кинул в лс
smacorp, прошить смогу, тайминги это просто цифры всегда можно поменять, я так понимаю программа пишется в avr studio а потом собирается в hex, интересует именно скелет программы, я как-бы там си си++ что то раньше пробывал так что как бы знаю немного и по скелету смогу собрать но интересует какие именно библиотеки, операторы и прочие.... надо использовать
smacorp, прошить смогу, тайминги это просто цифры всегда можно поменять, я так понимаю программа пишется в avr studio а потом собирается в hex, интересует именно скелет программы, я как-бы там си си++ что то раньше пробывал так что как бы знаю немного и по скелету смогу собрать но интересует какие именно библиотеки, операторы и прочие.... надо использовать
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Совсем не остается времени, потому привожу очень приблизительную схему: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
Pnjom-Penb, спасибо большое за потраченое время , пока нечего не понял , завтра уже с гуглом буду разбираться:)
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Я - всё, я - спать. Можем позже по шагам вкурить.Arturbamb писал(а):пока нечего не понял
- Сообщения: 1492
- Зарегистрирован: Ср июн 25, 2008 15:19:44
Программные таймеры слишком расточительно прокручивать в прерывании. Поэтому, в прерывании ставим флаг. В основном цикле проверяем флаг. Если флаг установлен, пробегаемся по очереди таймеров.
Цикл статей Татарчевского.
Цикл статей Татарчевского.
Процессор всё равно один. По этому нет никакой разницы расточать его время в прерывании или основной программе.
Arturbamb, а что должен делать таймер если сигнал придёт повторно до истечения времени с предыдущего запуска.
Arturbamb, а что должен делать таймер если сигнал придёт повторно до истечения времени с предыдущего запуска.
- Сообщения: 1492
- Зарегистрирован: Ср июн 25, 2008 15:19:44
Неправильно рассуждаете. Прерывания должны быть максимально короткими. Точка.Андрей СШ писал(а):Процессор всё равно один. По этому нет никакой разницы расточать его время в прерывании или основной программе.
Присоединяюсь к вопросу. Добавлю: дребезг контактов учитываем? Кнопка? В общем, что на входе?Андрей СШ писал(а):Arturbamb, а что должен делать таймер если сигнал придёт повторно до истечения времени с предыдущего запуска.
Надо критичнее относится к догмам, а иначе Вы не инженер, а сектант.Demiurg писал(а):Прерывания должны быть максимально короткими. Точка.
Дайте определение термину "максимально короткий".
- Сообщения: 1492
- Зарегистрирован: Ср июн 25, 2008 15:19:44
Маленькие допущения ведут к большим допущениям. Вы знаете, когда можно резвиться в прерываниях. Я знаю. ТС этого пока не знает. Пусть лучше изначально как должно делает. А понимание, когда можно порезвиться в прерываниях придет само с опытом.Андрей СШ писал(а):Надо критичнее относится к догмам, а иначе Вы не инженер, а сектант.
Вот такая формулировка значительно адекватнее и полезнее чем, завершающаяся словом "Точка".


