Page 1 of 3

Аналоговые кнопки (для круизконтроля)

Posted: 09 Jul 2012 16:31
by hardlock
Возникла необходимость управлять круизконтролем по 2 проводам (ну нету больше), а кнопок аж 5. Пришлось сделать вот такой дэвайс:
sch_buttons.gif
sch_buttons.gif (13.9 KiB) Viewed 16773 times
Каждой кнопке соответствует соё сопротивление, а с резистором подтяжки они образуют переменный делитель и каждой кнопке соответствует своё напряжение на входе контроллера. Получилась вот такая таблица:
table.png
Расчётное - это то, то я посчитал в теории.
Измеренное - померял тестером прямо на входе контроллера.
eeprom - вытащил из МК, записывая соответствующие кода в eeprom.

Рекомендую после сборки померять напряжение на входе тиньки и пересчитать по формуле: code = U * 1023 / 5. Где 5 - напряжение питания. Как видно из таблицы ошибка при измерении получается всего 2-3 единицы. Ошибка установленная в программе -плюс/минус 20. Это сделано и на компенсацию температурного коэфициента сопротивлений и на сопротивление линий.

Прошивка в прикреплённых файлах.
Используется массив значений (по умолчанию 3) в который каждые 10 мс записывается новое значение с АЦП (по очереди - типа FIFO). Далее проверяется отличие всех значений на удвоенную ошибку. Если отклонение меньше, то значит на входе устоявшееся напряжение. Далее проверяем, входит ли полученное значение в коридор (+- ошибка) какого-нибудь кода кнопки. Если входит, то переводим выход в нулевое состояние и удерживаем, пока код попадает в корридор. Тем самым можно обрабатывать и длительные нажатия в самом КК. Подавление дребезга - 30мс.

Порт натраивается таким образом, чтобы в исходном состоянии на выходе было Z-состояние. Активный выход - "0". Ну типа "отрытый коллектор". Это сделано для того, чтоы работали и обычные кнопки, параллеьно которым можно подключить эту схему, т.е. тиня им не мешала. Значит подтяжки на кнонках оставляем (на схеме их нет - они есть на основной схеме).

В том же архиве, в папке EXE есть HEX для прошивки, но рекомендую собрать схему, померять полученные значения и забить их в исходник и скомпилировать (CodeVisionAVR v2.05.3). Фьюзы прописаны в проекте (установлены, т.е. равны "0" CKSEL1, SUT0, остальные не установлены, т.е. = "1"). Работаем на частоте 4,8 МГц.

Дэвайс проверен в железе. Куруизконтроль корректно отрабатывает все нажатия кнопок, также проверено включение питания с удержанием кнопок - работает.
Только БОД не включен, т.к. включенный и настроенный на 4,3В он держал тиньку постоянно в ресете. С этим надо разобраться.

Чтобы подключить штатный ремокон к этой схеме его надо немного модернизировать, а именно поменять резисторы и подлючение кнопок на плате. Средняя кнопка вобще не используется (думаю, может продублировать клаксон?). Теперь они отлично управляют круизом!
DSCN0384.JPG
На картинке не видно 5-го резистора, т.к. фоталось до его появления в схеме и средняя кнопка была незадействована. Сейчас это REST 2.

Re: Аналоговые кнопки (для круизконтроля)

Posted: 29 Jan 2013 08:17
by Airwave
Hardlock, ответьте, пожалуйста, на следующие вопросы:
1. Подойдет ли для данной конструкции Tiny13V (вместо Tiny13)?
2. Какими должны быть фьюзы при прошивке МК?
3. Какова маркировка элемента VD14?
Спасибо!

Re: Аналоговые кнопки (для круизконтроля)

Posted: 29 Jan 2013 16:07
by hardlock
1. бз изменения прошивки - нет, т.к. программа писана под стандартные для Тини13 - 4,8МГц, а "V" может только до 4 МГц, согласно даташиту. Хотя для 4Мгц будет просто медленнее обрабатывать нажатие, но практически незаметно. Можно просто в свойствах проекта поставить нужную частоту и перекомпилировать и всё.
2. Посмотрите в проекте. CKSEL1=0, SUT0=0, остальные = 1.
3. BZX79-C5V1, BZV55-C5V1 и т.д.

