А мені хотілося пригод, тому я поставив собі завдання трохискладніше, а саме: "переключати треки в телефоні, використовуючиштатні кнопки на кермі".
Далі був довгий гуглінг, який дав ясно зрозуміти, що кермо на моїймашині дає повністю цифровий сигнал
Стягнуто з якогось форуму — осцилограма натискання на одну з кнопокна кермі
У пізніших машинах сигнал з керма можна зловити через CAN, але вмашинах 2001-го року — ні. Тому доведеться розібратися, що засигнал приходить, і що з ним далі робити. Всього знімати сигналкнопок керма - це виявився роз'єм передньої панелі. Поруч єтестпоінт, до якого зручно припаятись, і сигнал уже пройшов черезвнутрішні захисту і він точно п'ятивольтовий. Сигнал на роз'ємі яне поміряв. Ось сюди я і припаявся Віцеганів у товариша на часлогічний аналізатор, я припаявся до вказаної точки, відніс мафон вмашину і записав сигнали кнопок. Вийшло наступне:0x00, 0x00, 0xFF, 0x5D, 0x55, 0x77, 0x77, 0x5D, 0x57, 0x75, 0xD5, 0x55, 0xD7, 0x77{0x00, 0x00, 0xFF, 0x5D, 0x55, 0x77, 0x77, 0x5D, 0x55, 0xD7, 0x55, 0x75, 0xD7, 0x77, 0x77} - вниз< 0/0 x55, 0x77, 0x77, 0x5D, 0x57, 0x55, 0x55, 0x77, 0x77, 0x77, 0x77} - збільшити гучність {0x00, 0x00, 0xFF, 0x5, 0x7 0x55, 0x55, 0x57, 0x77, 0x77, 0x77, 0x77} -зменшити гучність
Якщо кнопку утримувати в натиснутому стані, то кожні 60мс післяпершої посилки відправляється код повтору вигляду {0x00, 0x7}.Тривалість 0 і 1 приблизно однакова, близько 500мкс, тобто частотасигналу всього близько 2кГц. Нормальна людина в цей момент пішла бписати декодер для цього сигналу (ну, зовсім нормальналюдина купила б собі мафон з блутусом, або не морочився б взагалі, але говоритимемо хоча б про майже нормальних людей), а я пішовробити емулятор кнопок на кермі :)
У принципі робити там особливо нічого — взяв Arduino nano., причепив 4 кнопки, написав невелику програму, пів-години витративна підбір затримок - і вуаля :) Хіба тільки із затримками накосячив- в Make-файлі поставив частоту процесора в 20МГц, а насправдікварц стоїть на 16 - тому затримки в числовому вигляді незбігаються із тим, що я побачив через логічний аналізатор. Ну тагаразд, підключаємо ардуїну до мафона, кнопаємо кнопочки, дивимося, що треки перемикаються, несемо мафон назад в машину і сідаємописати аналізатор! Я поняття не маю, що у мене за протокол передочима (може він має хитру назву, або якось стандартизований), алемені це й не потрібно — мені потрібно лише відрізнити 4 кнопки істан повтору. Тому говнокодитимемо спрощувати :) Залізо - така самаардуїно нано за пару доларів. Від Arduino я використовую тількизавантажувач, пишу на C. На початку бачимо послідовність 0x00, 0x00, 0xFF, 0x5D, 0x55. Що в ньому гарного? По-перше те, що мисміливо можемо пропустити перших штук 8 змін полярності сигналупросто так (на морочаючись із частотою), а потім використовувати0x55 (aka 01010101) для синхронізації частоти. Для вірностівиміряємо довжину кожного 0 і 1 у цьому самому 0x55, відкинемо паруграничних значень, а решту середніх. Потім почекаємо трохи, і черезрозрахований інтервал часу рахуємо всі необхідні нам 80 біт.Загалом, даремно я тут розпинаюсь — це ж не форум програмування.Коротше, кому цікавий код — сюди (тапками не кидками — це Proof ofConcept, не більше) Підключив емулятор до приймача, перевірив, щоперший емулює, а другий приймає, сходив у машину, подивився, щокоманди від справжнього керма приймач теж успішно розпізнає і пішовприкручувати його до блутуса. Тут теж описувати поки що нічого —через транзистор на 250мс після отримання команди подаю +3В накомандну ногу, і все. Докладніше опишу в наступних серіях; )
Засідка на мене чекала в іншому місці. Підключив блутус, перевіривудома, що все ОК, несу до машини. Вмикаю. Грає. Rewind - нателефоні включається наступний трек, а звук у колонках зникає - ЦПвирубує при перемотуванні входи передусилка: (до такої засідки яготовий не був. Друга засідка - це мотор, який не так простовідключити, і який смикає дзижчить при перемотуванні. Але ценісенітниця в порівнянні з тим, що я можу слухати тільки непарнітреки :D.
Проміжний підсумок:протокол розібраний, але для повноцінноговкорячення блутуса - we need to go deeper; )
Забігаючи вперед - зараз блутус стоїть у машині, треки з кермаперемикаються, касетний механізм фізично відсутній. Але про це унаступних серіях :)
" а я пішов робити емулятор кнопок на кермі :) У принципі робититам особливо нічого - взяв Arduino nano, що підвернулася під руку, причепив 4 кнопки, написав невелику програмку, пів- години витративна підбір затримок - і вуаля :) Хіба тільки із затримками накосячив- у Make-файлі поставив частоту процесора в 20МГц, а насправдікварц стоїть на 16 - тому затримки у числовому вигляді незбігаються з тим, що я побачив через логічний аналізатор . Ну тагаразд, підключаємо ардуїну до мафона, кнопаємо кнопочки, дивимося, що треки перемикаються, несемо мафон назад в машину і сідаємописати аналізатор! Я поняття не маю, що у мене за протокол передочима (може він має хитру назву, або якось стандартизований), алемені це й не потрібно — мені потрібно лише відрізнити 4 кнопки істан повтору. Тому говнокодитимемо спрощувати :) Залізо - така самаардуїно нано за пару доларів. Від Arduino я використовую тількизавантажувач, пишу на C. На початку бачимо послідовність 0x00, 0x00, 0xFF, 0x5D, 0x55. Що в ньому гарного? По-перше те, що мисміливо можемо пропустити перших штук 8 змін полярності сигналупросто так (на морочаючись із частотою), а потім використовувати0x55 (aka 01010101) для синхронізації частоти. Для вірностівиміряємо довжину кожного 0 і 1 у цьому самому 0x55, відкинемо паруграничних значень, а решту середніх. Потім почекаємо трохи, і черезрозрахований інтервал часу рахуємо всі необхідні нам 80 біт.Загалом, даремно я тут розпинаюсь — це ж не форум програмування.Коротше, кому цікавий код — сюди (тапками не кидками — це Proof ofConcept, не більше) Підключив емулятор до приймача, перевірив, щоперший емулює, а другий приймає, сходив у машину, подивився, щокоманди від справжнього керма приймач теж успішно розпізнає і пішовприкручувати його до блутуса. Тут теж описувати поки що нічого —через транзистор на 250мс після отримання команди подаю +3В накомандну ногу, і все. Докладніше опишу в наступних серіях; )
Засідка на мене чекала в іншому місці. Підключив блутус, перевіривудома, що все ОК, несу до машини. Вмикаю. Грає. Rewind - нателефоні включається наступний трек, а звук у колонках зникає - ЦПвирубує при перемотуванні входи передусилка: (до такої засідки яготовий не був. Друга засідка - це мотор, який не так простовідключити, і який смикає дзижчить при перемотуванні. Але ценісенітниця в порівнянні з тим, що я можу слухати тільки непарнітреки :D.
Проміжний підсумок:протокол розібраний, але для повноцінноговкорячення блутуса - we need to go deeper; )
Забігаючи вперед - зараз блутус стоїть у машині, треки з кермаперемикаються, касетний механізм фізично відсутній. Але про це унаступних серіях :)
" а я пішов робити емулятор кнопок на кермі :) У принципі робититам особливо нічого - взяв Arduino nano, що підвернулася під руку, причепив 4 кнопки, написав невелику програмку, пів- години витративна підбір затримок - і вуаля :) Хіба тільки із затримками накосячив- у Make-файлі поставив частоту процесора в 20МГц, а насправдікварц стоїть на 16 - тому затримки у числовому вигляді незбігаються з тим, що я побачив через логічний аналізатор . Ну тагаразд, підключаємо ардуїну до мафона, кнопаємо кнопочки, дивимося, що треки перемикаються, несемо мафон назад в машину і сідаємописати аналізатор! Я поняття не маю, що у мене за протокол передочима (може він має хитру назву, або якось стандартизований), алемені це й не потрібно — мені потрібно лише відрізнити 4 кнопки істан повтору. Тому говнокодитимемо спрощувати :) Залізо - така самаардуїно нано за пару доларів. Від Arduino я використовую тількизавантажувач, пишу на C. На початку бачимо послідовність 0x00, 0x00, 0xFF, 0x5D, 0x55. Що в ньому гарного? По-перше те, що мисміливо можемо пропустити перших штук 8 змін полярності сигналупросто так (на морочаючись із частотою), а потім використовувати0x55 (aka 01010101) для синхронізації частоти. Для вірностівиміряємо довжину кожного 0 і 1 у цьому самому 0x55, відкинемо паруграничних значень, а решту середніх. Потім почекаємо трохи, і черезрозрахований інтервал часу рахуємо всі необхідні нам 80 біт.Загалом, даремно я тут розпинаюсь — це ж не форум програмування.Коротше, кому цікавий код — сюди (тапками не кидками — це Proof ofConcept, не більше) Підключив емулятор до приймача, перевірив, щоперший емулює, а другий приймає, сходив у машину, подивився, щокоманди від справжнього керма приймач теж успішно розпізнає і пішовприкручувати його до блутуса. Тут теж описувати поки що нічого —через транзистор на 250мс після отримання команди подаю +3В накомандну ногу, і все. Докладніше опишу в наступних серіях; )
Засідка на мене чекала в іншому місці. Підключив блутус, перевіривудома, що все ОК, несу до машини. Вмикаю. Грає. Rewind - нателефоні включається наступний трек, а звук у колонках зникає - ЦПвирубує при перемотуванні входи передусилка: (до такої засідки яготовий не був. Друга засідка - це мотор, який не так простовідключити, і який смикає дзижчить при перемотуванні. Але ценісенітниця в порівнянні з тим, що я можу слухати тільки непарнітреки :D.
Проміжний підсумок:протокол розібраний, але для повноцінноговкорячення блутуса - we need to go deeper; )
Забігаючи вперед - зараз блутус стоїть у машині, треки з кермаперемикаються, касетний механізм фізично відсутній. Але про це унаступних серіях :)
"
) Хіба тільки із затримками накосячив - у Make-файлі поставивчастоту процесора в 20МГц, а насправді кварц стоїть на 16 - томузатримки у числовому вигляді не збігаються з тим, що я побачивчерез логічний аналізатор. Ну та гаразд, підключаємо ардуїну домафона, кнопаємо кнопочки, дивимося, що треки перемикаються, несемомафон назад в машину і сідаємо писати аналізатор! Я поняття не маю, що у мене за протокол перед очима (може він має хитру назву, абоякось стандартизований), але мені це й не потрібно — мені потрібнолише відрізнити 4 кнопки і стан повтору. Тому говнокодитимемоспрощувати :) Залізо - така сама ардуїно нано за пару доларів. ВідArduino я використовую тільки завантажувач, пишу на C. На початкубачимо послідовність 0x00, 0x00, 0xFF, 0x5D, 0x55. Що в ньомугарного? По-перше те, що ми сміливо можемо пропустити перших штук 8змін полярності сигналу просто так (на морочаючись із частотою), апотім використовувати 0x55 (aka 01010101) для синхронізаціїчастоти. Для вірності виміряємо довжину кожного 0 і 1 у цьомусамому 0x55, відкинемо пару граничних значень, а решту середніх.Потім почекаємо трохи, і через розрахований інтервал часу рахуємовсі необхідні нам 80 біт. Загалом, даремно я тут розпинаюсь — це жне форум програмування. Коротше, кому цікавий код — сюди (тапкамине кидками — це Proof of Concept, не більше) Підключив емулятор доприймача, перевірив, що перший емулює, а другий приймає, сходив умашину, подивився, що команди від справжнього керма приймач тежуспішно розпізнає і пішов прикручувати його до блутуса. Тут тежописувати поки що нічого — через транзистор на 250мс післяотримання команди подаю +3В на командну ногу, і все. Докладнішеопишу в наступних серіях; )
Засідка на мене чекала в іншому місці. Підключив блутус, перевіривудома, що все ОК, несу до машини. Вмикаю. Грає. Rewind - нателефоні включається наступний трек, а звук у колонках зникає - ЦПвирубує при перемотуванні входи передусилка: (до такої засідки яготовий не був. Друга засідка - це мотор, який не так простовідключити, і який смикає дзижчить при перемотуванні. Але ценісенітниця в порівнянні з тим, що я можу слухати тільки непарнітреки :D.
Проміжний підсумок:протокол розібраний, але для повноцінноговкорячення блутуса - we need to go deeper; )
Забігаючи вперед - зараз блутус стоїть у машині, треки з кермаперемикаються, касетний механізм фізично відсутній. Але про це унаступних серіях :)
"
) Хіба тільки із затримками накосячив - у Make-файлі поставивчастоту процесора в 20МГц, а насправді кварц стоїть на 16 - томузатримки у числовому вигляді не збігаються з тим, що я побачивчерез логічний аналізатор. Ну та гаразд, підключаємо ардуїну домафона, кнопаємо кнопочки, дивимося, що треки перемикаються, несемомафон назад в машину і сідаємо писати аналізатор! Я поняття не маю, що у мене за протокол перед очима (може він має хитру назву, абоякось стандартизований), але мені це й не потрібно — мені потрібнолише відрізнити 4 кнопки і стан повтору. Тому говнокодитимемоспрощувати :) Залізо - така сама ардуїно нано за пару доларів. ВідArduino я використовую тільки завантажувач, пишу на C. На початкубачимо послідовність 0x00, 0x00, 0xFF, 0x5D, 0x55. Що в ньомугарного? По-перше те, що ми сміливо можемо пропустити перших штук 8змін полярності сигналу просто так (на морочаючись із частотою), апотім використовувати 0x55 (aka 01010101) для синхронізаціїчастоти. Для вірності виміряємо довжину кожного 0 і 1 у цьомусамому 0x55, відкинемо пару граничних значень, а решту середніх.Потім почекаємо трохи, і через розрахований інтервал часу рахуємовсі необхідні нам 80 біт. Загалом, даремно я тут розпинаюсь — це жне форум програмування. Коротше, кому цікавий код — сюди (тапкамине кидками — це Proof of Concept, не більше) Підключив емулятор доприймача, перевірив, що перший емулює, а другий приймає, сходив умашину, подивився, що команди від справжнього керма приймач тежуспішно розпізнає і пішов прикручувати його до блутуса. Тут тежописувати поки що нічого — через транзистор на 250мс післяотримання команди подаю +3В на командну ногу, і все. Докладнішеопишу в наступних серіях; )
Засідка на мене чекала в іншому місці. Підключив блутус, перевіривудома, що все ОК, несу до машини. Вмикаю. Грає. Rewind - нателефоні включається наступний трек, а звук у колонках зникає - ЦПвирубує при перемотуванні входи передусилка: (до такої засідки яготовий не був. Друга засідка - це мотор, який не так простовідключити, і який смикає дзижчить при перемотуванні. Але ценісенітниця в порівнянні з тим, що я можу слухати тільки непарнітреки :D.
Проміжний підсумок:протокол розібраний, але для повноцінноговкорячення блутуса - we need to go deeper; )
Забігаючи вперед - зараз блутус стоїть у машині, треки з кермаперемикаються, касетний механізм фізично відсутній. Але про це унаступних серіях :)
" пів-години витратив на підбір затримок - і вуаля :) Хіба тількиіз затримками накосячив - у Make-файлі поставив частоту процесора в20МГц, а насправді кварц стоїть на 16 - тому затримки у числовомувигляді не збігаються з тим, що я побачив через логічнийаналізатор. Ну та гаразд, підключаємо ардуїну до мафона, кнопаємокнопочки, дивимося, що треки перемикаються, несемо мафон назад вмашину і сідаємо писати аналізатор! Я поняття не маю, що у мене запротокол перед очима (може він має хитру назву, або якосьстандартизований), але мені це й не потрібно — мені потрібно лишевідрізнити 4 кнопки і стан повтору. Тому говнокодитимемо спрощувати:) Залізо - така сама ардуїно нано за пару доларів. Від Arduino явикористовую тільки завантажувач, пишу на C. На початку бачимопослідовність 0x00, 0x00, 0xFF, 0x5D, 0x55. Що в ньому гарного? По-перше те, що ми сміливо можемо пропустити перших штук 8 змінполярності сигналу просто так (на морочаючись із частотою), а потімвикористовувати 0x55 (aka 01010101) для синхронізації частоти. Длявірності виміряємо довжину кожного 0 і 1 у цьому самому 0x55, відкинемо пару граничних значень, а решту середніх. Потім почекаємотрохи, і через розрахований інтервал часу рахуємо всі необхідні нам80 біт. Загалом, даремно я тут розпинаюсь — це ж не форумпрограмування. Коротше, кому цікавий код — сюди (тапками не кидками— це Proof of Concept, не більше) Підключив емулятор до приймача, перевірив, що перший емулює, а другий приймає, сходив у машину, подивився, що команди від справжнього керма приймач теж успішнорозпізнає і пішов прикручувати його до блутуса. Тут теж описуватипоки що нічого — через транзистор на 250мс після отримання командиподаю +3В на командну ногу, і все. Докладніше опишу в наступнихсеріях; )
Засідка на мене чекала в іншому місці. Підключив блутус, перевіривудома, що все ОК, несу до машини. Вмикаю. Грає. Rewind - нателефоні включається наступний трек, а звук у колонках зникає - ЦПвирубує при перемотуванні входи передусилка: (до такої засідки яготовий не був. Друга засідка - це мотор, який не так простовідключити, і який смикає дзижчить при перемотуванні. Але ценісенітниця в порівнянні з тим, що я можу слухати тільки непарнітреки :D.
Проміжний підсумок:протокол розібраний, але для повноцінноговкорячення блутуса - we need to go deeper; )
Забігаючи вперед - зараз блутус стоїть у машині, треки з кермаперемикаються, касетний механізм фізично відсутній. Але про це унаступних серіях :)
" пів-години витратив на підбір затримок - і вуаля :) Хіба тількиіз затримками накосячив - у Make-файлі поставив частоту процесора в20МГц, а насправді кварц стоїть на 16 - тому затримки у числовомувигляді не збігаються з тим, що я побачив через логічнийаналізатор. Ну та гаразд, підключаємо ардуїну до мафона, кнопаємокнопочки, дивимося, що треки перемикаються, несемо мафон назад вмашину і сідаємо писати аналізатор! Я поняття не маю, що у мене запротокол перед очима (може він має хитру назву, або якосьстандартизований), але мені це й не потрібно — мені потрібно лишевідрізнити 4 кнопки і стан повтору. Тому говнокодитимемо спрощувати:) Залізо - така сама ардуїно нано за пару доларів. Від Arduino явикористовую тільки завантажувач, пишу на C. На початку бачимопослідовність 0x00, 0x00, 0xFF, 0x5D, 0x55. Що в ньому гарного? По-перше те, що ми сміливо можемо пропустити перших штук 8 змінполярності сигналу просто так (на морочаючись із частотою), а потімвикористовувати 0x55 (aka 01010101) для синхронізації частоти. Длявірності виміряємо довжину кожного 0 і 1 у цьому самому 0x55, відкинемо пару граничних значень, а решту середніх. Потім почекаємотрохи, і через розрахований інтервал часу рахуємо всі необхідні нам80 біт. Загалом, даремно я тут розпинаюсь — це ж не форумпрограмування. Коротше, кому цікавий код — сюди (тапками не кидками— це Proof of Concept, не більше) Підключив емулятор до приймача, перевірив, що перший емулює, а другий приймає, сходив у машину, подивився, що команди від справжнього керма приймач теж успішнорозпізнає і пішов прикручувати його до блутуса. Тут теж описуватипоки що нічого — через транзистор на 250мс після отримання командиподаю +3В на командну ногу, і все. Докладніше опишу в наступнихсеріях; )
Засідка на мене чекала в іншому місці. Підключив блутус, перевіривудома, що все ОК, несу до машини. Вмикаю. Грає. Rewind - нателефоні включається наступний трек, а звук у колонках зникає - ЦПвирубує при перемотуванні входи передусилка: (до такої засідки яготовий не був. Друга засідка - це мотор, який не так простовідключити, і який смикає дзижчить при перемотуванні. Але ценісенітниця в порівнянні з тим, що я можу слухати тільки непарнітреки :D.
Проміжний підсумок:протокол розібраний, але для повноцінноговкорячення блутуса - we need to go deeper; )
Забігаючи вперед - зараз блутус стоїть у машині, треки з кермаперемикаються, касетний механізм фізично відсутній. Але про це унаступних серіях :)
" кнопаємо кнопочки, дивимося, що треки перемикаються, несемо мафонназад у машину і сідаємо писати аналізатор! Я поняття не маю, що умене за протокол перед очима (може він має хитру назву, або якосьстандартизований), але мені це і не потрібно - мені потрібно всьоговідрізнити 4 кнопки і стан повтору. Тому говнокодитимемо спрощувати:) Залізо - така сама ардуїно нано за пару доларів. Від Arduino явикористовую тільки завантажувач, пишу на C. На початку бачимопослідовність 0x00, 0x00, 0xFF, 0x5D, 0x55. Що в ньому гарного? По-перше те, що ми сміливо можемо пропустити перших штук 8 змінполярності сигналу просто так (на морочаючись із частотою), а потімвикористовувати 0x55 (aka 01010101) для синхронізації частоти. Длявірності виміряємо довжину кожного 0 і 1 у цьому самому 0x55, відкинемо пару граничних значень, а решту середніх. Потім почекаємотрохи, і через розрахований інтервал часу рахуємо всі необхідні нам80 біт. Загалом, даремно я тут розпинаюсь — це ж не форумпрограмування. Коротше, кому цікавий код — сюди (тапками не кидками— це Proof of Concept, не більше) Підключив емулятор до приймача, перевірив, що перший емулює, а другий приймає, сходив у машину, подивився, що команди від справжнього керма приймач теж успішнорозпізнає і пішов прикручувати його до блутуса. Тут теж описуватипоки що нічого — через транзистор на 250мс після отримання командиподаю +3В на командну ногу, і все. Докладніше опишу в наступних...






