Страница 1 из 2

USB -> "X" port, или помогите начинающему...

Добавлено: Пн дек 01, 2008 01:20:02
tytar
Доброе время суток! Заранее прошу не бить сильно!!!
Нужно собрать хитрый девайс...
Суть в следующим:
Подключаеться к USB и иметет три порта, чтото похожое на LPT...
Порт DATA(out/in)-8pin'ов
Порт Control(out only)-4(6)pin'ов
Порт Status(in only)-5(6)pin'ов
+ еще один пин как бы "аварийтый" при подачи на него сигнала работа контроллера останавливаеться и в ПК передаеться "код ошибки" или сигнал...
Программа+драйвер своя... Нужна помощ и наставления в деле програмирования МК
Вот откопал http://www-user.tu-chemnitz.de/~heha/ba ... -15.htm.en
Думаю использовать как на том сайте Atmega8 /48
Может как-то их исходники переделать, я то я в програмировании МК не очень селён... Тем более там на си, а я только на асме учусь...

По программе: программа будет передовать данные через USB в МК, а МК в порты...
Прошу помощи... :)

Добавлено: Пн дек 01, 2008 10:17:56
Goodefine
На сайте http://www.recursion.jp/avrcdc/ есть проект CDC-IO, на меге8/48 можно создать устройство ввода-вывода с 18-ю двунаправленными каналами. Можно и более многовыводную мегу выбрать. Со стороны ПК устройство видется как СОМ порт. Драйвера есть для винды и висты (собственно, драйвера стандартные, нужен только inf-файл). Посмотрите, может подойдет...

Добавлено: Пн дек 01, 2008 12:22:47
tytar
Goodefine писал(а):На сайте http://www.recursion.jp/avrcdc/ есть проект CDC-IO, на меге8/48 можно создать устройство ввода-вывода с 18-ю двунаправленными каналами. Можно и более многовыводную мегу выбрать. Со стороны ПК устройство видется как СОМ порт. Драйвера есть для винды и висты (собственно, драйвера стандартные, нужен только inf-файл). Посмотрите, может подойдет...
БОООльшое спасибо!!! Очень полезная вещь, Вот только но, у него все порты по 6 пинов, а мне на одном нужно 8??? Как тут быть???

Добавлено: Пн дек 01, 2008 12:36:06
Goodefine
Если слегка переделать исходник, можно позаимствовать два пина из другого порта. Вообще, правильно было бы для вашего случае адаптировать исходник полностью. Изменения коснутся только main.с
В принципе, возможно и переделывать не придется - если обойтись только соответствующим формированием команд/данных на стороне ПК...

Добавлено: Пн дек 01, 2008 15:55:43
tytar
http://www-user.tu-chemnitz.de/~heha/ba ... -15.htm.en

А что можете сказать по поводу этой штуке???

Добавлено: Пн дек 01, 2008 17:03:48
Goodefine
На самом деле те же яйца, только вид сбоку. Оба устройства базируются на USB-драйвере от obdev. Для работы с USB-LPT есть специально заточенный драйвер для винды, посмотрите как он работает с пинами, может и подойдет...

Добавлено: Пн дек 01, 2008 23:21:57
tytar
Goodefine писал(а):На самом деле те же яйца, только вид сбоку. Оба устройства базируются на USB-драйвере от obdev. Для работы с USB-LPT есть специально заточенный драйвер для винды, посмотрите как он работает с пинами, может и подойдет...
Не совсем понял о чем вы говорите? о моей или вашей ссылке?

Добавлено: Пн дек 01, 2008 23:59:47
Goodefine
Об этой
Драйвер для МК такой же как и здесь
Сайт разработчика драйвера
Вроде понятно написал...

Добавлено: Вт дек 02, 2008 10:11:58
tytar
Скажите, если я буду использовать мк в другом корпусе, тогда значение имеет номер "лапки" или номер порта? Мне кажеться порта...
Смотрл 2 схемы в них разные номиналы, можно ли как то сделать общее, к примеру по схеме : на одной 200 Ом на друго 68Ом на Data+ Data- почему разные номиналы??? Связано ли это с прошивкой??? или со схемой питания??? на одной схеме стоит LD1117 на другой диоды? ПОчему так? хочу истользовать ATMEGA8 в DIP28? а схема разработана под TQFP - корпус, могу ли я взять номиналы деталей со схемы этой http://www.recursion.jp/avrcdc/ и влепить в эту http://www-user.tu-chemnitz.de/~heha/ba ... /ul-16.gif ??? Будет ли работать???

