Проект - тахометр +кнопка START-STOP engine

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Сообщение rxstart1 »

Вообщем проект на стадии разработки. Тахометра пашет нормально, вот с кнопкой запуска есть проблема.
Не могу разобраться где обнуляется переменная tim2 из-за этого ничего не работает, из того что касается TIMER2.


В этом куске камень преткновения

//______________________
// РУЧНОЙ ЗАПУСК (Крутить стартер пока нажата кнопка)
//______________________
.....................
.....


if (!CLUTCH) // выжато сцепление
{
ACC=0; // выключить реле АСС
IGN=!err; // в зависимости от исправности
IGN_FAULT=err; // включить реле IGN
while (CHANGE_HEAT); // подождать пока не погаснет лампа свечей накала
STARTER=1; // крутить стартер пока нажата кнопка
key=2; // положение ключа зажигания IGN

}

а если быть точнее вообще туда не заходит. В дебаге я смотрел, переменная изменяется, т.е. таймер работает как Т1 так и Т2 светодиоды на тахометре тоже работают нормально.
Голова уже пухнет, код не большой и весь с комментариями, так, что я полагаю форумчанам не составит труда ткуть меня как кота носом в мои ошибки))
Вложения
mega16.rar
(114.67 КБ) 159 скачиваний
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Помимо основных моментов как может сбросится еще вот здесь:

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

// Прерывание по переполнению Timer2
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
 tim2++; 
}
Последний кусок, если там не желательно обнуление, замените на

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

// Прерывание по переполнению Timer2
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
 if (tim2<=0xFFFF) tim2++; 
}
А дальше уж сами ищите.

P.S. В любом редакторе есть очень удобная штука, как поик. Жмете ctrl+F, вбиваете туда имя своей переменной и смотрите, в каких участках кода она изменяется. Ну.. и походу процесса анализируете, критично для Вас это место или нет.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Сообщение rxstart1 »

Оно конечно понятно, но вряд ли счетчик успеет переполниться за какие нибудь 2-3 сек, а обнуление в этом куске только в 1 месте))

Вы попробуйте протестить сл. образом кнопку CLUTCH замкнуть, а кнопку START ENGINE удержать 2-3 сек. должны включиться реле IGN_FAULT + STARTER
но не происходит ничего?!

Реальная беда(((
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

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

P.S. Каким образом я где чего замкну? Кнопка-то у Вас! ;)

P.P.S. Может, у Вас элементарно не выполняется одно из условий?
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Сообщение rxstart1 »

хорошо, смысл такой, тахометр комментировать не буду пашет)))
кнопка работает в неск. режимах
1. автоматический, из любого положения при выжатой педали сцепления и кратковременном нажатии на кнопку программа начинает крутить стартер либо пока не заведется(условие обороты выше 640 об/мин), либо 10 сек. Потом в зависимости от результатов включается АСС и линия IGN и отключаеться стартер, если машина завелась, в противном случае все гаснет.
2. Ручной режим аналогично из любого положения "ключа" при выжатом сцеплении включается стартер и работает пока удерживвается кнопка (в этом режиме возможен перекрут)
3. также предусмотрен режим аварийной линии, IGN т. е. Если реле IGN вышло из строя тут же включается дополнительное реле, а в EPPROM записываеться ошибка которую при замене реле можно сбросить доп. кнопкой в схеме есть
4. также при заводке для дизелей программа должна ждать как в ручном, так и в автоматическом режиме пока погаснет лапма свечей накала.
5. если сцепление не выжато, то нажатие на кнопку приводит к последовательному включению режимов
1-е наж АСС
2-е наж если между первым и 2 нажатием прошло менее 10 сек АСС + IGN если больше потушить все
3-е наж потушить все

вот как то так

Да в проекте у меня все откомментировано каждая строчка))
Последний раз редактировалось rxstart1 Пн апр 21, 2014 19:51:59, всего редактировалось 1 раз.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Сообщение rxstart1 »

[quote=

P.S. Каким образом я где чего замкну? Кнопка-то у Вас! ;)

[/quote]

Я прикрепил вложение своего проекта С AVR + схему в протеусе посмотрите 1 сообщение))
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Переменные еще откомментируйте, какую подо что Вы задумали.

Вот, посмотрите, как человек откомментировал:

http://radiokot.ru/forum/viewtopic.php?f=57&t=84941

ребенок все поймет. А у Вас для себя. Я же не могу прочитать, что у Вас там в голове.
Вымогатель припоя
Аватара пользователя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Сообщение rxstart1 »

Я сделал как Вы просили прокомментировал переменные, я специально не комментировал переменные относящиеся к тахометру, т. к. они нигде не пересекаются с кнопкой. Чтобы Вы не запутались))
Я также сделал рисунок схемы taho.bmp с коментами на русском.
Если что не понятно пишите разъясню))

алгоритм нажатия:

нажал
!
обнулить таймер
взвести триггер
!
если удерживаем более 2 сек вып действия <- длинное нажатие
!
отпустил
!
если нет дребезга (удерживали не менее 0.5 сек) <- кратковременное нажатие
!
сбросить триггер
выполнять действия

