Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
03.07.2007, 13:31
|
|
Прописка
Регистрация: 21.09.2006
Сообщений: 195
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Вот как раз здесь стык "канального" и "сетевого" уровней.
Все дело в том, что Вы описываете работу ДРАЙВЕРА.
Данные, которые Вы посылаете командой out(byte,$REG) - это данные, улетающие в ЛИНИЮ. Они могут представлять собой и пользоват. данные и адрес устройства.
Вот например:
1. out(AA,0x37 - отправляем адрес нужного устр-ва
2. out(03,0x37 -отправляем число перед. байт
3. if _receive=AA_ok then DEVICE_found - ответ устр-ва
4. while not (eof) out(data_byte,0x347 .-передаем данные.
Ясно?
|
|
|
|
03.07.2007, 13:32
|
|
Частый гость
Регистрация: 10.12.2004
Сообщений: 35
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от Faworit
|
Добрый день. Передавать и принимать по ШД в 1 байт это тривиальная задача и была неоднократно описана в различной литературе. Покопайтесь и сами удивитесь. Что касается адресации устройств, тут можно применять различные варианты, ну например использовать РТ-шки. Прошиваете код по принципу обычного дишифратора. У меня в разработке было так: на ШД комп выставляет адрес(использовал 5 бит старшие, но это не важно какие биты использовать), схема дишифрации запрашивает устройство и формирует сигнал для компа (вроде как "готов"), комп выставляет на ШД уже теперь данные и ждет снятия сигнала "готов" от устройства(не от дишифратора). Снятие готовности дает компу сигнал о принятии данных устройством. Для обмена данными комп-устройство-комп, в ЛПТ достаточно выводов для организации практически любого алгоритма работы. А количество внешних устройств, 20 не предел ( у меня было 32). VVK, если не сможете сами найти или нарисовать схему, пишите на майл(kryhtin2005@mail.ru), постараюсь Вам помочь
|
Спасибо Faworit, я написал мылом (если нетрудно ответьте там поподробнее)
|
|
|
|
03.07.2007, 13:43
|
|
Частый гость
Регистрация: 10.12.2004
Сообщений: 35
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
|
|
|
|
03.07.2007, 13:49
|
|
Прописка
Регистрация: 21.09.2006
Сообщений: 195
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Брр!
Никакого ступора!
Пишу на мнемоническом языке.(по-русски):
1. прд.в_порт_LPT(адрес_у-ва,адрес_порта_LPT);
2. прд.в_порт_LPT(число_польз_байт,фдрес_порта_LPT);
3. ждем_чего_нить_на_приеме_LPT_порта;
4. приняли_из_порта(адрес_порта_LPT)=ответ_устройства =›устройство_найдено;
5. пока_данные_не_закончились
прд.в_порт_LPT(данные,адрес_порта_LPT).
Так понятней?
|
|
|
|
03.07.2007, 14:09
|
|
Частый гость
Регистрация: 10.12.2004
Сообщений: 35
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от ant_
|
Брр!
Никакого ступора!
Пишу на мнемоническом языке.(по-русски):
1. прд.в_порт_LPT(адрес_у-ва,адрес_порта_LPT);
2. прд.в_порт_LPT(число_польз_байт,фдрес_порта_LPT);
3. ждем_чего_нить_на_приеме_LPT_порта;
4. приняли_из_порта(адрес_порта_LPT)=ответ_устройства =›устройство_найдено;
5. пока_данные_не_закончились
прд.в_порт_LPT(данные,адрес_порта_LPT).
Так понятней?
|
ага, только не пойму откуда компьютер узнает что такое AA (устройство) и какой у него адрес
|
|
|
|
03.07.2007, 14:17
|
|
Частый гость
Регистрация: 10.12.2004
Сообщений: 35
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от ant_
|
Вот как раз здесь стык "канального" и "сетевого" уровней.
Все дело в том, что Вы описываете работу ДРАЙВЕРА.
Данные, которые Вы посылаете командой out(byte,$REG) - это данные, улетающие в ЛИНИЮ. Они могут представлять собой и пользоват. данные и адрес устройства.
Вот например:
1. out(AA,0x37- отправляем адрес нужного устр-ва
2. out(03,0x37-отправляем число перед. байт
3. if _receive=AA_ok then DEVICE_found - ответ устр-ва
4. while not (eof) out(data_byte,0x347.-передаем данные.
Ясно?
|
А ведь если написать
out(AA,0x37
компилятор просто выдаст error message, что нибудь вроде AA: unknown
В общем, сначала...вот у меня есть устройства (штук 20) с 8 битными линиями, которые я присоединяю к параллельному порту. У порта есть адрес известный компьютеру, а у устройств своих адресов нет - на всех на них есть только один адрес который точно такой же как и у порта. Как же мне их адресовать? Наверно нужно написать драйвер для каждого из устройств?
|
|
|
|
03.07.2007, 14:51
|
|
Прописка
Регистрация: 21.09.2006
Сообщений: 195
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Нет. АА-это переменная, может быть любым идентификатором. Например, если Вы хотите обратиться к устр-ву 15, Вы пишете
out(0x0F,0x37 ;
Т.о, в линию отправится посл-сть 0b00001111.
Некое уст-во, имеющее на входе дешифратор, получит это число, сравнит его со своим, если совпадает, отправит ответ в виде заранее известного байта. Комп получит этот байт и поймет, что устро-во откликнулось.
|
|
|
|
03.07.2007, 14:53
|
|
Прописка
Регистрация: 21.09.2006
Сообщений: 195
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
А если не секрет, что Вы задумали?
Нарисуйте хотя бы примерную схему- что сие за система?
|
|
|
|
03.07.2007, 15:57
|
|
Частый гость
Регистрация: 18.02.2005
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Я ни когда не работал с параллельными портами, восновном с последовательными, но скажем если используются EPP или ECP режимы то при выводе данных там стробируется низким AUTOFEED сигналом, а вывод адреса стробируется низким SELECT IN сигналом !
Если поствить внешнее устройство(контролер),которое могло отлавлвать адрес, и взависимоти от него комутировать AUTOFEED и BUSY на нужные девайсы !
Извеняюсь если лезу с глупыми предложениями !
|
|
|
|
03.07.2007, 16:46
|
|
Прописка
Регистрация: 21.09.2006
Сообщений: 195
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:21.
|
|