Добавлено: Вт дек 02, 2008 15:18:08
Goodefine
tytar писал(а):...если я буду использовать мк в другом корпусе, тогда значение имеет номер "лапки" или номер порта? Мне кажеться порта...
Должно быть соответствие с буквой порта и номером пина...
tytar писал(а):... 2 схемы в них разные номиналы, можно ли как то сделать общее, к примеру по схеме : на одной 200 Ом на друго 68Ом на Data+ Data- почему разные номиналы??? Связано ли это с прошивкой??? или со схемой питания???
Это личные пристрастия авторов, прошивка тут не причем. За 220 Ом не знаю, но с 68-ю Омами работает...
tytar писал(а):...на одной схеме стоит LD1117 на другой диоды? ПОчему так?
Потому что конечный результат одинаков (получить 3.3В на сигнальных линиях USB) - кому что больше нравится. Кто-то стабилитроны на сигнальные линии ставит...
tytar писал(а):... хочу истользовать ATMEGA8 в DIP28?
Используйте на здоровье...
tytar писал(а):...могу ли я взять номиналы деталей со схемы этой http://www.recursion.jp/avrcdc/ и влепить в эту http://www-user.tu-chemnitz.de/~heha/ba ... /ul-16.gif ??? Будет ли работать???
Номиналы да, только обратите внимание, что сигнальные линии USB в этих проектах подключаются к разным пинам...

Добавлено: Вт дек 02, 2008 16:09:29
tytar
Goodefine писал(а):
tytar писал(а):...если я буду использовать мк в другом корпусе, тогда значение имеет номер "лапки" или номер порта? Мне кажеться порта...
Должно быть соответствие с буквой порта и номером пина...
tytar писал(а):... 2 схемы в них разные номиналы, можно ли как то сделать общее, к примеру по схеме : на одной 200 Ом на друго 68Ом на Data+ Data- почему разные номиналы??? Связано ли это с прошивкой??? или со схемой питания???
Это личные пристрастия авторов, прошивка тут не причем. За 220 Ом не знаю, но с 68-ю Омами работает...
tytar писал(а):...на одной схеме стоит LD1117 на другой диоды? ПОчему так?
Потому что конечный результат одинаков (получить 3.3В на сигнальных линиях USB) - кому что больше нравится. Кто-то стабилитроны на сигнальные линии ставит...
tytar писал(а):... хочу истользовать ATMEGA8 в DIP28?
Используйте на здоровье...
tytar писал(а):...могу ли я взять номиналы деталей со схемы этой http://www.recursion.jp/avrcdc/ и влепить в эту http://www-user.tu-chemnitz.de/~heha/ba ... /ul-16.gif ??? Будет ли работать???
Номиналы да, только обратите внимание, что сигнальные линии USB в этих проектах подключаются к разным пинам...
Во-первых, хочу выразить особую благодарность, ибо Вы, единственный, у кого есть желание и время на советы и помощ

Еще такой вопрос: собрался собирать сабж на основе этого http://www-user.tu-chemnitz.de/~heha/ba ... -15.htm.en
ибо в нём есть и драйвер и прошивка, так вот если собрать эту "фигню" смогу ли я обращаться на прямую к портам "типа" 378h 379h 37A???

Добавлено: Вт дек 02, 2008 17:15:36
Goodefine
Как обращаться к виртуальному LPT зависит от драйвера для винды. Нужно читать на него хелп. Драйвер под Винду штатный (работа как с COM-портом) и прошивка с исходниками есть и в CDC-IO. Более того, там рабочий проект для связки AVR Studio 4 + WinAvr20080610. Сдается мне его легче поднять...

Добавлено: Вт дек 02, 2008 17:59:01
PB_EXPERT
смогу ли я обращаться на прямую к портам "типа" 378h 379h 37A
У виртуальный портов не физических адресов, поэтому это не реально!

Добавлено: Вт дек 02, 2008 18:10:17
Goodefine
Это целиком и полностью определяется дровами между пользовательским ПО и виртуальным портом. Что мешает драйверу преобразовать адрес в номер соответствующего пина МК?

Добавлено: Вт дек 02, 2008 18:44:50
tytar
Goodefine писал(а):(работа как с COM-портом)
Не могли бы ткнуть носом, а то везде написано "...то работа с портами очень проста, то же что и с файлами..." а что-то конкретно ничего!...

