Страница 1 из 6
Проект - тахометр +кнопка START-STOP engine
Добавлено: Пн апр 21, 2014 18:07:16
rxstart1
Вообщем проект на стадии разработки. Тахометра пашет нормально, вот с кнопкой запуска есть проблема.
Не могу разобраться где обнуляется переменная tim2 из-за этого ничего не работает, из того что касается TIMER2.
В этом куске камень преткновения
//______________________
// РУЧНОЙ ЗАПУСК (Крутить стартер пока нажата кнопка)
//______________________
.....................
.....
if (!CLUTCH) // выжато сцепление
{
ACC=0; // выключить реле АСС
IGN=!err; // в зависимости от исправности
IGN_FAULT=err; // включить реле IGN
while (CHANGE_HEAT); // подождать пока не погаснет лампа свечей накала
STARTER=1; // крутить стартер пока нажата кнопка
key=2; // положение ключа зажигания IGN
}
а если быть точнее вообще туда не заходит. В дебаге я смотрел, переменная изменяется, т.е. таймер работает как Т1 так и Т2 светодиоды на тахометре тоже работают нормально.
Голова уже пухнет, код не большой и весь с комментариями, так, что я полагаю форумчанам не составит труда ткуть меня как кота носом в мои ошибки))
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Пн апр 21, 2014 19:11:20
ИС-пытатель
Помимо основных моментов как
может сбросится еще вот здесь:
Код: Выделить всё
// Прерывание по переполнению 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, вбиваете туда имя своей переменной и смотрите, в каких участках кода она изменяется. Ну.. и походу процесса анализируете, критично для Вас это место или нет.
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Пн апр 21, 2014 19:22:07
rxstart1
Оно конечно понятно, но вряд ли счетчик успеет переполниться за какие нибудь 2-3 сек, а обнуление в этом куске только в 1 месте))
Вы попробуйте протестить сл. образом кнопку CLUTCH замкнуть, а кнопку START ENGINE удержать 2-3 сек. должны включиться реле IGN_FAULT + STARTER
но не происходит ничего?!
Реальная беда(((
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Пн апр 21, 2014 19:26:27
ИС-пытатель
Если Вы хорошо откомментируете свой код, с описанием задумки, что должна делать программа, то Вам здесь, думаю с удовольствием помогут, хотя и покритикует немного.. нет вру, много покритикуют. Но зато много чего почерпнете и программу сделаете хорошую.
А так напрягать мозг и разбираться с этим как-то не очень хочется.
P.S. Каким образом я где чего замкну? Кнопка-то у Вас!
P.P.S. Может, у Вас элементарно не выполняется одно из условий?
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Пн апр 21, 2014 19:38:29
rxstart1
хорошо, смысл такой, тахометр комментировать не буду пашет)))
кнопка работает в неск. режимах
1. автоматический, из любого положения при выжатой педали сцепления и кратковременном нажатии на кнопку программа начинает крутить стартер либо пока не заведется(условие обороты выше 640 об/мин), либо 10 сек. Потом в зависимости от результатов включается АСС и линия IGN и отключаеться стартер, если машина завелась, в противном случае все гаснет.
2. Ручной режим аналогично из любого положения "ключа" при выжатом сцеплении включается стартер и работает пока удерживвается кнопка (в этом режиме возможен перекрут)
3. также предусмотрен режим аварийной линии, IGN т. е. Если реле IGN вышло из строя тут же включается дополнительное реле, а в EPPROM записываеться ошибка которую при замене реле можно сбросить доп. кнопкой в схеме есть
4. также при заводке для дизелей программа должна ждать как в ручном, так и в автоматическом режиме пока погаснет лапма свечей накала.
5. если сцепление не выжато, то нажатие на кнопку приводит к последовательному включению режимов
1-е наж АСС
2-е наж если между первым и 2 нажатием прошло менее 10 сек АСС + IGN если больше потушить все
3-е наж потушить все
вот как то так
Да в проекте у меня все откомментировано каждая строчка))
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Пн апр 21, 2014 19:49:22
rxstart1
[quote=
P.S. Каким образом я где чего замкну? Кнопка-то у Вас!
[/quote]
Я прикрепил вложение своего проекта С AVR + схему в протеусе посмотрите 1 сообщение))
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Вт апр 22, 2014 08:07:31
ИС-пытатель
Переменные еще откомментируйте, какую подо что Вы задумали.
Вот, посмотрите, как человек откомментировал:
http://radiokot.ru/forum/viewtopic.php?f=57&t=84941
ребенок все поймет. А у Вас для себя. Я же не могу прочитать, что у Вас там в голове.
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Вт апр 22, 2014 10:17:26
rxstart1
Я сделал как Вы просили прокомментировал переменные, я специально не комментировал переменные относящиеся к тахометру, т. к. они нигде не пересекаются с кнопкой. Чтобы Вы не запутались))
Я также сделал рисунок схемы taho.bmp с коментами на русском.
Если что не понятно пишите разъясню))
алгоритм нажатия:
нажал
!
обнулить таймер
взвести триггер
!
если удерживаем более 2 сек вып действия <- длинное нажатие
!
отпустил
!
если нет дребезга (удерживали не менее 0.5 сек) <- кратковременное нажатие
!
сбросить триггер
выполнять действия
надеюсь это прояснит чего я хотел получить)))
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Вт апр 22, 2014 10:33:51
ИС-пытатель
Вечерком поковыряю.
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Вт апр 22, 2014 15:11:37
rxstart1
Спасибо буду ждать.
Попутно вопрос. На ATMEGA16U для прошивки используются выводы порта В. Я хочу собрать эту схему на cmd деталях. Поэтому желательно на плате сделать разъем для подключения к программатору. Порт В подключен к светодиодной шкале, а можно подключить программатор таким образом я показал на примере одного пина, но смысл я думаю понятен? Смотрите вложения.
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Вт апр 22, 2014 15:35:34
ИС-пытатель
А на что у Вас повлияет в таком случае диод? сквозь него в обоих случаях будет проходить напряжение. Вам надо будет либо включать его в обратном направлении и зажигать светодиоды при появлении на ноге контроллера 0 (обратная логика) при этом у Вас упадет какая-то часть напряжения на этом развязывающем диоде. Либо сделать элементарный джиттер или перемычку. Чтобы переключать режимы программирования/работы. Лучше всего, чем собирать эти городушки, сделать отдельную плату (она будет очень маленькой и простой) с кроваткой для программирования камня. И на вашей основной плате поставить кроватку. Тогда Вы сможете легко из нее вынуть контроллер и поменять в нем прошивку или заменить на другой (это справедливо для DIP-корпуса, хотя сейчас есть переходники-кроватки и для TQFP). При этом, если у Вас все это будет в машине, нужно будет предусмотреть какой-нибудь фиксатор, чтобы из-за вибрации контроллер не выпал из кровати или какой-нить контакт не нарушился.
А во-вторых, Вы какие светодиоды хотите использовать? Какой ток через каждый из них? Такое количество контроллер не потянет (не более 20-40 мА на ножку и 200мА на весь контроллер, при этом не следует подводить под предел - лучше работать не более, чем на 70% допустимой мощности). Вам необходимо будет поставить ключи для управления диодами (либо отдельно транзисторы на каждую ветку, либо развязывающую микросхему на требуемый ток). И сами диоды должны включаться через ограничивающие ток резисторы
И зачем Вам кварц вообще и в Протеусе в частности?
Также параллельно управляющим обмоткам реле во встречном направлении управляющему току необходимо ставить диоды. Это нужно для того, чтобы транзисторы не вышли из строя при выключении реле.
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Вт апр 22, 2014 16:22:51
Jack_A
ИС-пытатель писал(а): Либо сделать элементарный джиттер или перемычку.
Имеется в виду "джампер" ? Джиттер - это совсем другое, и оно - такая бяка !

Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Вт апр 22, 2014 16:23:51
ИС-пытатель
ну, да. ))
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Вт апр 22, 2014 22:02:35
ИС-пытатель
Сразу прошу прощения, у меня тут вышла небольшая накладочка.. В общем бухой в какашку и меня просто вырубает. Ну, раз уж обещал разобраться, попытаюсь хотя бы упасть в нужном направлении (типа отмазался)
Да, все мои посты с этого момента и по завтрашнее утро прошу читать вдумчиво и "проецировать" на реальность.
Кнопки у Вас тоже "висят в воздухе" в неактивном состоянии. Так не делается. Необходимо сделать подтяжку к нужному уровню через резисторы, а то в незамкнутом состоянии будете ловить все наводки на входе контроллера. А те, которые не висят... В общем тоже не правильно. Может, сначала схему разберем?
Так.. Все отрубает..
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Вт апр 22, 2014 22:27:20
rxstart1
кнопки в воздухе не висят на портах включены подтягивающие резисторы если Вы заметили то отработка идет по низкому уровню))
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Вт апр 22, 2014 22:30:01
ИС-пытатель
Не на всех портах.. в том-то и дело
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Ср апр 23, 2014 00:10:05
rxstart1
Не понимаю там где управляется - в протеусе я включил подтягивающие резисторы, а плюсовые имитаторы во первых пока не задействованы, а во вторых при монтаже я конечно же подключу килоомники на землю))
Меня сейчас интересуют только 2 кнопки START ENGINE и CLUTCH и там с подтягивающими резисторами все ок.
Попробовал проверить Ваше предположение по поводу провисания остальных кнопок и просто оставил пустые пины никакого эффекта((
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Ср апр 23, 2014 00:24:45
rxstart1
Отвечаю на предыдущий пост))
1. С диодами я только предположил, на счет джамперов у меня тоже была такая мысль. Сразу вопрос если я сделаю джамперы при программировании не важно что другие порты будут увязаны в схеме?
2. Кварц нужен для точности измерения частоты, т. к. устройство будет работать и в жару и в холод я хотел бы чтобы температура, а также возможное падения напряжения внутри опорного источника мк никак не повлияло на точность измерений.
3. Если вы запустили схему то увидели, что светодиод загорается только один, а эффект полоски создается последовательным включением и выключением диодов с большой частотой 25мс, если частоту увеличить скажем в 2 раза то будет казаться, что светотиоды горят тусклее. Я решил использовать этот эфект и подключил к мк выход с габаритов, пока в программе я это не реализовал, это одна строчка для начала надо собрать схему и протестить реально с какой скоростью зажигать диоды.
Да и еще одно я не рисовал в протеусе транзисторные ключи, но именно ими будут управляться светодиоды через портВ. Не нарисовал потомучто А лениво, Б занимает много места на чертеже. Для тестилки проекта я думаю и так пойдет))
4. Да конечно Вы абсолютно правы по поводу реле, я думаю сделать еще лучше, т. к. реле малоточное 100мА, то вместо диода поставлю керамический конденсатор скажем на 100n Это избавит от эффекта залипания реле и сохранит его контакты при возникновении ЭДС кондер зарядиться и само собой начнет разряжаться в катушку, но его потенциала не хватит чтобы создать индукцию для залипания контактов. Как говориться о овцы целы и волки сыты))
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Ср апр 23, 2014 00:42:37
rxstart1
И еще вопрос вдогонку))
Я конечно дурень, что не разрисовал схему тахометра полностью. Но посмотрите конструкцию будет ли это работать? В том смысле что если на эмитере не будет напряжения, то транзистор будет закрыт и тогда ничто по моему не будет мешать сигналу с программатора? Или я не прав?
Re: Проект - тахометр +кнопка START-STOP engine
Добавлено: Ср апр 23, 2014 08:17:58
ИС-пытатель
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
}
}
}
Вы сбрасываете переменную в ноль, а потом сразу же проверяете, больше ли она какого-то значения. Естественно, она меньше, поскольку таймер не успевает ее увеличить до нужного значения. И в этот кусок у Вас просто не входит. К тому же, Вы не делаете антидребезга по нажатию кнопки. И у Вас может случится, что после обработки условия нажатия сразу перекинет на обработку условия отпускания кнопки.