Отладчик i2c SPI 1-wire

После того как NXP прислали мне кучу всяких микросхем с интерфейсом i2c, я начал их раскуривать некоторые из них. Как известно работа с i2c устройствами сводится к тому, чтоб записать или считать значения хранящиеся в определённых регистрах микросхемы. Обычно на время изучения какой либо микрухи я городил на своей отладочной плате небольшой макет из контроллера, программатора, RS232<-> UART преобразователя и непосредственно самой микросхемы. Через компьютер посылаются команды и контроллер что-то передаёт по шине i2c или наоборот читает, отправляет стартовые и стоповые посылки итд. Примерно таким же образом у меня происходит процесс изучение микросхем с интерфейсами SPI и 1-wire. Чтоб не городить каждый раз тестовый макет было принято решение собрать универсальный отладчик с поддержкой протоколов i2c SPI и 1-wire.

Отладчик i2c SPI 1-wire


Сердцем девайса является микроконтроллер атмега8 в дип корпусе. Почему в дип? Потому что я давно мечтал его куда-то пристроить т.к. выводные детали мной уже почти не используются. Контроллер работает на частоте 8 МГц, этой частоты вполне достаточно да и при пониженном напряжении питания он должен работать вполне стабильно если верить даташиту. У отладчика существуют два рабочих напряжения: 3.3 вольта и 5 вольт. Сделано это для того чтоб не мучиться с согласованием логических уровней у микросхем которые питаются от 3.3 вольт.  Пониженное напряжение создаётся low drop стабилизатором и включается тумблером на плате. Вторая немаловажная микросхема это преобразователь интерфейса USB — UART на новой для меня микросхеме CP2102. Микросхема хорошо себя зарекомендовала: Ком порт не отваливается, скорость передачи данных высокая. И конечно цена тоже вполне адекватная (~2.5$).  Короче вполне достойная альтернатива FT232. Если нет свободного USB порта но есть лишний ком порт, то вполне запросто можно выкинуть эту микросхему и сделать преобразователь уровней на MAX232. Сойдет даже вот такой самодельный преобразователь интерфейсов о котором я писал ранее. Скажу сразу что микросхема очень мелкая:

Отладчик i2c SPI 1-wire

Запаять такое с феном не проблема, на счёт паяльника ничего сказать не могу. Запаивать её нужно так: На контактные площадки равномерно наносятся крошечные шарики припоя. Потом всё это дело щедро смазывается флюсом (я юзал обычный СКФ). После этого надо чтоб флюс немного подсох для загустения. Теперь самое важное — аккуратно поставить микросхему. За счёт флюса она прилипнет и никуда теперь не денется. После этого берем фен и греем до полного припаивания. Греть надо осторожно, следить чтоб флюс не закипал и не брызгался, в противном случае микросхему просто может сместить с её места брызгами. Кстати в процессе работы микросхема тёплая самую малость (едва уловимо если трогать рукой). Кроме этих двух микросхем почти ничего интересного больше в схеме нет:

Отладчик i2c SPI 1-wire

Для шины i2c и 1-wire нужна подтяжка. В данном устройстве она программно отключаемая, т.к. это весьма удобном потому что иногда эти резисторы уже могут быть впаяны в плату с какой либо i2c или 1-wire микросхемой. Так же есть возможность программно управлять питанием подключенного устройства. Для этого служит транзистор T1. Ставить можно любой p-n-p лишь бы тянул через себя нужный ток.  Так же в устройстве есть три светодиода: Зеленый — индикатор питания, Желтый — индикатор активности и Красный индикатор питания подключаемого устройства. В устройстве предусмотрена простенькая защита от короткого замыкания в виде токоограничивающих резисторов на тех линиях микроконтроллера которые являются выходами. Кроме линий входящих в интерфейсы i2c SPI и 1-wire так же присутствует линия f1. Её состояние может управляться программно. Пока не знаю для чего её использовать, просто сделал на будущее. Поскольку корпуса у меня пока нет, (он в пути) то пока юзаю голую платку. Все детали кроме контроллера в SMD исполнении:

Отладчик i2c SPI 1-wire

Самое сложное в этом устройстве это софт. Поскольку в процессе написания прошивки приходилось часто перепрошивать контроллер, то я впервые решил воспользоваться загрузчиком который совместим с программой прошивальщиком AVRPROG которая входит в состав AVR студии. Для того чтоб прошить контроллер в устройстве нужно подсоединить его к порту USB и в течении семи секунд пока горят все три светодиода, запустить прошивальщик. Если всё ок то выскочит окно с интуитивно понятным интерфейсом где нужно выбрать прошивку и нажать кнопку «прошить». Если прошивальщик не видит устройства то нужно поменять номер ком пора у вашего устройства. Желательно установить его в первом десятке ком портов. У меня например он висит на COM5 и всё отлично работает. Если программа для управления отладчиком не хочется конектиться к устройство, то причины и средства устранения те же — сменить номер порта в диспетчере устройств. Прошивка самого устройства не сильно замысловатая: Её задача просто напросто принимать байт по UART и определённым образом дрыгать ногами микроконтроллера. Написана она на микропаскале и подробно рассматриваться тут не будет. Исходник доступен — можете посмотреть сами что там и как. (Больше не доступен. Если очень надо — пишите на почту.) А вот про управляющую программу для компа стоит рассказать подробнее. Существуют три режима работы, по одному на каждый интерфейс: i2c, 1-wire и SPI. О каждом режиме по порядку:

I2C

Как и все остальные режимы, его можно выбрать нажав соответствующий пункт в меню режимов. После этого можно выбирать команды из списка справа и добавлять их нажатием кнопки с плюсиком, удалять добавленное можно крестиком а перемещать строки стрелками. Короче, интерфейс интуитивно понятный. Команды в списке вполне стандартные для интерфейса:

  • i2c_start — отправляет стартовую посылку
  • i2c_stop — отправляет стоповую посылку
  • i2c_write — отправляет байт в шину i2c
  • i2c_read — читает байт из шины i2c
  • i2c_read_last — читает последний байт из шины i2c

Кроме стандартных, было реализованы две дополнительные команды облегчающих работу с шиной:

  • i2c_write_reg — записать определённые данные в определённый регистр
  • i2c_read_reg  — прочитать данные из определённого регистра

Для корректной работы этих двух команд, должен быть верно указан адрес устройства (набор галочек сверху).  Как уже писалось выше — девайс поддерживает программное управление подтяжкой. Для этого используются следующие команды:

  • i2c_pullup_on — включить подтяжку
  • i2c_pullup_off  — выключить подтяжку

Для любого из трёх режимов существуют три одинаковые команды:

  • delay — задерживает выполнение следующей команды на заданное время
  • power_on — включает питание подключенного устройства
  • power_off — отключает питание

Отладчик i2c SPI 1-wire

Сейчас к отладчику подключена платка часов реального времени. На часах 15:47:33.

1-wire

Здесь почти тоже самое что и в предыдущем режиме, за исключением новых команд специфичных для этого интерфейса:

  • 1-wire_read — читаем байт из шины
  • 1-wire_write — пишем байт
  • 1-wire_reset — подаем в шину импульс сброса
  • 1-wire_pullup_on — подтянуть шину
  • 1-wire_pullup_off — выключить встроенную подтяжку

Поскольку ничего с данным интерфейсом кроме датчика DS18B20 у меня не было то подключил его:

Отладчик i2c SPI 1-wire

Сейчас датчик показывает температуру 26 градусов выше ноля.

SPI

Команды вполне очевидные:

  • spi_read — читаем байт из SPI
  • spi_write — пишем байт
  • spi_set_cs_1 — устанавливаем ChipSelect в единицу
  • spi_set_cs_0 устанавливаем ChipSelect в ноль

Ни какого девайса со SPI интерфейсом под руку не попалось, но судя по показаниям осциллографа всё работает адекватно.  Поэтому картинки тут не будет :-)

Чтоб всё заработало, нужно установить фьюзы.  Есть два варианта настройки фьюзов:  С использованием загрузчика  и без его использования. Пока я отлаживал весь этот софт, контроллер прошивался бесчисленное количество раз и постоянно подключать программатор мне надоело и я залил загрузчик. Это позволило прошивать контроллер прямо через USB порт. Загрузчик совместимый с AvrProg (есть в папке с AVR студией). Рекомендую сделать так же. Для того чтоб юзать загрузчик нужно прошить фьюзы так:

Отладчик i2c SPI 1-wire

После включения устройства с прошитым загрузчиком все три светодиода будут гореть около 7 секунд. За это время нужно успеть запустить AvrProg.  Если прошивальщик обнаружил загрузчик то откроется окно в котором нужно просто выбрать файл прошивки и нажать запись.

Если возможность прошивки через USB вам не нужна, то фьюзы можно ставить так:

Отладчик i2c SPI 1-wire

Ни каких других настроек не требуется. Ну разве что указать номер порта в настройках программы.

P.S. софт еще очень и очень сырой, поэтому скорее всего встретятся глюки о которых прошу сообщать сюды.

Скачать файлы проекта