надеюсь это прояснит чего я хотел получить)))
Вложения
mega16.rar
(200.77 КБ) 164 скачивания
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Вечерком поковыряю.
Вымогатель припоя
Аватара пользователя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Сообщение rxstart1 »

Спасибо буду ждать.
Попутно вопрос. На ATMEGA16U для прошивки используются выводы порта В. Я хочу собрать эту схему на cmd деталях. Поэтому желательно на плате сделать разъем для подключения к программатору. Порт В подключен к светодиодной шкале, а можно подключить программатор таким образом я показал на примере одного пина, но смысл я думаю понятен? Смотрите вложения.
Вложения
taho1.rar
(24.78 КБ) 176 скачиваний
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

А на что у Вас повлияет в таком случае диод? сквозь него в обоих случаях будет проходить напряжение. Вам надо будет либо включать его в обратном направлении и зажигать светодиоды при появлении на ноге контроллера 0 (обратная логика) при этом у Вас упадет какая-то часть напряжения на этом развязывающем диоде. Либо сделать элементарный джиттер или перемычку. Чтобы переключать режимы программирования/работы. Лучше всего, чем собирать эти городушки, сделать отдельную плату (она будет очень маленькой и простой) с кроваткой для программирования камня. И на вашей основной плате поставить кроватку. Тогда Вы сможете легко из нее вынуть контроллер и поменять в нем прошивку или заменить на другой (это справедливо для DIP-корпуса, хотя сейчас есть переходники-кроватки и для TQFP). При этом, если у Вас все это будет в машине, нужно будет предусмотреть какой-нибудь фиксатор, чтобы из-за вибрации контроллер не выпал из кровати или какой-нить контакт не нарушился.

А во-вторых, Вы какие светодиоды хотите использовать? Какой ток через каждый из них? Такое количество контроллер не потянет (не более 20-40 мА на ножку и 200мА на весь контроллер, при этом не следует подводить под предел - лучше работать не более, чем на 70% допустимой мощности). Вам необходимо будет поставить ключи для управления диодами (либо отдельно транзисторы на каждую ветку, либо развязывающую микросхему на требуемый ток). И сами диоды должны включаться через ограничивающие ток резисторы

И зачем Вам кварц вообще и в Протеусе в частности?

Также параллельно управляющим обмоткам реле во встречном направлении управляющему току необходимо ставить диоды. Это нужно для того, чтобы транзисторы не вышли из строя при выключении реле.
Друг Кота
Аватара пользователя
Сообщения: 6339
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

ИС-пытатель писал(а): Либо сделать элементарный джиттер или перемычку.
Имеется в виду "джампер" ? Джиттер - это совсем другое, и оно - такая бяка ! :)
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

ну, да. ))
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Сразу прошу прощения, у меня тут вышла небольшая накладочка.. В общем бухой в какашку и меня просто вырубает. Ну, раз уж обещал разобраться, попытаюсь хотя бы упасть в нужном направлении (типа отмазался) :)))

Да, все мои посты с этого момента и по завтрашнее утро прошу читать вдумчиво и "проецировать" на реальность. ;)

Кнопки у Вас тоже "висят в воздухе" в неактивном состоянии. Так не делается. Необходимо сделать подтяжку к нужному уровню через резисторы, а то в незамкнутом состоянии будете ловить все наводки на входе контроллера. А те, которые не висят... В общем тоже не правильно. Может, сначала схему разберем?

Так.. Все отрубает..
Последний раз редактировалось ИС-пытатель Вт апр 22, 2014 22:29:28, всего редактировалось 1 раз.
Вымогатель припоя
Аватара пользователя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Сообщение rxstart1 »

кнопки в воздухе не висят на портах включены подтягивающие резисторы если Вы заметили то отработка идет по низкому уровню))
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Не на всех портах.. в том-то и дело
Вымогатель припоя
Аватара пользователя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Сообщение rxstart1 »

Не понимаю там где управляется - в протеусе я включил подтягивающие резисторы, а плюсовые имитаторы во первых пока не задействованы, а во вторых при монтаже я конечно же подключу килоомники на землю))
Меня сейчас интересуют только 2 кнопки START ENGINE и CLUTCH и там с подтягивающими резисторами все ок.
Попробовал проверить Ваше предположение по поводу провисания остальных кнопок и просто оставил пустые пины никакого эффекта((
Вымогатель припоя
Аватара пользователя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Сообщение rxstart1 »

Отвечаю на предыдущий пост))

1. С диодами я только предположил, на счет джамперов у меня тоже была такая мысль. Сразу вопрос если я сделаю джамперы при программировании не важно что другие порты будут увязаны в схеме?

2. Кварц нужен для точности измерения частоты, т. к. устройство будет работать и в жару и в холод я хотел бы чтобы температура, а также возможное падения напряжения внутри опорного источника мк никак не повлияло на точность измерений.

