Заголовок сообщения: Вопрос о соединении портов AT90S1200
Добавлено: Пт сен 08, 2023 14:18:49
Родился
Зарегистрирован: Ср сен 05, 2018 18:07:35 Сообщений: 13 Откуда: Санкт-Петербург
Рейтинг сообщения:0
Есть желание передавать данные от одного AT90S1200 к другому через порт B. Нужны ли какие-то резисторы вешать на линии порта B. Какие и каким образом? Направление передачи очевидно можно передавать через какую-нибудь линию порта D.
Достаточно трех линий для двустороннего обмена (если не использовать UART и соответствующую проверку достоверности кода). Но то в основном в пределах одной конструкции - обмен между модулями.
Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.
кроме uart я бы рассмотрел i2c, 1-wire (dallas), spi, 44780(4/8bit) в зависимости от расстояний и необходимых скоростей.
у AT90S1200 есть встроенные пуллапы, впринципе можно обойтись ими для низкоскоростных двунаправленных линий , а для uart и процчих однонапрвленных линий - просто двухтактный выход gpio настраиваем и все.
OKF, далеко не всегда требуется передавать гигабиты в секунду, часто в контроллерах требуются оч скромные скорости и потоки и 1w может оказаться разумнее чем sas, hdmi или eth10G
Заголовок сообщения: Re: Вопрос о соединении портов AT90S1200
Добавлено: Сб сен 09, 2023 08:58:23
Родился
Зарегистрирован: Ср сен 05, 2018 18:07:35 Сообщений: 13 Откуда: Санкт-Петербург
Рейтинг сообщения:0
Обе микросхемы расположены на одной плате. Хотелось бы максимальное быстродействие, поэтому параллельно. Но может быть действительно тетрадами, если только AT90S1200 так умеет(половина порта на выход,половина на вход, чтобы порты не переключать на вход и выход постоянно. Данные типа 8 и 16 бит знаковые. Задача распараллеливание выполнения алгоритма. Допустим: первая посылает второй два байта(может быть действительно тетрадами) и пока вторая их умножает( в AT90S1200 операции умножения нет), выполняет что-то еще, а когда готов результат, забирает его себе.
В таком случае арбитраж готовности к приему/завершения обработки должен быть (помимо потока данных). Это еще и без контроля целостности (CRC или еще чего). У меня с таким трехпроводка справляется. К примеру (правда это ассемблер для mcs51, но алгоритм на любое семейство легко переделывается) Спойлер
Код:
; ; bspi_m.txt ; ; файл протокола приемопередатчика ; последовательного обмена с побитовой синхронизацией ; передача/прием ведется младшими битами вперед ; в девятибитовом формате ; первым идет пересылка флага "команда/данные" ; далее следует 8 бит данных(вектора команды) ; ; предшетвующее вызову подпрограмм содержимое ; аккумулятора не сохраняется !!! ; ;---------- ; ; bus_dtr equ N ; шина данных/запроса доступа ; по reset вход с внешней подтяжкой к +5 вольт ; при запросе выход с активным уровнем 0 ; при обмене соответственно или вход или выход ; с данными в прямом коде ; bus_clc equ N ; тактовый строб обмена данными ; по reset/cold init вход с внешней подтяжкой к +5 вольт ; при обмене соответственно вход(прием) или выход(передача) ; активный уровень 0 ; bus_qt equ N ; шина квитирования ; по reset/cold init вход с внешней подтяжкой к +5 вольт ; активный уровень 0 ; вход для передатчика, выход для приемника ; ;---------- ; ; модуль приемопередачи ; по умолчанию ; используется текущий регистровый банк ; ; .define cntbit_t R2 ; r2 rb0 счетчик бит ; .define cnt_tm R3 ; r3 rb0 счетчик таймера задержки ; .define data_t R7 ; r7 rb0 байт буфера данных ; .define txd_port Pх ; Рх как порт ввода/вывода и строба
; data_key: .dbit 1 ; флаг типа данные/команда ; data_key=0 - байт с данными ; data_key=1 - байт с командой ; ;---------- ; ; собственно передача data_key и байта данных ; перед вызовом программы данные должны быть загружены в ; аккумулятор ; и установлен в соответствие флаг data_key ;(data_key=0 - байт с данными ; data_key=1 - байт с командой) ; программа использует текущий регистровый банк ; .cseg bspi_txd: xch a,data_t ; данные помещены в data_t, R7 в ACC push ACC ; R7 в стеке mov a,cnt_tm push ACC ; R3 в стеке mov a,cntbit_t push ACC ; R2 в стеке orl txd_port,#(1<<bus_dtr || 1<<bus_clc || 1<<bus_qt) ; настройка порта ; за исключением at89s5x возможно потребуется настройка портов ; bus_dtr=bus_clc=bus_qt=ВХОД tx_on: mov cntbit_t,#8 ; mov c,data_key acall strob ; бит типа данных передан data_tx: xch a,data_t rrc a ; предсдвиг значения данных xch a,data_t acall strob ; бит данных передан djnz cntbit_t,data_tx tx_off: setb txd_port.bus_dtr ; страховое закрытие bus_dtr ; за исключением at89s5x возможно потребуется настройка портов ; шины bus_dtr=bus_clcbus_qt=ВХОД ; и bus_dtr=bus_clcbus_qt=1 pop ACC mov cntbit_t,a ; R2 восстановлен pop ACC mov cnt_tm,a ; R3 восстановлен pop ACC xch a,data_t ; предшествующее содержимое R7 восстановлено ; содержимое ACC не определено ret ;---------- strob: mov txd_port.bus_dtr,c ; выдать бит data_key на bus_dtr acall time ; задержка установки данных clr txd_port.bus_clc ; активируем запрос синхронизации acall time ; задержка установки данных tx_tp0: mov a,txd_port ; читаем входные линии Р1 в А jb ACC.bus_qt,tx_tp0 ; ожидание ответа приемника (bus_qt=0) setb txd_port.bus_clc ; деактивируем запрос синхронизации acall time ; задержка установки данных tx_tp1: mov a,txd_port ; читаем входные линии Р1 в А jnb ACC.bus_qt,tx_tp1 ; ожидание ответа приемника (bus_qt=1) ret ; ;----------*****---------- ; ; модуль приема ; ; не имеет защиты от превышения ожидания длительности строба ; сопровождения исходя из предположения, что обмен между модулями ; является основной частью программы в промежутках между ; исполнением команд ; т.е. допускается полный останов обмена ; программа использует текущий регистровый банк ; ; по выходу ; в data_key значение в соответствии с принятым (0 или 1) ; в аккумуляторе принятые данные в прямом коде прямой ; последовательности ; bspi_rxd: xch a,data_t push ACC ; R7 в стеке mov a,cnt_tm push ACC ; R3 в стеке mov a,cntbit_t push ACC ; R2 в стеке mov cntbit_t,#8 ; загрузить счетчик бит orl txd_port,#(1<<bus_dtr || 1<<bus_clc || 1<<bus_qt) ; настройка порта ; за исключением at89s5x возможно потребуется настройка портов ; /bus_dtr=bus_clc=ВХОД, bus_qt=ВЫХОД/ ; bus_dtr=bus_clc=bus_qt=ВХОД ; bus_dtr=bus_clc=bus_qt=1 rx_on: acall strobinp mov a,data_t rlc a ; изьятие data_key поскольку процедура mov data_key,c ; приема бита единая для всех бит data_rx: acall strobinp djnz cntbit_t,data_rx pop ACC mov cntbit_t,a ; R2 восстановлен pop ACC mov cnt_tm,a ; R3 восстановлен pop ACC xch a,data_t ; данные перемещены в акумулятор, R7 восстановлен ret ;---------- strobinp: mov a,txd_port jb ACC.bus_clc,strobinp ; простой в ожидании rx_tp0: acall time ; задержка установки данных mov a,txd_port mov c,ACC.bus_dtr xch a,data_t rrc a xch a,data_t clr txd_port.bus_qt ; активировать строб квитирования acall time ; задержка установки данных rx_tp1: mov a,txd_port jnb ACC.bus_clc,rx_tp1 ; ждем ответ передатчика setb txd_port.bus_qt ; деактивировать строб квитирования acall time ; задержка установки данных ret ; ;---------- ; ; возврат квитанции результата ; выполненной операции для ; "обработчиков команд "smart vectors"" ; Мастер в момент окончания квитирования ; последнего бита данных для смарт-команды ; выставляет bus_clc=0 ; и переходит в ожидание bus_qt=0 от приемника ; затем мастер выставляет bus_clc=1 и ожидает ; bus_qt=1 от приемника после чего продолжает ; выполнение программы согласно задачи ; Алгоритм квитирования тот же, что и у ; обычной пересылки бита, но выполняется ; в конце отправки смарт пакета ; сразу за пересылкой последнего бита данных ; мастером ; (байт команды+байт данных) - назначение ; такой квитанции - избежать обратной ; пересылки квитанционного байта данных ; от периферии мастеру ; (сокращение времени реакции) ; smart_qt_slave: mov a,cnt_tm push ACC mov a,txd_port jb ACC.bus_clc,smart_qt_slave ; ждем запрос передатчика clr txd_port.bus_qt ; актвировать строб квитирования acall time ; задержка установки данных qt0_p: mov a,txd_port jnb ACC.bus_clc,qt0_p ; ждем ответ передатчика setb txd_port.bus_qt ; деактивировать строб квитирования acall time ; задержка установки данных pop ACC mov cnt_tm,a ret ; ;---------- ; ; запрос ведущим "smart" квитанции ; от ведомого о завершении исполнения задачи ; smart_qt_master: mov a,cnt_tm push ACC clr txd_port.bus_clc ; Мастер в момент окончания ; квитирования последнего бита данных ; для смарт-команды выставляет bus_clc=0 acall time ; задержка установки данных qt2_p: mov a,txd_port jb ACC.bus_qt,qt2_p ; и переходит в ожидание ; bus_qt=0 от приемника setb txd_port.bus_clc ; деактивировать ; запрос квитирования acall time ; задержка установки данных qt3_p: mov a,txd_port jnb ACC.bus_qt,qt3_p ; и переходит в ожидание ; bus_qt=1 от приемника pop ACC mov cnt_tm,a ret ; ;---------- ; ; генерация интервала задержки ; time: mov cnt_tm,#8 ; интервал задержки djnz cnt_tm,$ ; ret ;
Не факт, что оптимально, но надежно и вполне с задачами справляется.
А сколько выводов для обслуживания ВВ55й потребуется? AT90S1200 это ж МК аналогичный по упаковке аттини2313... Там же останется совсем маалооо лапок...
Я ж не про выводы, я про идеологию. Как происходит 8-ми битный обмен. Но, можно и упростить. И ВВ55 - это чисто для примера. Нужно смотреть соответствующий режим.
Так режим не особо отличается от аналогичного доступа к внешней памяти данных. Плюс линии квитирования. 8 битная шина адреса/данных, строб записи, строб чтения, пара выводов для арбитража, линия "адрес/данные"... В принципе... Можно адаптировать тот же протокол, что и у меня выше, только шина данных не в 1 бит, а в 8. Только вот для той AT90S1200 может и такое роскошь - там ведь всего 1К ПЗУ...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения