Ока в Новосибирске

Клуб Окаводов Новосибирска
Текущее время: 29 мар 2024, 04:10

Часовой пояс: UTC + 7 часов




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: 30 янв 2013, 13:18 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 10 апр 2007, 22:36
Сообщения: 11206
Откуда: Новосибирск, Дзержинский
Авто: ВАЗ-21043
Имя: Алексей
Пилил пилил.. и запилил эмулятор 1ware-устройства. То есть можно взять подходящий микроконтроллер (МК), влить в него прошивку с предварительно введенным кодом ключа, который открывает дверь соседнего подъезда, и все - можно ходить туда как к себе домой! :) Другими словами мое устройство, прошивку которого я писал последние несколько дней, будет способно заменять собой ключ-таблетку и предъявлять код открытия двери вместо нее - главное этот код выудить с таблетки и вписать в программу перед прошивкой МК.

Только это нафик сейчас не надо никому, потому что таблеточных домофонов становится все меньше и меньше - их сменяет беспроводная технология. Но я приобрел некоторый опыт в программировании девайсов с доступом по последовательному интерфейсу. Даже пришлось напрягать мозги и разбираться с ассемблером, ибо потребовалось отлавливать импульсы с длительностью всего 5-6 микросекунд! Кстати, ассемблерные вставки меня уже не первый раз выручают. Блин, перейти на него вообще что ли? Не. Мне СИ больше нравится.

Ну а чем СИ плох? Тем, что он не всегда создает конечный оптимальный код, который работает не так эффективно, как мог бы работать, если его писать на ассемблере. То есть такая простая комбинация на Си, как while (PINC.2), которая делает вечный цикл, пока контролируемая линия находится в состоянии логической единицы, уже не способна гарантировано отловить короткий импульс лог.нуля в несколько микросекунд. Кроме того еще очень желательно отсчитывать время таймаута, что бы цикл все таки заканчивался, когда все разумные таймауты вышли (иначе код повиснет здесь, вместе со всем МК).

А asm-е такое написать можно запросто. При чем как ты напишешь код, так он и будет выполняться. При чем ты можешь посчитать сколько тактов занимает выполнение каждой команды и сколько каждая из них займет времени (в СИ же твой код сначала переделается в ассемблер, а уже потом будет выполняться - и ты не знаешь как интерпретатор перевел твой сишный код и чего он там нагородил).

Ну а какая еще польза от моих открытий? Зачем еще нужен эмулятор? Ответ такой: в эмуляторе ценное не сама эмуляция таблетки или цифрового термодатчика DS18b20, а умение работать с шиной 1ware, но не в режиме master (когда МК читает устройства на шине), а в режиме slave (быть в шкуре того устройства на шине, к которому обращается master и делает с тобой что хочет). Master может читать память устройства slave, писать в нее, и всячески изголяться. Где это можно с успехом применить? Правильно, в организации связи между двумя МК! Я сейчас занят сборкой зарядного устройства для автомобильных АКБ с управлением от МК. Пришлось переделать схему, что дало расширение функционала. Но это привело к невозможности плавной регулировки вращения куллера и регулировке тока разряда. Самое простое - подключить куллер от 7 вольт и забыть, но мы же не ищем легких путей )) Самое простое в данном случае - использовать очень мелкий МК, буквально 8копытную smd-микроху с 2 спичечных головки. В него уже встроено ДВА канала ШИМ с частотой где то килогерц 15. Этого хватит поуши для куллера и управления разрядкой. Но встает вопрос как им управлять??? Надо же менять обороты куллера и менять ток разряда. В заряднике уже есть один большой МК. Он управляет всем, является сердцем устройства. И вот тут пришла идея организовать связь этих двух МК по всего навсего одному проводу. Основной МК будет слать в малый МК новые значения ШИМ для регулировки куллера и разряда, а взамен будет забирать состояние малого МК.. ну или даже просто информацию о том, принял ли он предыдущую команду. В большом МК уже поднята шина 1ware (через нее читаются температуры обоих силовых радиаторов), а вот официальной 1ware-slave библиотеки для AVR нет в природе (да и самодельных под СИ и компилятор CVAVR не нашел).

По скоростям. Конечно если требуется гонять между МК огромный объем инфы, шина 1ware не катит. Она пригодится для связки, не особо критичной к скорости обмена на шине. Хотя 8 байт(64бита) пулять со скоростью 1 бит за 45микросекунд оно умеет ну очень быстро. А как быстро? Так же быстро, как домофон считывает ключ - мы и не замечаем, что целых 64 бита (8 байт) успели отлететь за короткое касание в доли секунд.

Кстати, без 2х-лучевого осциллографа я бы ничего не сделал! Ровным счетом. Не на столько я профи, что бы такие сложные вещи писать на раз, без проверки, с гарантией что после написания все заработает как надо. Речь идет о микросекундах. Чуть не так повернулся - и все 64 бита ушли в космос.

Изображение
Красным цветом, слева направо:

остаток импульса сброса, инициированного master-ом,
затем на 40мксек шина поднимается в 1 и
снова прижимается, но уже slave-устройством на 150мксек (ответ мастеру, что "я тут")
270 мксек снова в 1
затем идет побитная передача команды 0х55h согласно даташиту - единица, ноль, единица, ноль

Снизу желтым цветом - проверка того, на сколько написанный мной алгоритм верно определяет начало передачи следующего бита (тестовый режим).

_________________

Поблагодарить автора:
Контакты:
Телеграмм: alexSh154
Вконтакте
Одноквассники
Instagram
Skype: искать oka275 (в англ.раскладке)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 31 янв 2013, 01:51 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 10 апр 2007, 22:36
Сообщения: 11206
Откуда: Новосибирск, Дзержинский
Авто: ВАЗ-21043
Имя: Алексей
Запилил ROM SEARCH. Теперь эмулятор еще и находится по команде 0xF0.
Пишу для тех, кто понимает.
Кто не понимает, но интересно - спрашивайте :)

PS. И опять без осциллографа я бы не сделал ничего :((( Период сигналов 3-5 микросекунд!!! Гдеж тут светодиодом или наушником отследишь наличие импульсов.

_________________

Поблагодарить автора:
Контакты:
Телеграмм: alexSh154
Вконтакте
Одноквассники
Instagram
Skype: искать oka275 (в англ.раскладке)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 22 июл 2016, 19:02 
Не в сети
Новичок

Зарегистрирован: 22 июл 2016, 18:58
Сообщения: 1
Имя: Евгений
Привет, Алексей. Тема ещё жива?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 22 июл 2016, 23:46 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 10 апр 2007, 22:36
Сообщения: 11206
Откуда: Новосибирск, Дзержинский
Авто: ВАЗ-21043
Имя: Алексей
Приветствую, Евгений. Собсно, какая тема? процесс передачи данных я уяснил, даже эмулятор сделал. Только решил я его не на самом высоком идейном уровне. В итоге будучи одним на шине работает, а в составе нескольких устройств на шине не хочет. Искал пути решения, но потом в основном проекте перешел на SPI и в использовании шины 1ware отпала необходимость.

Исходники лежат тут https://radiokot.ru/forum/viewtopic.php?f=61&t=84375

_________________

Поблагодарить автора:
Контакты:
Телеграмм: alexSh154
Вконтакте
Одноквассники
Instagram
Skype: искать oka275 (в англ.раскладке)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 7 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB