Вход

Просмотр полной версии : Помогите реализовать/разработать двунаправленный порт ввода/вывода.



Viktor2312
04.05.2013, 10:39
...

Vladimir_S
04.05.2013, 11:26
Тут получается, что помимо 8 линий данных будет как минимум два сигнала. Первый ГОТОВНОСТЬ ПЕРЕДАЧИ ДАННЫХ (ГПД) от устройства А и ПОДТВЕРЖДЕНИЕ ГОТОВНОСТИ ПРИНЯТЬ ДАННЫЕ (ПГПД). Но вот дальше как то пока не получается сообразить. Нужен будет скорее всего ещё один сигнал КОНЕЦ ПЕРЕДАЧИ БЛОКА ДАННЫХ (КПБД) именно всего блока данных а не одного байта из этих всех данных. Но тогда наверное потребуется ещё два сигнала сигнализирующих о том, что байт данных выставлен на шину устройством А, первый и второй, что устройство Б приняло байт данных.
А не проще передавать два байта? Один из которых обеспечивает информацию по протоколу.

---------- Post added at 10:26 ---------- Previous post was at 10:14 ----------

И еще - может лучше последовательный протокол. Их много.И уже готовых.

Vladimir_S
04.05.2013, 12:48
В итоге имеем максимум 16 линий
Даже по трем линиям можно передать 8 (от 0 до 7) кодов информации.

AIS
04.05.2013, 13:52
Можно взять за основу протокол обмена данными с маленькими ЖКИ дисплеями : http://www.gaw.ru/pdf/lcd/lcm/melt/char/MT-16S2H.pdf
Там дополнительно к 8-битной шине данных используются ещё 3 сигнала : А0 - выбор передачи команды или данных, R/W - выбор чтение или запись, Е - строб данных.

Vladimir_S
04.05.2013, 14:53
Спасибо, будем подумать.
Я бы посоветовал не просто думать, а сэмулировать все это на чем нибудь типа PROTEUS.

Vladimir_S
04.05.2013, 15:41
Для обмена данными между двумя микропроцессорными системами построенными на базе КР580 серии.
КР580ВВ51 - приемопередатчик, но он последовательный.
http://www.google.ru/url?sa=t&rct=j&q=%D0%BA%D1%80580%D0%B2%D0%B251%20%D0%BE%D0%BF%D0% B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5&source=web&cd=1&ved=0CCwQFjAA&url=http%3A%2F%2Felancev.narod.ru%2Ftexno%2Fbb51%2 Fbb51.htm&ei=M_WEUf7pMujX4ASKp4GACw&usg=AFQjCNGVWN2aJYT-fzvAKy0NmThaBmFjwg&bvm=bv.45960087,d.bGE&cad=rjt

AIS
04.05.2013, 16:07
устройство Б в моём случае является как бы не ведомым по отношению к устройству А
Если два устройства равноправные и каждое может быть инициатором обмена данными, то возможны конфликты из-за одновременного начала передачи обеими устройствами. Тогда нужно предусмотреть повторные попытки неудачной передачи, а это потеря времени.
Проще организовать сеть , когда у каждого устройства будут порт (или несколько), на котором он будет мастером и другой порт (или несколько), на котором он будет ведомым.

Vladimir_S
04.05.2013, 17:40
PROTEUS я пока не осваивал и не изучал, по сему пользоваться им не умею, пока.
А вот это напрасно.Срочно начинай осваивать.

AIS
04.05.2013, 18:36
Просто не хочется применять КР580ВВ55А, но похоже придётся.
Нормально пойдет ВВ51. Просто нужно помнить, что не всякую программу имеет смысл запускать на многопроцессорной системе. Если процессорам раздавать задачи типа "посчитать 2+2", то больше времени потратится на передачу данных между процессорами, чем на полезную работу. А если раздать задачи, например просчета шахматных ходов, то время выполнения задачи будет намного больше передачи данных даже через ВВ51. И тогда применение ВВ51 вполне оправдано.

AIS
04.05.2013, 20:28
Хотел сказать, что если программа оптимизирована под многопроцессорную систему, то даже применение ВВ51 будет оправдано .

Vladimir_S
04.05.2013, 20:34
А если последовательные порты сделать на контроллерах мегагерц на 20, то будет и пошустрей, да и задача поинтересней.

MM
05.05.2013, 01:10
Если есть место на плате, целесообразно реализовать протокол ИРПР - на ИР23 и
прочей мелкоте. При этом аппаратно предусмотреть сброс флага наличия нового байта в регистре состояния при чтении регистра данных. Понадобятся 20 сигнальных линий - 8х2 шт. - данные, 1х2 шт. - строб, 1х2 шт. - прочитано.
На шине каждого камня будет 4 ячейки - регистр состояния приемника, регистр
данных приемника, регистр состояния передатчика, регистр данных передатчика.
Например, после начальной установки в регистре состояния передатчика будет
установлен бит Х - требование передачи. После записи в регистр данных передатчика этот бит сбросится в 0, пока не будет прочтен регистр данных на
адресате ( т.е. там, куда передан этот байт ). И , соответственно, наоборот -
т.е. устройства, в принципе, равноправны и могут обмениваться на максимальной для камня скорости ( не менее 50 кбайт для 8080 ).Теоритически можно даже
прерывания прицепить для наличия нечитанного байта и требования отправки байта. С ВВ55 скорость будет раза в 2 меньше - за счет программной обработки
флагов.

MM
05.05.2013, 13:30
1.Насчет двунаправленной шины данных - это теоритически невозможно в указанной конфигурации - т.к. все работает асинхронно. В крайнем случае понадобится дополнительные арбитражные проволоки и немного мелкоты ИС.
2.Теоритически могу изобразить с помощью кисти и мольберта - без указания
номеров ног, но с комментариями, и выложить на радикале. Пишите здесь.
ИС - ИР23, ТМ2 и т.п.

MM
05.05.2013, 15:41
Вот изобразил, но полная уверенность в работоспособности будет только после
макетирования. Извиняюсь за качество.
http://i031.radikal.ru/1305/1e/3fb137262f5d.jpg

---------- Post added at 15:41 ---------- Previous post was at 15:32 ----------

Да, на диаграмме перепад с 0в. до +5в. сигнала "Строб" надо сдвинуть так, что бы
он шел за перепадом сигнала "Буси" с 0в. до +5в.

Vladimir_S
05.05.2013, 16:19
Viktor2312, Ты ведь сам открывал тему:http://zx.pk.ru/showthread.php?t=21076
Так что тебе даже для практики работы с контроллером лучше организовать протокол обмена на нем.

MM
05.05.2013, 18:45
Изображенная Э3 сброса вполне работоспособна, но диодик все-таки неплохо поставить - при отключении питания возможен вариант, когда на конденсаторе С1
будет напряжение больше питания на более, чем 0.6 вольт - верный пробой входа ИС. Пробитая ИС будет сильно греться - в ней образуется закоротка питания при таком пробое. Я бы поставил на место КТ315 элемент ИС 155ЛП9 или даже 155ЛА18 -
если будет большая емкость С1 ( больше 2 мкф ). ( У 155ЛА18 300 ма нормальный выход ).

MM
05.05.2013, 21:01
Если с целью снизить питающий ток - транзистор весьма хорош для этих целей.
А если с целью уменьшить габариты - то ЛП9. Кстати, можно применить 555ЛП9 -
у нее худосочнее выход раза так в 3 по сравнению с 155, но для С меньше 1 мкф это
не критично. И резистор не плохо бы побольше поставить, от +5в. до конденсатора.
Необходимое время задержки для стандартного БП от ИБМ - 0.5-1.0 сек, -
когда напряжения достигнут нормы после его включения.

Ал-р
06.05.2013, 14:53
Почему обязательно с ОК ? Кстати индикация сигналов управления тоже не лишней будет, соответственно нужны 4мс - только не ЛН, а что-нибудь восьмиразрядное типа КР1533АП5,АП6 ...

tnt23
02.10.2013, 12:26
Описание режима 1 можно посмотреть тут:

http://en.wikipedia.org/wiki/Intel_8255#Mode_1

Перевести можно там же, в гугле, где если искать "580ВВ55 режим 1", то найдется большое количество лекций, рефератов и разъяснений.

Сам я, к сожалению, уже не помню ничего про режим 1 - занимался этим лет двадцать пять назад.

dk_spb
02.10.2013, 12:53
tnt23,
Ты поосторожнее с 8255, а то сейчас тебе выдадут:


Учту ваше мнение, но ещё почитаю в инете.
...
Спасибо не надо, не интересуюсь импортными приметивными недомикросхемами, и уж тем более не собираюсь читать, где всё на тарабарском языке написано. Мне это не интересно.

