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

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

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

rxstart1 писал(а):2. почему антидребезг неправильно организован?
Потому что у Вас антидребезг получается только по нажатию. При отпускании кнопки у Вас тоже может быть дребезг. Его Вы не учитываете. Лучше всего ввести переменную, хранящую предыдущее значение кнопки. если текущее значение кнопки не равно предыдущему (т.е. мы либо нажали, либо отпустили кнопку), то вводим задержку, например так _delay_ms (20); А иначе у Вас при отпускании кнопки программа может несколько раз попасть на участок кода по нажатию. вот, кстати, Вам картинка, какой бывает дребезг. Это обычная тактовая кнопка. У Вас на запуске скорее всего будет здоровая бандура - дребезг будет еще больше и дольше.
СпойлерИзображение
rxstart1 писал(а):По поводу таймера я не подумал. Покажите в программе как, пожалуйста.
TCCR1B=(0<<ICNC1)|(1<<ICES1)|(0<<WGM13)|(0<<WGM12)|(1<<CS12)|(0<<CS11)|(0<<CS10); //захват по переднему фронту, предделитель - 256
Теперь в программе заместо 8000000/tuchValue пишите 31250/tuchValue
а вообще, лучше от деления избавиться и использовать конкретные значения tuchValue. Будет на порядок быстрее.

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

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

Вот здесь, кстати еще поправьте:
Спойлер

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

 
        case 60:PORTB=0x80;PORTA=0xEF;break;
        case 61:PORTB=0x80;PORTA=0xDF;break;
        case 62:PORTB=0x80;PORTA=0xBF;break;
        case 63:PORTB=0x80;PORTA=0x7F;break;
на

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

 
        case 60:PORTB=0x80;PORTA=0xEF;break;
        case 61:PORTB=0x80;PORTA=0xDF;break;
        case 62:PORTB=0x80;PORTA=0xBF;break;
        default: PORTB=0x80;PORTA=0x7F;break;
это для того, чтобы если значения 63 и более зажигали максимальное количество диодов. А то у Вас при k >63 не будут гореть диоды
Вложения
DSC_0269.JPG
Тактовая кнопка, дребезг
(59.64 КБ) 616 скачиваний
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Сообщение rxstart1 »

Для антидребезга поставил паузу 20мс. и опять проверяю на нажатие кнопку
if (!START_BUTTON)
{
delay_ms(20); // нажата кнопка
if (!START_BUTTON)
{
if (!trig)
{
//TCNT0=0x00; // сбрасываем счетчик Т0
tim2=0;

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

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

Опять не совсем правильный подход для антидребезга. Смыс антидребезга - задержка обработки при первом нажатии. У Вас получилось - всегда задержка, когда нажато.
По поводу переменных. Я Вам сказал, как искать. Комментируете все лишнее (В Вашем случае автоматический запуск) и проверяете на работоспособность. Если работает - ищете ошибку в закомментированном. Если нет - значит ошибка в том, что есть.

Лично мне проще написать программу самому, чем искать и исправлять ошибки в Вашей, но думаю, Вам будет это не интересно, раз сами взялись за дело. Поэтому могу подсказать, в каком направлении идти. Самый простой вариант - прокрутить программу мысленно два раза. Первый раз - начальные значения переменных, второй - после изменений. Сразу поймете, где ошиблись. Тем более, что программа у Вас не очень большая.

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

Сообщение rxstart1 »

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

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

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

Сообщение rxstart1 »

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

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

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

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

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

Сообщение rxstart1 »

Одно реле IGN зажигание а второе его дублер, я еще не написал кусок, посмотрите на схеме PD3 идет проверка на обрыв реле IGN, если обрыв должно включиться доп. реле и красный светодиод, соответственно основное должно отключиться и записать err=1 в EEPROM. И при последующих пусках будет работать запасное реле пока не сбросить ошибку.
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

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

Сообщение rxstart1 »

СПАСИБО начал тестить и вот первай баг :)

if (START_BUTTON) // кнопка отпущена
{
if (tachValue<100)
{
key=1;
change_key_pos(key);
}
trig = 0;
}
поправил
if (START_BUTTON && trig) // кнопка отпущена

при подаче питания на МК всегда будет загораться ACC
2. положение ключа не увеличивается нигде нет key++????
3. пожалуй самое главное может у меня че с протеусом Вы пробовали поставить сюда точку останова?
if (tim2>SEC_2) // если кнопка удерживается более 2 сек.
{
if (!CLUTCH) // выжато сцепление пускать не более 10 секунд (12-2)
------> if (tim2<SEC_12)
сюда все ровно не заходит
Проверьте пожалуйста у себя если у Вас работает я переставлю винду и протеус у меня версия 7.8 англ.
Вымогатель припоя
Аватара пользователя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Сообщение rxstart1 »

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

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

У меня 7.7 SP2 русский.

Я все прогнал, работает как надо.
Положение ключа специально сделал фиксированными.

Программа работает так:

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

Сообщение rxstart1 »

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

Сообщение rxstart1 »

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

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

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

Сообщение rxstart1 »

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

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

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

Сообщение rxstart1 »

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

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

i5
Ответить

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