Добавлено: Вт дек 02, 2008 19:47:41
Goodefine
Если вы про виртуальный LPT, то не ткну, ибо не копал. Что касается COM, в сети полно инфы. Со стороны МК нужно анализировать пришедшие байты и выдывать соответствующие управляющие последовательности. Если не хотите изменять исходник, посмотрите CDC-IO внимательно, там в readme есть краткий хелп:
CDC-IO command
function command format response
------------------------------------------------------------------
Who @ @ "cdc-io", CR-LF
Get ? addr ? data, CR-LF
Set = data addr = CR-LF
AND & Set & data addr & CR-LF
OR & Set | data addr | CR-LF
EX-OR & Set ^ data addr ^ CR-LF
Set Double $ data2 data1 addr $ CR-LF

addr: memory mapped I/O address in hex
data: 8 bit data in hex
delimiter: Tab, Space, CR, LF

predefined addr: (case-insensitive)
PINA, DDRA, PORTA
PINB, DDRB, PORTB
PINC, DDRC, PORTC
PIND, DDRD, PORTD

example:
DDRB ? (+delimiter) Replies DDRB value with CR-LF.
12 34 = (+delimiter) Write 0x12 to address:0x34, replies CR-LF.
FB PORTC & (+delimiter) Write (PORTC & 0xFB) to PORTC, replies CR-LF.
IO я не использовал, поэтому более конкретно не скажу. Я модифицировал AVR-CDC. К слову сказать, большой разницы нет...

Добавлено: Вт дек 02, 2008 22:20:23
tytar
Goodefine писал(а): модифицировал AVR-CDC...
А можно по-подробнее???
З.Ы. "Не ругайте", я только учусь! :)

Добавлено: Вт дек 02, 2008 22:39:43
PB_EXPERT
О портах здесь написанно http://www.pcports.ru/Articles.php
Это целиком и полностью определяется дровами между пользовательским ПО и виртуальным портом. Что мешает драйверу преобразовать адрес в номер соответствующего пина МК?
Даже самый крутой драйвер не может создать аппаратный регистр в области ввода/вывода процессора.
Драйвер это программа, а аппаратный регистр это железо.
Комп видит виртуальный порт как программу. К нему проще всего обращатся через API как к обычному порту.
Об этом здесь почитать можно http://www.pcports.ru/articles/lpt11.php
работа с портами очень проста, то же что и с файлами..." а что-то конкретно ничего!
Это работа через API.
Наиболее простой и универсальный способ общения с виртуальным портом.
Это касается COM порта.
С LPT всё немного сложнее - через API сложно управлять отдельными выводами, поскольку такой режим предназначен для принтера, а не для "дёргания лапками".

Для реального LPT порта (железного, имеющего аппаратные регистры) предпочтительнее использовать прямой доступ к портам (через драйвер разумеется, чтобы Винда не ругалась).

Добавлено: Вт дек 02, 2008 23:43:30
Goodefine
PB_EXPERT писал(а):...Даже самый крутой драйвер не может создать аппаратный регистр в области ввода/вывода процессора.
Драйвер это программа, а аппаратный регистр это железо.
Комп видит виртуальный порт как программу. К нему проще всего обращатся через API как к обычному порту.
Эксперт, объясните мне, пожалуйста, простую вещь. На пальцах...
Вот есть у нас устройство, которое обменивается по интерфейсу USB c помощью custom-class или hid-custom-rq или hid-data или... не важно. Нестандартный HID, в общем.
На стороне ПК необходим драйвер, посредством которого будет осуществляться передача и прием данных между устройством и программой пользователя на ПК.
Что нам мешает, в принципе, таким образом написать драйвер, чтобы реализовать передачу команд или чтение данных из порта в формате set(adress), reset(adress), get(adress)? adress-ом будет поставленный в соответствие РАЗРАБОТЧИКОМ один пин (или группа пинов) совпадающий (ие) по цоколевке на LPT разъеме со стандартным по физическому положению и адресу. Программа в МК, приняв некие данные (здесь разработчик сам рисует протокол передачи) по идентификатору команды понимает суть необходимых действий, а по принятому адресу - выбирает соответствующий пин.
Т.е. программа в МК действует с драйвером на ПК в единой связке, обеспечивая для пользователя иллюзию работы с физическим LPT. Драйвер можно научить представляться Винде виртуальным портом. Это не помешает ему принимать данные (команды) с параметром адреса, который он САМ (после обучения разработчиком)ставит в соответствие НАШЕМУ устройству...
Или я чего-то глобально недопонимаю?...

Добавлено: Вт дек 02, 2008 23:48:42
Goodefine
tytar писал(а): А можно по-подробнее???
В этой теме есть немного..