Отладчик i2c SPI 1-wire: 177 комментариев

      1. да хотя бы экспорт в pdf без элементов и то было бы не плохо. буду просто счастлив. как раз назрела необходимость поиграться с i2c и тут наткнулся на твой проект. кстати, спасибо за такую интересную разработку. жду рисунок платы.

    1. Железный преобразователь гарантировано заработает на всех материнках.
      а в том что по ссылке я разочаровался. Отваливается иногда. Но скорее всего в моем случае это просто из-за отсутствия нормальной защиты от помех по питанию.

  1. Привет, Medved. Собрал я устройство, прошил контроллер, фьюзы выставил HIGH — 0xDB, LOW — 0x6Е. При включении появляется COM4 на плате горит только зеленый светодиод. Программа не видит подключенного устройства. В какую сторону копать? Контроллер живой 100%. По идее если я замкну 2 и 3 ноги мк, то в терминальной программе должен видеть эхо вводимых с клавиатуры символов? просто не понимаю, где проблема, в преобразователе или в контроллере.

    1. Да должен видеть эхо разумеется. Только память контроллера перед этим тестом сотри.
      прошивал авр студией? Я клоню к тому что со фьюзами дурацкая путаница вечно. единицы и нули перепутаны.

  2. Шил до этого студией. Сейчас выдернул контроллер (он на панельке), закоротил 2 и 3 контакт, в терминалке эхо есть. Контроллер перепрошил заново через avrdude, фьюзы выставил в нем же 0xDA 0x6E, теперь горят зеленый и желтый светодиоды, но прога по прежнему говорит что девайс не найден. Может быть проблема в кондерах (я поставил 0,01мкф вместо 0,1)?

      1. Кварц точно 8Мгц, проверил)) Скрин вечером сделаю. Такое впечатление что преобразователь интерфейсов и контроллер друг друга не понимают. Когда прога сканирует порты, видно что какой то обмен даными есть — желтый светодиод мерцает и при запуске avrprog тоже мерцает. Но не более того.

  3. А можете исходниками поделиться? Я начинающий, и очень хотел бы посмотреть на примере как реализован SPI и как происходит приём с UART. Просто очень хотелось бы собрать себе USB генератор на синтезаторе AD9951 и МК ATmega16

  4. Решил собрать данное устройство, и был сегодня очень разочарован….
    почему вы не инвертировали файл печатной платы?
    так я старался….. и все труды напрасно…
    Буду в спринте рисовать печатку. Заодно немного модифицирую…
    Но все равно хочу поблагодарить автора за данный проект! Респект Вам!!!
    Я все равно соберу это устройство.
    Скажите пожалуйста, у меня есть возможность прошить только внутри-схемно, можно у Вас попросить прошивочку для внутри-схемной прошивки, с ув. Артем

  5. Ясно, спасибо!
    а можно вопросик не по теме?
    Долго Вы потратили времени, на изучение программирования под Windows ?
    Я год как изучаю Си, и пишу всякие программки для МК Атмел.
    Хочу расширить знания и начать писать приложения, но увы не знаю с чего начать…… так как я самоучка.
    Не подскажите какую книгу можно почитать и в какой среде работать..
    Вы исходником не поделитесь?
    С ув. Артем

    1. Ничего подсказать не могу, так как для компа почти не пишу программ.
      Конкретно эта — написана на VB.
      Исходник только на выходных, напиши письмо (могу забыть) в субботу — отправлю.

  6. И так разработал платку в Sprintlayout 6.0
    Вот файл: http://zalil.ru/32654342
    через 10 дней после последнего скачивания файл будет удален.
    Автор: если не трудно добавьте плату в архив, многим будет гораздо легче в изготовлении. С ув. Артем

  7. Добрый вечер! Сегодня собрал устройство. С горем-пополам установил дрова
    на USB-UART не могу соедениться с устройством, и по автодетекту не ловит устройство, cp2102 определился сразу и стал дополнительный порт COM4 я его в программе и выбрал. подозреваю что не ту прошивку залил в контроллер.
    в архиве две прошивки, какую надо программатором заливать?
    Я залил эту > my_debug
    при втыкании в USB (при подаче питания на проц) зажигается зеленый светодиод.
    С ув. Артем

    1. Заливать надо my_debug.hex
      Если зеленый светодиод загорелся значит все запустилось.
      Операционка какая ? Попробуй этот новый ком порт сделать с номером 3 для интереса.
      Монтаж точно нормальный ? Кварц стоит правильный ? фьюзы не перепутаны?

  8. Так. Система у меня «семерка» фьюзы прошил на внешний кварц . Кварц 8мгц. Завтра попробую поменять порт. Спасибо еще раз за разработку!

  9. Так, проверил COM преобразователь. Он работает. Данные отправляю, и сразу те же данные получаю (соеденив RX & TX)
    Фьюзы залил в атмега8 такие.
    По умолчанию контроллер настроен на внутренний генератор 1мгц.
    Я изменил фьюзы только CKSEL 3…1 поставил так CKSEL3..0 = 1110
    Согласно даташиту это настроено на внешний кварцевый резонатор от 3 до 8мгц.
    Всех остальных фьюзов не трогал.
    Подозреваю что изза «семерки» не корректно работает…

  10. Наверное сейчас попробую от внутреннего тактового генератора запустить….
    уже и плату идеально отмыл, и всеравно не видит отладчик устройство…..

  11. Напиши пожалуйста как нужно зашить фьюзы….
    желательно фото всех фьюзов. (прошивал как на внешний кварц, так и на внутренний генератор частотой 8мгц) программой устройство не определяется….:(
    по неосторожности прошил SPIEN
    теперь буду подымать параллельным программатором.
    очень повезло что на работе есть программатор «тритон»

    1. Картинка не открывается.
      Можешь протестить девайс следующим образом:
      Подключаешься к ком порту любой терминальной программой на скорости 19200 и передаешь английскую маленькую букву a. После нее отправляешь ДВА символа с кодом 13 (по сути дела два раза ввод нажать) и после этого желтый светодиод мигнет и девайс ответит буквой P.

  12. Действительно сцилка битая… :(((
    Вчера работала..

    > Можешь протестить девайс следующим образом:
    Подключаешься к ком порту любой терминальной программой на скорости 19200 и передаешь английскую маленькую букву a. После нее отправляешь ДВА символа с кодом 13 (по сути дела два раза ввод нажать) и после этого желтый светодиод мигнет и девайс ответит буквой P.

    Вооо !!! :)) Это мне уже очень нравится!
    Сегодня протестирую!

    Еще раз спасибо за данный проект!!! Оооооочень полезное устройство!
    Ты со мной поделишься исходником? Ты просил в субботу напомнить.
    artyombooster@rambler.ru

    1. Фьюзы правильно стоят вроде.
      Я этой прогой уже сто лет не пользовался, выставляю фьюзы в юзерфрендли интерфейсе Avr студии.

      Если девайс на букву «а» отвечать не будет то напиши программку которая бы возвращала эхо и залей в контроллер. Может что-то с tx rx ногами у него…

  13. Хорошо! я сегодня протестирую!
    Если ответа не будет, попробую еще на внутренний генератор фьюзы сменить. Все таки думаю не в rx tx проблема кроется.. По думываю что косячный сам кварц, снял БУ-шный с шасси принтера.
    А ты на ассемблере ваял для контроллера прошивку?
    спасибо за исходник!
    Что то меня СИ сильно расслабил.. запутался в исходнику :)

  14. Пробовал отправлять букву а (ASCII) и пробовал отправять A(HEX), девайс не отвечает вобще. Залил программу — эхо — ответ сразу появился.
    Суть проблемы: комп упорно не видит устройство. Кварц на 12 Мгц, в прошивке я частоту поменял. Операционка — windows XP sp3
    В чём может быть проблема?

  15. собрал вообще не запускается. Я собрал только часть атмеги. Rx Tx подаю с обычного ком порта на мах232. светодиоды не загораются. Сначало зашил без фюзов, заметил перешил с фюзами ноль реакции. Шью пони прогом через ком. Прошу помощи…

    1. Всё понял чё ты имел в виду. Если вообще ничего не загорается — ошибка монтажа или неисправный контроллер. Возможно фьюзы не правильно стоят. Давай скриншот фьюзов посмотрим для начала.

  16. собрана часть с контроллером. Подключение к USB не собирал, контролера нет. Поставил обычный MAX232, на компе имею отдельный ком порт. И как сюда скрин выставлять?

      1. Проблема в том, что я не могу преобразовать HEX в BIN.
        У меня четыре программы Hex to Bin, и они все по разному делают конвертацию.
        Я попробовал твоей програмкой, вышло еще хуже. С 14 по 380 адрес идут одни 0000 ? и прошивка заканчивается на 640-м адресе.
        В предыдущих трех файлах по этим адресам что-то есть,но разное.
        А контрольная сумма у всех совпадает.

  17. Что-то этот девайс вынес мне мозг напрочь. После заливки прошивки, загорается зеленый светодиод и все — молчок. Не коннектится к проге. На осцилле вижу, что прога посылает на девайс строку «ааа», но ответа не получает. Написал простейшую прогу-эхо и залил не меняя фузов. В ней также вывел тактовую, деленную на 256, на оранжевый светик (FPWM на таймере TMR1). Вижу и эхо и 31,25КГц на ноге. Так, что чип и кварц (8МГц) и фузы непричем. Подозреваю, что прошивка скомпилена под другую тактовую частоту. Так, что прошу автора, если есть возможность, прислать исходник, для поиска косяка.

    1. И мне он вынес мозг… в итоге лежит платка без дела , жалко распаивать…
      Так мне и не удалось заставить ее дружить с программой. Постоянно выскакивает «устройство не обнаружено» один только раз удалось с коннектиться и то только раз.

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

    avrfreak@lazarus.mail.ua
    Заранее благодарю

Добавить комментарий