Например TDA7294

Форум РадиоКот :: Просмотр темы - Вопрос о соединении портов AT90S1200
Форум РадиоКот
https://radiokot.ru/forum/

Вопрос о соединении портов AT90S1200
https://radiokot.ru/forum/viewtopic.php?f=57&t=189886
Страница 1 из 1

Автор:  avisv [ Пт сен 08, 2023 14:18:49 ]
Заголовок сообщения:  Вопрос о соединении портов AT90S1200

Есть желание передавать данные от одного AT90S1200 к другому через порт B. Нужны ли какие-то резисторы вешать на линии порта B. Какие и каким образом?
Направление передачи очевидно можно передавать через какую-нибудь линию порта D.

Автор:  Martian [ Пт сен 08, 2023 14:37:21 ]
Заголовок сообщения:  Re: Вопрос о соединении портов AT90S1200

расстояние?
зачем передавать направление? Возьмите за основу UART - одна линия на передачу, другая линия на приём.

Автор:  >TEHb< [ Пт сен 08, 2023 15:23:22 ]
Заголовок сообщения:  Re: Вопрос о соединении портов AT90S1200

330 Ом просто на всякий случай.

Автор:  BOB51 [ Пт сен 08, 2023 21:29:14 ]
Заголовок сообщения:  Re: Вопрос о соединении портов AT90S1200

Достаточно трех линий для двустороннего обмена (если не использовать UART и соответствующую проверку достоверности кода).
Но то в основном в пределах одной конструкции - обмен между модулями.
8)

Автор:  OKF [ Пт сен 08, 2023 22:10:52 ]
Заголовок сообщения:  Re: Вопрос о соединении портов AT90S1200

Офигеть! Как же ж люди однопроводным UART-ом обходятся!
Я уже не говорю об 1-wire с паразитным питанием!

Автор:  AlexS4 [ Пт сен 08, 2023 22:15:45 ]
Заголовок сообщения:  Re: Вопрос о соединении портов AT90S1200

кроме uart я бы рассмотрел i2c, 1-wire (dallas), spi, 44780(4/8bit) в зависимости от расстояний и необходимых скоростей.

у AT90S1200 есть встроенные пуллапы, впринципе можно обойтись ими для низкоскоростных двунаправленных линий , а для uart и процчих однонапрвленных линий - просто двухтактный выход gpio настраиваем и все.

OKF, далеко не всегда требуется передавать гигабиты в секунду, часто в контроллерах требуются оч скромные скорости и потоки и 1w может оказаться разумнее чем sas, hdmi или eth10G :music:

Автор:  OKF [ Сб сен 09, 2023 08:51:43 ]
Заголовок сообщения:  Re: Вопрос о соединении портов AT90S1200

далеко не всегда требуется передавать гигабиты в секунду...

На 100%. Тем более, задача ТС не ясна. Вполне возможно что ему нужно передавать данные типа boolean.)

Автор:  avisv [ Сб сен 09, 2023 08:58:23 ]
Заголовок сообщения:  Re: Вопрос о соединении портов AT90S1200

Обе микросхемы расположены на одной плате. Хотелось бы максимальное быстродействие, поэтому параллельно. Но может быть действительно тетрадами, если только AT90S1200 так умеет(половина порта на выход,половина на вход, чтобы порты не переключать на вход и выход постоянно.
Данные типа 8 и 16 бит знаковые. Задача распараллеливание выполнения алгоритма.
Допустим: первая посылает второй два байта(может быть действительно тетрадами) и пока вторая их умножает( в AT90S1200 операции умножения нет), выполняет что-то еще, а когда готов результат, забирает его себе.

Автор:  BOB51 [ Сб сен 09, 2023 09:51:11 ]
Заголовок сообщения:  Re: Вопрос о соединении портов 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
;

Не факт, что оптимально, но надежно и вполне с задачами справляется.
:hunger:

Автор:  OKF [ Сб сен 09, 2023 13:03:14 ]
Заголовок сообщения:  Re: Вопрос о соединении портов AT90S1200

8 бит двунаправлено. С готовностями и стробами. Посмотрите на 580ВВ55.

Автор:  BOB51 [ Сб сен 09, 2023 15:24:28 ]
Заголовок сообщения:  Re: Вопрос о соединении портов AT90S1200

А сколько выводов для обслуживания ВВ55й потребуется?
AT90S1200 это ж МК аналогичный по упаковке аттини2313... Там же останется совсем маалооо лапок...
:roll:

Автор:  OKF [ Сб сен 09, 2023 16:45:10 ]
Заголовок сообщения:  Re: Вопрос о соединении портов AT90S1200

Я ж не про выводы, я про идеологию. Как происходит 8-ми битный обмен. Но, можно и упростить.
И ВВ55 - это чисто для примера. Нужно смотреть соответствующий режим.

Автор:  BOB51 [ Сб сен 09, 2023 19:11:40 ]
Заголовок сообщения:  Re: Вопрос о соединении портов AT90S1200

Так режим не особо отличается от аналогичного доступа к внешней памяти данных.
Плюс линии квитирования. 8 битная шина адреса/данных, строб записи, строб чтения, пара выводов для арбитража, линия "адрес/данные"... В принципе...
Можно адаптировать тот же протокол, что и у меня выше, только шина данных не в 1 бит, а в 8.
:roll:
Только вот для той AT90S1200 может и такое роскошь - там ведь всего 1К ПЗУ...
:(

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/