Перейти к содержанию
    

Реализация моста PC -> SPI на attiny2313

Ну, а что программой (со стороны ПК) чего?

А то ведь прошивка такова, что требует общаться с собой по протоколу. Установки разных режимов и все такое.

Если бы режим работы SPI был фиксированный, то ничего бы такого строить не пришлось, а работало бы, как переходник.

 

А с другой стороны, чем вы станете свою Тиньку прошивать? Она, небось, тоже через SPI шьется. А если у вас есть такой SPI-программатор для прошивки вашей Тиньки, то, может быть, он сам уже и есть искомое устройство? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ксения, а вот с программой как раз самое сложное.

Пока план таков, развести плату, изготовить, пока идут детали, разобраться в исходниках от AVR910 (что там по чем, что отрезать, что добавить), когда придут детали собрать девайс, залить прошивку, и под прошивку уже писать писишную прогу (конечно путь полностью раздолбайский).

Программатор есть вот такой кетайский USBASP USBISP AVR

www.aliexpress.com/item/USBASP-USBISP-AVR-51-Series-Programmer-Download-Aluminum-Shell-64K-Limit-Support-WIN7-64-Freeshipping/1136431141.html

То что моя схема фактически схема программатора это вы верно заметили, на то и расчет чтобы максимально использовать то что уже работало и от чего есть исходники хотя бы зашивки.

Можно было бы теоретически заюзать программатор но что у него за зашивка как ей рулить? Потом хочется своего с тотальным контролем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не вмешивался в процесс, видимо, активация Вам помогла.

Второй аккаунт удалил, так как вторичная регистрация является грубейшим нарушением правил форума.

 

P.S.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Но, Ксения, как всегда респект!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я тоже как раз такое пытаюсь сделать. Чтобы через USB СПИ, I2C и ного дрыг.

Думаю, надо ли мне 2.5В и 1.8 Вольт. Пока заложился на 3.3В и 5В

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я тоже как раз такое пытаюсь сделать. Чтобы через USB СПИ, I2C и ного дрыг.

Думаю, надо ли мне 2.5В и 1.8 Вольт. Пока заложился на 3.3В и 5В

Да у меня у самого была сначала хотелка на USB, но подумал что будет совсем сложно для такого чайника как я USB программить (надеюсь с 232-м будете легче).

Но на всякий случай думаю оставить вилку в которую можно будет воткнуть китайский свисток аля FT232 (вместо max232)

типа такого www.aliexpress.com/item/1-pcs-USB-To-RS232-TTL-Auto-imported-Converter-Module-Converter-Adapter-For-Arduino-Worldwide-FreeShipping/1361575381.html

 

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

Тогда нужно ставить что-то из разряда преобразователей 74LVC244A, TXB0108PWR, ADG3300 с отдельным питаловом. А их где-то брать надо и они еще денег стоят, а жаба как всегда душит.

Наверно дополнительно паралельно фишке контроллера добавлю чтобы потом запаять можно было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да у меня у самого была сначала хотелка на USB, но подумал что будет совсем сложно для такого чайника как я USB программить (надеюсь с 232-м будете легче).

Но на всякий случай думаю оставить вилку в которую можно будет воткнуть китайский свисток аля FT232 (вместо max232)

типа такого www.aliexpress.com/item/1-pcs-USB-To-RS232-TTL-Auto-imported-Converter-Module-Converter-Adapter-For-Arduino-Worldwide-FreeShipping/1361575381.html

Что-то мне ваша задача становится всё непонятнее и непонятнее :). Ведь если вы взялись курочить входную часть ("транзюки" на max232 заменять или вообще "китайский свисток" ставить), то зачем зубами цепляетесь за tiny2313? Ведь тогда вас фактически ничего с ней не связывает. А цены у tiny2313 и mega8 примерно одинаковые (порой mega8 даже дешевле стоит). А если вы у китайцев уже что-то заказали (так и не поняла с ваших слов, что это было), то уже ни о какой-переделке и речи быть не может. Хотя высказались вы на этот счет настолько невнятно, что получилось, что вы голую ATtiny2313 из Китая заказали ("будет тинька, китайцы видимо уже запаковали и отправили в дальний путь"), когда ей в России цена 100 руб в розницу.

 

В ситуации, когда вы толком не пишите, что именно заказали в Китае, то обсуждать это невозможно. А если же вы сами что-то паять надумали, то жесткая привязка к tiny2313 выглядит нелепо.

 