b2m
02.10.2013, 16:06
Не могу понять сигналы при этом автоматически формируются на выходах порта С или их всё таки нужно программно задавать.
Формируются автоматически, на то он и стробируемый режим.

tnt23
02.10.2013, 16:39
См. картинки по режиму 1 тут:

http://www.npeducations.com/2011/01/8255-programable-peripheral-interface.html

http://2.bp.blogspot.com/_D7hyTJPmWjw/TUDTVdPTIjI/AAAAAAAAA1E/8PFsAJAgd0I/s640/Fig+1.6.GIF

http://1.bp.blogspot.com/_D7hyTJPmWjw/TUDTqpuP_II/AAAAAAAAA1I/fgCcuNdQehw/s640/Fig+1.7.GIF

tnt23
02.10.2013, 17:09
CONTROL WORD - слово, которое нужно записать в CONTROL WORD REGISTER для настройки портов в нужные режимы. CONTROL в переводе с английского означает "управление", WORD - "слово", REGISTER - "регистр" (не уверен, что есть хороший русский эквивалент слову "регистр", разве что "ячейка", но интуитивно это, по-моему, не совсем то).

Соответственно, для настройки в режиме 1 порта А на вывод, а порта B на ввод управляющее слово получается 10101111. Используемые для квитирования линии порта C настраиваются автоматически, а неиспользуемые настраиваем на ввод.

tnt23
02.10.2013, 17:46
Таким образом получается, что каналы С0-С3 и С4-С7 нужно настроить на ввод, вот он ответ на мой вопрос. Получается, что мы можем считывать их содержимое, чтобы менять ход выполнения программы. Так как неиспользуемые нам не нужны, точнее мне, мы на них не будем обращать внимания.


Нет, это неправильное толкование. Посмотрите еще раз на картинки. Линии PC5..PC3 и PC2..PC0 используются АВТОМАТИЧЕСКИ для квитирования. Считывать их состояние вроде бы можно (см. документацию), было бы зачем.

Речь шла про неиспользуемые линии PC7..PC6. Их можно настраивать и использовать как угодно под свои нужды.

---------- Post added at 17:46 ---------- Previous post was at 17:40 ----------



И ещё небольшой вопросик, правильно ли я понял, если у меня в устройстве А и устройстве Б идентичные порты, идентично запрограммированные, то соответственно я порт А работающий на вывод, должен буду соединить с портом В, работающим на ввод, устройства Б. И также, порт В работающий на ввод, устройства А соединить с портом А, работающий на вывод, устройства Б, сигналы управления как вроде понятно, какой куда подсоединять, примерно так же как и с портами?

Насколько я понимаю, да. Меня только смущает описание сигналов квитирования, нужно почитать про них внимательнее.

tnt23
02.10.2013, 18:06
С неиспользуемыми выводами все хитрее. В зависимости от того, на вывод или на ввод настраиваются порты А/B, неиспользуемыми становятся разные линии порта C.

Смотрим даташит на 8255 (http://www.csee.umbc.edu/~cpatel2/links/310/data_sheets/8255.pdf)

Страница 3-112, иллюстрация 12, правая часть. Неиспользуемые линии в этом случае PC5..PC4.

tnt23
02.10.2013, 20:19
А вот что пишет Intel:

8255A Interfacing

The problem

Two (or more) 8255As may not be directly connected together in either Mode 1 or Mode 2. Additional logic is needed.


What does it take?

Many users attempt to form a high-speed 8-bit parallel bus using two 8255As in Mode 1 or Mode 2. At first glance, it appears that this can be done with the addition of one inverter for unidirectional transfer, and two inverters for bidirectional transfer, as shown in Figure 1 and Figure 2. In figure 1, only Port A control and data lines are shown; connections for Port B are similar.

The current 8255A AC specifications indicate that these connections will not work properly! The "handshaking" signals generated by the 8255A do not provide adequate STB pulse width and data set-up times for the input port.

http://www.intel.com/design/archives/periphrl/docs/7012.htm

tnt23
04.10.2013, 23:32
Там в аппноте есть еще и поясняющие картинки.

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

tnt23
05.10.2013, 00:29
Интуитивно чувствую, что здесь будут те же проблемы, что и с аксонами: ограниченность маршрутов и жуткие задержки с передачей.