3. Если вы запустили схему то увидели, что светодиод загорается только один, а эффект полоски создается последовательным включением и выключением диодов с большой частотой 25мс, если частоту увеличить скажем в 2 раза то будет казаться, что светотиоды горят тусклее. Я решил использовать этот эфект и подключил к мк выход с габаритов, пока в программе я это не реализовал, это одна строчка для начала надо собрать схему и протестить реально с какой скоростью зажигать диоды.
Да и еще одно я не рисовал в протеусе транзисторные ключи, но именно ими будут управляться светодиоды через портВ. Не нарисовал потомучто А лениво, Б занимает много места на чертеже. Для тестилки проекта я думаю и так пойдет))

4. Да конечно Вы абсолютно правы по поводу реле, я думаю сделать еще лучше, т. к. реле малоточное 100мА, то вместо диода поставлю керамический конденсатор скажем на 100n Это избавит от эффекта залипания реле и сохранит его контакты при возникновении ЭДС кондер зарядиться и само собой начнет разряжаться в катушку, но его потенциала не хватит чтобы создать индукцию для залипания контактов. Как говориться о овцы целы и волки сыты))
Последний раз редактировалось rxstart1 Ср апр 23, 2014 00:52:38, всего редактировалось 2 раза.
Вымогатель припоя
Аватара пользователя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Сообщение rxstart1 »

И еще вопрос вдогонку))

Я конечно дурень, что не разрисовал схему тахометра полностью. Но посмотрите конструкцию будет ли это работать? В том смысле что если на эмитере не будет напряжения, то транзистор будет закрыт и тогда ничто по моему не будет мешать сигналу с программатора? Или я не прав?
Вложения
taho1.rar
(24.74 КБ) 190 скачиваний
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

rxstart1 писал(а):Попробовал проверить Ваше предположение по поводу провисания остальных кнопок и просто оставил пустые пины никакого эффекта((
В Протеусе вы этого и не увидите. А вот в железе - вполне. Лично такое наблюдал. Контроллер срабатывал когда хотел.
ничто по моему не будет мешать сигналу с программатора? Или я не прав?
У Вас с программатора идет последовательность 0-й и 1-ц. Может открыться. А как Вы будете управлять транзистором? Он у Вас NPN, а Вы на эмиттер + подали.

Кстати, Вы можете включить внутренние подтягивающие резисторы у контроллера, чтобы не городить внешних и кнопкой коротить на землю. Тогда все будет стабильно работать и без лишних деталей.
И второе, номинал резисторов, которые Вы поставили, я так понимаю, условный? Потому что он должен быть больше. Хотя бы 10 кОм и 20 кОм

Если Вы ставите конденсатор - у Вас получится колебательный контур. Чтобы уменьшить его "эффект" нужно будет ставить еще резистор последовательно с конденсатором, а это даст небольшую задержку включения/выключения. И уж на залипание он никак не повлияет. На залипание контактов влияет ток, который проходит через контакты и их искрение. При большом токе они нагреваются и "прикипают" друг к дружке. А вот чтобы уменьшить искрение - можете поставить конденсатор параллельно включающим контактам (а не обмотке)
если я сделаю джамперы при программировании не важно что другие порты будут увязаны в схеме
Абсолютно пофигу. Вам только необходимо будет подать питание на вывод AVCC питания аналоговой части, даже если Вы ее не используете. Иначе не прошьете.

INT0 Вы разрешаете. А где обработчик этого прерывания? При нажатии кнопки HEAT у Вас контроллер попадет на заглушку и сбросится.

Вот здесь у Вас ошибка:

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

if (!START_BUTTON)                  // нажата кнопка                          
         {
          if (!trig)                    
            {                              
!!!!!!!             tim2=0;                       // взводим триггер
             trig=1;                       // сбрасываем счетчик Т1
             key++;                        // положение ключа +1
            } 
          if (key>2) key=0;
          change_key_pos(key);             // включаем соответствующие реле 
         //______________________
         // РУЧНОЙ ЗАПУСК (Крутить стартер пока нажата кнопка)
         //______________________

!!!!!!        if (tim2>SEC_2)                  // если кнопка удерживается более 2 сек.
            {
             if (!CLUTCH)                  // выжато сцепление
               {                       
                ACC=0;                     // выключить реле АСС
                IGN=!err;                  // в зависимости от исправности
                IGN_FAULT=err;             // включить реле IGN
                while (CHANGE_HEAT);       // подождать пока не погаснет лампа свечей накала
                STARTER=1;                 // крутить стартер пока нажата кнопка
                key=2;                     // положение ключа зажигания IGN
               }                           
            }     
         }                          
Вы сбрасываете переменную в ноль, а потом сразу же проверяете, больше ли она какого-то значения. Естественно, она меньше, поскольку таймер не успевает ее увеличить до нужного значения. И в этот кусок у Вас просто не входит. К тому же, Вы не делаете антидребезга по нажатию кнопки. И у Вас может случится, что после обработки условия нажатия сразу перекинет на обработку условия отпускания кнопки.
Ответить

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