Mega8 выглядит презентабельнее, чем tiny2313, не только потому, что у нее больше памяти (обоих типов), но и тем, что у нее SPI поддержан аппаратно. Т.е. кладешь в регистр SPI-данных передаваемый байт ("SPDR=байт") и ждешь когда в регистре статуса (SPSR) появится бит завершения передачи. Ну, еще есть регистр режима (SPCR), где можно желаемую частоту передачи установить, полярность и порядок передачи бит. Т.е. тут и программировать нечего, т.к. всё предельно элементарно.

 

А у tiny2313 (как и у прочих tiny), насколько помню, ничего такого нет. Я, кстати, сама когда-то писала SPI-интерфейс между как раз этой tiny2313 и двумя штуками АЦП AD7714 (у них связь по SPI). Там мне это ногодыгом пришлось на ассемблере писать. Сама-то программа у меня на Си была написана, а функцию эмуляции SPI на ассемблере писала для того, чтобы задержки по тактам нужные выставить. Понятно, что ни о какой универсальности тут и речи быть не может, когда мне пришлось подгонять скорость обмена под тактовую частоту МК (1.8432 МГц у tiny2313, и 2.4576 МГц у АЦП, чтобы последний с гарантией успевал принять строб). А к tiny2313 я была привязана тем, что вся конструкция питалась от линий RS232 и других источников питания не было. Вот и пришлось экономить (tiny более экономичная, чем mega).

 

Но вы-то не привязаны к питанию от RS232, поскольку можете запитаться от девайса. И это совершенно правильное решение, если заранее не знаете, 5-вольтвый будет девайс, 3.3-вольтовый и того меньше. А раз так, то зачем вам tiny2313 со всеми неудобствами, сопряженными с ее выбором?

 

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

Тогда нужно ставить что-то из разряда преобразователей 74LVC244A, TXB0108PWR, ADG3300 с отдельным питаловом. А их где-то брать надо и они еще денег стоят, а жаба как всегда душит.

Верно, преобразование уровней не нужно, если питание схемы берется от девайса. А уж тем более, когда его напряжение питания заранее неизвестно.

 

Между тем, проблемы, которые я вижу, далеко выходят за рамки железа. Ведь SPI-интерфейс "синхронный". И хотя у него три провода (отдельно на прием и передачу), но прием и передача осуществляются одновременно. Т.е. вы не можете принять по своему PC/SPI-мосту требуемое число байт, не передав точно такое же число байт в девайс. Поэтому прием у вас всегда будет выглядеть, как эхо от передачи, которое в отличие от истинного эха, будет звучать иначе, чем передача.

 

Пошли дальше. Реальные устройства (например, АЦП, которые очень часто делают с SPI-интерфейсом) требуют соблюдения определенного протокола, подразумевающего серию обменов с задержкой. Например, чтобы прочесть данные из АЦП, ему сперва следует послать посылку с требованием того, что от него требуется (это либо содержимое регистров установок или готовые данные). Нужную посылку формируем и отравляем - это обычно 1-2 байта. Затем выдерживаем паузу для того, чтобы АЦП "осознал", что от него требуют, и успел приготовиться к передаче. После это передают какую-нибудь фигню типа 0xFF, прислушиваясь исключительно к ответному эху. И соответственно, столько раз, сколько байт ответной информации ожидается. В случае если пауза окажется недостаточной, то первый байт ответа может оказаться лажей, а дальше нарушиться синхронизация, т.к. в следующий раз АЦП не воспримет команду, а станет передавать тот байт, который не успел передать в прошлый раз. Но может случиться беда и в том случае, если пауза затянется, тогда АЦП может решить, что произошел сбой по таймауту и прекратить передачу данных (а точнее - передавать вместо них муру).

 

Во многих случаях при работе с АЦП используют дополнительную линию сброса/синхронизации (ее роль обычно выполняет chip selесt). В таких случаях желательно озаботиться тем, чтобы у PC/SPI-моста тоже такой провод был и им можно было программно дергать.

 

Всё это выливается в то, что PC/SPI-мост, пригодный для реальных задач, должен выглядеть не как поток, а как процедура, состоящая из нескольких шагов:

Шаг 1 - перевод линии CS (chip select) в положение, включающее у девайса слух.

Шаг 2 - передача K-байт команды, эхо от которой игнорируется.

Шаг 3 - временная задержка.

Шаг 4 - передача N-байт чепухи, эхо от которой передается в PC, как ответ девайса.

Шаг 5 - перевод линии CS (chip select) в положение, отключающее к девайса слух.