Re: Аналоговые кнопки (для круизконтроля)

Posted: 29 Jan 2013 16:40
by Airwave
Спасибо за скорый ответ!
Не могли бы Вы перекомпилировать прошивку под Tiny13V, а то в нашей деревне только такие имеются

Re: Аналоговые кнопки (для круизконтроля)

Posted: 29 Jan 2013 19:38
by hardlock
Airwave, на какую частоту генератора?

Re: Аналоговые кнопки (для круизконтроля)

Posted: 30 Jan 2013 05:00
by Airwave
hardlock, ну наверное на 4МГц. Я, если честно, не силен в МК, но все же не вижу на данной схеме внешнего генератора, значит используем внутренний тиневский на 4МГц

Re: Аналоговые кнопки (для круизконтроля)

Posted: 30 Jan 2013 16:49
by hardlock
Airwave, с тиней "V" дела не имел и поэтому не знаю какие частоты внутреннего генератора там используются. В даташите ничего не нашёл про тактирование В-шки...
Во вложении перекомпилированная прошивка под 4MHz, без исходника, т.к. ничего кроме частоты в свойствах проекта не менял, а Вам придётся подгонять не только частоту, а и коды кнопок. Поэтому пользуйте порект из первого поста.

Добавлено спустя 8 часов 42 минуты 59 секунд:
Обновил схему и прошивку до версии v0.5. Добавилась ещё одна кнопка кнопка (REST 2), которая эмитирует одновременное нажатие кнопок Up и Down. В программе основного МК круиза реализована обработка такого сочетания кнопок.

Re: Аналоговые кнопки (для круизконтроля)

Posted: 30 Sep 2013 18:11
by vol4enok
Здравствуйте уважаемый hardlock. В первую очередь хочу выразить огромную брагодарность за разработку сего чудного девайса. Как говорится РЕСПЕКТ и УВАЖУХА Вам и gnomon72. Собрал по Вашей схеме, все пашет за исключением аналоговых кнопок. Проблема в следующем: у нас в продаже нет ATtiny13, а есть только ATTiny13а. Прошивка проходит нормально, но при включении круиза тинька выдает и удерживает нажатие кнопок UP и DOWN, ну и естественно они не работают. Аналоговая клавиатура при этом не подключена. Если выпаять тиньку все работает как надо. Менял две тиньки - результат одинаковый. Можно как-либо сделать прошивочку для 13а? Буду премного благодарен, а то с пультом как-то не очень. Хочеться на руль кнопочки. Я в первую очередь из-за них и выбрал эту схему.

Re: Аналоговые кнопки (для круизконтроля)

Posted: 30 Sep 2013 18:19
by hardlock
vol4enok, хм... надо подумать. Вобще-то 13а полный аналог, за исключением фьюзов. Попробую перекомпилировать прошивку именно под 13А, но завтра. Если до вечера не будет результата - напомните, пожалуйста.

Re: Аналоговые кнопки (для круизконтроля)

Posted: 02 Oct 2013 14:57
by vol4enok
Напоминаю :) И еще вопрос,точнее два. Какие фьюзы надо для Tiny13a? ]Надо ли прошивать файл buttons.rom который в Exe? Просто у меня xAVR это файл не читает.

Все, спасибо, разобрался. Проблема не в прошивке, а в стабилитроне. Этот гад снижал напряжение на входе тиньки до 4.12В :shock: , ну и со всеми вытекающими... Причем стабилитрон на 5.1В. Поменял 3 разных. Короче выкинул его нафиг да и все. :)

Re: Аналоговые кнопки (для круизконтроля)

Posted: 18 Jun 2014 14:11
by hardlock
ligor73 wrote: Скажите а в EEPROM не нужно ничего заливать?
Нет, еепром не используется. Попробуйте прошить не ROM, а HEX.

Стабилитрон 5,6 В или 5,1В?

Re: Аналоговые кнопки (для круизконтроля)

Posted: 18 Jun 2014 14:20
by ligor73
hardlock wrote:Стабилитрон 5,6 В или 5,1В?
Стабилитрона пока нет, без него она же должна работать.

Re: Аналоговые кнопки (для круизконтроля)

