Аналоговые кнопки (для круизконтроля)
Posted: 09 Jul 2012 16:31
Возникла необходимость управлять круизконтролем по 2 проводам (ну нету больше), а кнопок аж 5. Пришлось сделать вот такой дэвайс:
Измеренное - померял тестером прямо на входе контроллера.
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В он держал тиньку постоянно в ресете. С этим надо разобраться.
Чтобы подключить штатный ремокон к этой схеме его надо немного модернизировать, а именно поменять резисторы и подлючение кнопок на плате. Средняя кнопка вобще не используется (думаю, может продублировать клаксон?). Теперь они отлично управляют круизом! На картинке не видно 5-го резистора, т.к. фоталось до его появления в схеме и средняя кнопка была незадействована. Сейчас это REST 2.
Каждой кнопке соответствует соё сопротивление, а с резистором подтяжки они образуют переменный делитель и каждой кнопке соответствует своё напряжение на входе контроллера. Получилась вот такая таблица:
Расчётное - это то, то я посчитал в теории.Измеренное - померял тестером прямо на входе контроллера.
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В он держал тиньку постоянно в ресете. С этим надо разобраться.
Чтобы подключить штатный ремокон к этой схеме его надо немного модернизировать, а именно поменять резисторы и подлючение кнопок на плате. Средняя кнопка вобще не используется (думаю, может продублировать клаксон?). Теперь они отлично управляют круизом! На картинке не видно 5-го резистора, т.к. фоталось до его появления в схеме и средняя кнопка была незадействована. Сейчас это REST 2.