Если линия CS не используется, то шаги 1 и 5 удалять из протокола не требуется, т.к. тогда они ничему не мешают.

При этом очень желательно, чтобы посылка от PC к PC/SPI-мосту представляла собой готовую структуру данных, содержащую все байта команды и указание величины задержки между окончанием передачи команды и началом приема ответа. Сам ответ, чаще всего, тоже приходится паковать в структуру с заголовком, т.к. во многобайтных ответах бывает трудно разобраться, который из байт первый.

 

Сейчас я намекнула лишь на некоторые трудности, возникающие, когда девайсом является АЦП. А если это ... SD-карта?! Даже страшно себе представить последствия, если сделать PC/SPI-мост по-простецки.

 

Вот всё оно как-то так выглядит :), если относиться к этому делу серьезно и рассчитывать на практическую пользу от конструкции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мда Ксения, у вас не забалуешь :)

Прям напрягся пытаясь прочитать и понять.

 

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

Хочется весть путь пройти и посчупать самому. А надо все-то записать прочитать несколько регистров в некой микросхеме (SPI для управления) никакого рилтайма. И скорость не важна, хоть один регистр за секунду.

2313 потому что в книжке его увидел и предположил что это легко и может срастись, а китацы его привезут за ~60р с доставкой до дома и никуда ехать не надо (хотя наверно также и мегу привезли бы)

 

Вообщем признаюсь провафлил все выходные и плату так и не развел так что шить пока нечего.

Постараюсь исправиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Вы насчет ламерства не переживайте - на самом деле любая возня с микросхемами (и МК в том числе) выглядит точно так же, как будто ты ламер, поскольку каждый раз приходится "курить даташит" :), разбираясь с тем, как всё это приспособить к делу. При этом уже имеющиеся познания могут как помогать делу (если сходство имеется), так и мешать ему (если сходство обманчиво). А если и накапливается какой-то опыт, то он, по большей части, хранится не в памяти в виде знаний, а в выработке дисциплины понимания смысла разных даташитов, мануалов и прочих инструкций. Т.е. в способности видеть то, что написано, вопреки своим собственным предположениям на этот счет. В том же случае, когда такой дисциплины выработать не удалось, то первый же освоенный МК останется с тобой на всю жизнь :), т.к. переход с него на другой выльется в трудно преодолимую проблему. Впрочем, даже овладев дисциплиной, такой переход все равно дается с трудом, хотя и менее страшит.

 

Я-то сейчас в вами разговариваю не потому, что мне интересен предмет разговора, а просто впомнила, что сама когда-то точно также начинала с Tiny2313. Причем никто меня этому не учил. А поскольку сама изготавливать платы не умела, то купила себе готовую - вот такую https://www.olimex.com/Products/AVR/Development/AVR-IO/ с 4-ми релюшками (довольно мощными по переключаемой нагрузке). Tiny2313 в комплект не входила, пришлось ее купить отдельно и в ту панельку вставить. Да и программировала я на первых порах, выдергивая ее из панельки и вставляя в программатор, которым мне дали попользоваться. Ну, и что за программа тогда у меня была, легко догадаться - по командам от компьютера ("1-2-3-4") теми релюшками щелкала. По началу это были электрогирлянды на новогоднюю елку, а позже - включение по расписанию разных устройств в биохимической лаборатории, где я работала (рост микроорганизмов требовал специального режима искусственного освещения и периодического фотографирования внешнего вида колонии). Вот у меня две релюшки освещение включали, а третья фото снимала.

 

Кстати, взгляните на схему моей платки https://www.olimex.com/Products/AVR/Develop...VR-IO-B-sch.gif - за исключением реле, она удивительно похожа на ту схему, которую вы привели. Те же "транзюки" и диоды на тех же самых местах! Поэтому, как только я вашу (т.е. AVR910) схему увидела, то тут же вспомнила свою.

 

Хочется весь путь пройти и посчупать самому. А надо все-то записать прочитать несколько регистров в некой микросхеме (SPI для управления) никакого рилтайма. И скорость не важна, хоть один регистр за секунду.

2313 потому что в книжке его увидел и предположил что это легко и может срастись, а китацы его привезут за ~60р с доставкой до дома и никуда ехать не надо (хотя наверно также и мегу привезли бы).

