реклама на сайте
подробности

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> Как перевести AVREAL на работу с USB?, AVREAL работает через LPT, как заставить через USB?
singlskv
сообщение Feb 10 2008, 16:03
Сообщение #46


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(bodja74 @ Feb 10 2008, 18:26) *
Ок. Вот содержание функции инициализации CommOpen.
А ReadFile +- пару строк ?
Go to the top of the page
 
+Quote Post
bodja74
сообщение Feb 10 2008, 17:53
Сообщение #47


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(singlskv @ Feb 10 2008, 20:03) *
А ReadFile +- пару строк ?


Вот ReadFile
Код
'-------------------------------------------------------------------------------
' CommRead - Read serial port input buffer.
'
' Parameters:
' intPortID - Port ID used when port was opened.
' strData - Data buffer.
' lngSize - Maximum number of bytes to be read.
'
' Returns:
' Error Code - 0 = No Error.
'-------------------------------------------------------------------------------
Public Function CommRead(intPortID As Integer, strData As String, _
lngSize As Long) As Long

Dim lngStatus As Long
Dim lngRdSize As Long, lngBytesRead As Long
Dim lngRdStatus As Long, strRdBuffer As String * 4096
Dim lngErrorFlags As Long, udtCommStat As COMSTAT

On Error GoTo Routine_Error

strData = ""
lngBytesRead = 0
DoEvents

' Clear any previous errors and get current status.
lngStatus = ClearCommError(udtPorts(intPortID).lngHandle, lngErrorFlags, _
udtCommStat)

If lngStatus = 0 Then
lngBytesRead = -1
lngStatus = SetCommError("CommRead (ClearCommError)")
GoTo Routine_Exit
End If

If udtCommStat.cbInQue > 0 Then
If udtCommStat.cbInQue > lngSize Then
lngRdSize = udtCommStat.cbInQue
Else
lngRdSize = lngSize
End If
Else
lngRdSize = 0
End If

If lngRdSize Then
lngRdStatus = ReadFile(udtPorts(intPortID).lngHandle, strRdBuffer, _
lngRdSize, lngBytesRead, udtCommOverlap)

If lngRdStatus = 0 Then
lngStatus = GetLastError
If lngStatus = ERROR_IO_PENDING Then
' Wait for read to complete.
' This function will timeout according to the
' COMMTIMEOUTS.ReadTotalTimeoutConstant variable.
' Every time it times out, check for port errors.

' Loop until operation is complete.
While GetOverlappedResult(udtPorts(intPortID).lngHandle, _
udtCommOverlap, lngBytesRead, True) = 0

lngStatus = GetLastError

If lngStatus <> ERROR_IO_INCOMPLETE Then
lngBytesRead = -1
lngStatus = SetCommErrorEx( _
"CommRead (GetOverlappedResult)", _
udtPorts(intPortID).lngHandle)
GoTo Routine_Exit
End If
Wend
Else
' Some other error occurred.
lngBytesRead = -1
lngStatus = SetCommErrorEx("CommRead (ReadFile)", _
udtPorts(intPortID).lngHandle)
GoTo Routine_Exit

End If
End If

strData = Left$(strRdBuffer, lngBytesRead)
End If

Routine_Exit:
CommRead = lngBytesRead
Exit Function

Routine_Error:
lngBytesRead = -1
lngStatus = Err.Number
With udtCommError
.lngErrorCode = lngStatus
.strFunction = "CommRead"
.strErrorMessage = Err.Description
End With
Resume Routine_Exit
End Function


Но это уже не актуально biggrin.gif
Все работает как швейцарские часы ,проблема действительно оказалась в иницилизации буферов.
beer.gif
Go to the top of the page
 
+Quote Post
gluckmaker
сообщение Mar 29 2008, 23:28
Сообщение #48


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 17-09-07
Из: Москва
Пользователь №: 30 594



А удавалось ли кому-нибудь заставить AVReal работать через Oxford OX16PCI95x? У меня при попытке это сделать не обнаруживает байт-бластер. Адрес порта смотрю через диспетчер устройств, пробовал указывать все 3 видимых там диапазона. Завтра посмотрю, происходит ли вообще что-нибудь с портом...
Go to the top of the page
 
+Quote Post
gluckmaker
сообщение Mar 30 2008, 16:08
Сообщение #49


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 17-09-07
Из: Москва
Пользователь №: 30 594



Посмотрел. Оказался дохлый сам байтбластер. Видимо, аврыл его определяет не только по наличию сопли между 7 и 10 ногой. После замены буфера как минимум прочитались фьюзы. Шить пока ничего не пробовал, но, по идее, должно работать. Карточку использую такую , из неё ещё можно путём некоторого рукоприкладства вывести 2 ком-порта.
Go to the top of the page
 
+Quote Post
Mik174
сообщение Mar 30 2008, 19:51
Сообщение #50


Местный
***

Группа: Свой
Сообщений: 357
Регистрация: 6-01-07
Пользователь №: 24 139



Такое ощущение, что нужно внести ясность, что собственно, нужно - шашечки или ехать?

Из личной практики:
Для настольного ПК купил плату PCI с двумя COM и одним LPT. Avreal с ней замечательно работает.
Проблема с адресом, на мой взгляд, высосана из пальца. Например, если я установлю дополнительную плату в комп, я на ее установку потрачу времени больше чем нужно, чтобы сунуться в свойства порта LPT и посмотреть его новый адрес. После этого открою командный файл и поменяю в нем одну цифру.
Ну так долго и сложно, прямо сил нет smile.gif

Если проблема в прошивке имеющихся плат, которые шились с помощью avreal, на машине у которой нет LPT, есть несколько вариантов:

1) идете, например, в Аргуссофт, покупаете там программатор AS-4 с подключением к USB и гальванической развязкой.
И работаете.
Лично сам, когда потребовалось выезжать на объект с ноутбуком где нет LPT, так и сделал.
Мне это обошлось в 1200 рублей - не огромные деньги.
Пока нареканий программатор не вызвал.

2) в продаже готовые переходники USB to COM, покупаете такой и берете любой программатор, который работает с СОМ-портом.

3) в инете легко можно найти как минимум несколько вариантов схем программаторов, которые можно изготовить самому. Ищете и собираете.
Go to the top of the page
 
+Quote Post

4 страниц V  « < 2 3 4
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 2nd September 2025 - 09:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016