Коментарі12
День добрий. Питання простий-модуль блютуз спілкується з ардуїною по rx-tx?
Так
Тепер зрозуміліше. дякую. Хочу повторити схему емулятора сд з модулем блютуса але на гітхабі в блозі поляка Ковачика тільки скетчі в основному, а схеми з'єднання немає. Або все в них описано? осмислення.
Думаю, що схем немає через їхню очевидність - там тільки rx/tx і харчування, все типове
Так, мабуть так і є.а модуль блютуза на інший можна замінити?ат команди на модуль відомі.хочу замість xs3868 взяти BK3254.
Вітаю інженерний підхід. Скажи, якби контролер керма посилав CAN команди то було б простіше зібрати плату управління для не-can магнітоли?
Приблизно те ж саме - стати аналізатором на шину, подивитися на протокол і зварганити емулятор. За рахунок стандартності кана можна було заощадити пару годин на розробку софту, і вона платі потрібно було б вішати ще пару мікросхем або брати мікроконт...
Ти МОЗГ!
Зробив собі кнопочки на мультикермо, але працюють вони по радіоканалу.
Привіт! Цікава статейка. Дуже пізнавально. Якщо є хвилинка не підкажеш, куди чіпляв кнопочки на ардуїно нано, і до якого піну чіпляв провід для керування до гами 5. Дуже хочу повторити експеримент з твоєю програмою, а з ардуїнами не мав поки Моя зада...
Привіт. У принципі це досить очевидно з у програми (github.com/dmitryshagin/g…ar_wheel_simulator/main.c). Гамма причеплена до PORTB, пін 2, кнопочки все на PORTD, піни з 2 по 5. Якщо що незрозуміло - питай.
Привіт! Так, подивився. Дякую!