Ну, и правильно решили. Это же не квантовая механика :), когда имеешь дело с природой, а вещи, сделанные людьми и для людей. А потому первые всячески старались, чтобы для вторых это было удобно и понятно. А потому и путь тут не тяжелый, и специального образования не требующий (достаточно почитать описания или разделы из популярных книжек). Нынче даже младшие школьники в Arduino играются, а там обычно mega8 стоит или чуть постарше. Это тоже вариант, который может вам в дальнейшем пригодиться, т.к. это - то же самое AVR-направление, что и Tiny2313. Отчасти именно поэтому я вам mеga8 сватала. Т.е. тут не тупик, а широкий проторенный путь, который даже сейчас не потерял актуальности (на этот счет можете почитать тему про Ardiuno в разделе "Общение").

 

Mega8 я тоже юзала тем же способом, что и tiny2313, когда она мне надоела :)

https://www.olimex.com/Products/AVR/Proto/AVR-P28-8MHz/

Эта плата еще дешевле оказалась, т.к. релюшек на ней не было. А было только питание, кварц и max232 (или какой-то его более дешевый китайский аналог). И саму mega8 тоже пришлось покупать отдельно в ту панельку вставлять. Зато есть целое поле с дырочками, куда всякие свои прибамбасы можно добавлять с самыми минимальными способностями к паянию :).

 

Ну, а когда мне и mega8 мне стало мало, купила себе такую https://www.olimex.com/Products/AVR/Proto/AVR-P40-8535-8MHz/ , только вставила в нее не mega8535, на которую, судя по названию, она была рассчитана, а самую крутую Мегу в DIP-корпусе - mega1284P, да и кварц вставила 16 МГц (он тоже там не припаян, а в гнезда вставляется). Народ, правда, надо мной смеется, увидев такую большую AVR-микросхемину, но мне она глаз не режет, а только радует :).

 

В общем признаюсь провафлил все выходные и плату так и не развел так что шить пока нечего.

Постараюсь исправиться.

К сожалению, после девальвации рубля, готовые платы, о которых я только что рассказала, стали стоить в рублях какую-то несоизмеримую с возможностями платы цену. Поэтому я вам их рекомендовать не стану, тем более что вы сами разводить платы умеете. Но я когда-то покупала их по цене 400-500 руб, что казалось мне не так дорого по сравнению с той вознёй, на которою мне бы пришлось идти, если все это делать самой. Тем более что так красиво я бы сделать не смогла :).

 

Кстати, вы какую Tiny2313 из Китая выписали? Ту, что с "PU" на конце маркировки в DIP-корпусе, чтобы вставлять в панельку, или с "SU", чтобы запаивать планарно на плату?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению, после девальвации рубля, готовые платы, о которых я только что рассказала, стали стоить ....

Кстати, вы какую Tiny2313 из Китая выписали? Ту, что с "PU" на конце маркировки в DIP-корпусе, чтобы вставлять в панельку, или с "SU", чтобы запаивать планарно на плату?

Ксения, спасибо что поделились опытом.

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

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

А 2313 под соик вот какой ATTINY2313A-SU.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вернувшись к исходному...

 

Неужели USB->RS232->RS-232->AVR->SPI дешевле и проще, чем USB-RS232 (только именно на базе упомянутой FT2232, или FT232H) - который сам по себе, если с ним работать через D2XX драйвер, может быть SPI, I2C, JTAG, или ногодрыгалка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вернувшись к исходному...

 

Неужели USB->RS232->RS-232->AVR->SPI дешевле и проще, чем USB-RS232 (только именно на базе упомянутой FT2232, или FT232H) - который сам по себе, если с ним работать через D2XX драйвер, может быть SPI, I2C, JTAG, или ногодрыгалка.

 

I2C с FT232 может быть сложней чем с AVR. Временные характеристики, необходимость задерживать ACK и так далее.

Нужны реал тайм мозги.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

I2C с FT232 может быть сложней чем с AVR. Временные характеристики, необходимость задерживать ACK и так далее.

Нужны реал тайм мозги.

Не понял. Реализация I2C в MPSSE у FTDI не соответствует спецификации от NXP?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не понял. Реализация I2C в MPSSE у FTDI не соответствует спецификации от NXP?

O! Уже? Круто, я и не знал, что такое есть уже. помнится, в FT245 такого не было.

И это, неизвестно что лучше:

программировать на стороне Виндоус MPSSE, или иметь обычный COM port и

запрограмировать firmware.

Кому как..

 

Минусы реализации все через MPSSE в том, что надо иметь драйвер и надо иметь программу, которая пользует этот драйвер.

Это не будет универсальным решением - воткнул и пользуйся.

А если сделать через обычный COM port и firmware, то можно из любой терминальной программы комманды отдавать.

 

Изменено пользователем A. Fig Lee

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...