Posted: 18 Jun 2014 14:21
by hardlock
ligor73, Должна конечно. Если уж Вы открыли проект в кодевижене, то нажимайте Shift+F9 и прошивайте всё целиком.

Re: Аналоговые кнопки (для круизконтроля)

Posted: 20 Jun 2014 13:57
by ligor73
Прошить через кодевижен не получилось, забарахлил программатор.
Прошиваю другим.Гляньте фьюзы правильно стоят?

Re: Аналоговые кнопки (для круизконтроля)

Posted: 20 Jun 2014 14:10
by hardlock
ligor73, если в Вашей прошрамме установленная галочка соответствует "0", то правильно. В Юнипроф (или как-то так) наоборот - галочка соответствует "1"

Re: Аналоговые кнопки (для круизконтроля)

Posted: 20 Jun 2014 14:16
by ligor73
Почему то на прошивке 0.5 у меня запускаться не захотел.
А вот с прошивкой 0.3 заработала.

Re: Аналоговые кнопки (для круизконтроля)

Posted: 20 Jun 2014 14:25
by hardlock
Везде шил 0.5. А где Вы взяли 0.3?

Re: Аналоговые кнопки (для круизконтроля)

Posted: 20 Jun 2014 14:40
by ligor73
Да где то на форуме по круизу наверно, сейчас уже и не помню.
Датируется июль 12 года.
И она работает.
А то я уже 3 тини прошил, думая что неисправные попались.
А вот почему 0.5 не работает, непонятно.
Резистор 1 ком , напряжение на входе падает до 0,95 в.

Re: Аналоговые кнопки (для круизконтроля)

Posted: 20 Jun 2014 14:42
by hardlock
ligor73 wrote:Резистор 1 ком , напряжение на входе падает до 0,95 в.
А по таблице должено получиться 0,86 вольта. Может уже в допуск не попадает? Проверьте переменником.

Re: Аналоговые кнопки (для круизконтроля)

Posted: 20 Jun 2014 15:07
by ligor73
Выставил подстроечником 0,86 вольт, не реагирует.
А почему 0,86 ? В прошивке ведь забит код под 0,95
#define BTAutoCode 0x0C2 //Auto
#define BTRestCode 0x13B //REST
#define BTRest2Code 0x343 //REST 2
#define BTDnCode 0x206 //Down
#define BTUpCode 0x2BC //Up
или это не то?
а это из 0.3
#define BTAutoCode 0x0C2 //Auto
#define BTRestCode 0x13B //REST
#define BTUpCode 0x206 //Up
#define BTDnCode 0x2BC //Down

Re: Аналоговые кнопки (для круизконтроля)

Posted: 20 Jun 2014 15:11
by hardlock
ligor73, да, точно 0,95. Я не туда глянул в таблицу.
Обратите внимание на строку 37 (38). Там задаётся аналоговый вход.

Code: Select all

#define InPin 2             //вход аналоговых кнопок (ADC2)
в 0.3 - это ADC2, в 0.5 - ADC3...

Re: Аналоговые кнопки (для круизконтроля)

Posted: 20 Jun 2014 15:48
by ligor73
А ведь точно, у пятикнопочной 2 и 3 ноги поменяны местами :-)
А я то платку разводил под четырёхкнопочную, проглядел.
Моя ошибка, сейчас перекинем и думаю заработает.

Добавлено спустя 30 минут 26 секунд:
Нестал перепаивать платку, решил пойти по более простому пути :-)
Перекомпилировал прошивку, работает.
Спасибо, за помощь :good:

Re: Аналоговые кнопки (для круизконтроля)

Posted: 20 Jun 2014 15:48
by hardlock
ligor73, :drink:

Re: Аналоговые кнопки (для круизконтроля)

Posted: 16 Jul 2014 23:22
by alec220
В архиве два файле nex и rom я зашил оба, в eeprom залил rom, а потом прочитал что eeprom не используется, что мне теперь надо как-то зашитое оттуда убрать?

Re: Аналоговые кнопки (для круизконтроля)

Posted: 17 Jul 2014 08:06
by hardlock
alec220, думаю можно оставить. Ничего страшного не будет. Главное проверить работу основного функционала.