Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
24.01.2011, 15:10
|
#11
|
Прописка
Регистрация: 23.01.2008
Сообщений: 102
Сказал спасибо: 0
Сказали Спасибо 21 раз(а) в 19 сообщении(ях)
|
Re: Опять про Басик
Сообщение от индюк
|
напрямую наладить связь проца с компом через узби выше моих сил с этой кучей энд поинтов и прочих идентификаторов
|
Не все так сложно как кажется.
Посмотри это и это.
Программы для компа и микроконтроллера - на бейсике.
|
|
|
|
24.01.2011, 19:22
|
#12
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,696
Сказал спасибо: 188
Сказали Спасибо 3,191 раз(а) в 2,068 сообщении(ях)
|
Re: Опять про Басик
да у меня проц lpc1768
|
|
|
|
26.01.2011, 06:09
|
#13
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,696
Сказал спасибо: 188
Сказали Спасибо 3,191 раз(а) в 2,068 сообщении(ях)
|
Re: Опять про Басик
ну вобщем работает связь через ком.
но все рвно как то странно
поставил значение
MSComm1.RThreshold = 50
MSComm1.InBufferSize = 10
последнее вообще никак не влияет ни на что судя по всему
50 - в 90% случаев считывается ровно 50 символов но в остальных случаях почему то больше на разные величины. на 3 на 5 на 10, если чото в винде проц занимает то вообще может на несколько десятков больше придти.
а если поставить MSComm1.InputMode = comInputModebinary то вообще приходит постоянно знак вопроса и всё. что не посылай ответ один
ну вобщем всем спасибо кто помог. это я пробовал данные передавать, не суть важно это пока.
поскольку ком такой же аттавизм как и лпт то если юзби не выйдет осилить то в крайнем случае через лпт передам - там и побыстрее и всегда все работало в режиме EPP потому что регистр напрямую читается
но если подскажите что не так у меня буду благодарен
Последний раз редактировалось индюк; 26.01.2011 в 06:12.
|
|
|
|
26.01.2011, 08:54
|
#14
|
Прописка
Регистрация: 04.08.2008
Сообщений: 203
Сказал спасибо: 33
Сказали Спасибо 75 раз(а) в 58 сообщении(ях)
|
Re: Опять про Басик
MSComm1.RThreshold-определяет после скольких принятых символов будет генериться событие
MSComm1.InputLen- определяет сколько символов забирать из буфера при чтении, при =0 забирает все принятые символы.
MSComm1.InBufferSize надо сделать в любом случае побольше и не скромничать.
__________________
|
|
|
|
26.01.2011, 09:51
|
#15
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,696
Сказал спасибо: 188
Сказали Спасибо 3,191 раз(а) в 2,068 сообщении(ях)
|
Re: Опять про Басик
а. понятно все теперь. тухлая система короче
|
|
|
|
26.01.2011, 10:14
|
#16
|
Прописка
Регистрация: 04.08.2008
Сообщений: 203
Сказал спасибо: 33
Сказали Спасибо 75 раз(а) в 58 сообщении(ях)
|
Re: Опять про Басик
Система вроде не тухлая. Это просто инструмент для получения результата. Хотя сам я на VB никогда не программировал, у меня он даже на компе не установлен. Народ вроде пользуется и доволен, что можно быстро получить результат, не особо напрягаясь
__________________
|
|
|
|
26.01.2011, 13:35
|
#17
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,696
Сказал спасибо: 188
Сказали Спасибо 3,191 раз(а) в 2,068 сообщении(ях)
|
Re: Опять про Басик
тухлая в том плане что как в проце регистр напрямую недоступен
вб6 очень даже нормальный язык, я на нем многое изучил.
правда в итоге все равно си учить пришлось))))
с ком портом я понял быстро результат не получишь.
а вот с лпт - намного быстрее. считал регистр - вот тебе и результат. во всем смыслах этого слова
|
|
|
|
26.01.2011, 13:55
|
#18
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Опять про Басик
Сообщение от индюк
|
а вот с лпт - намного быстрее. считал регистр - вот тебе и результат. во всем смыслах этого слова
|
Запросил доступ, ждешь разрешения, получил доступ, прочитал регистр, отдал доступ, ждешь подтверждения освобождения, и только теперь делаешь с полученными данными, что хочешь. Намного быстрее ЧЕГО?
|
|
|
|
26.01.2011, 14:00
|
#19
|
Прописка
Регистрация: 30.05.2010
Сообщений: 180
Сказал спасибо: 8
Сказали Спасибо 57 раз(а) в 39 сообщении(ях)
|
Re: Опять про Басик
вот эта программка полностью работает по приему бинарных величин.
Код:
|
Private Sub Command4_Click()
Dim Out(2) As Byte
Out(0) = &H2
Out(1) = &H2
q = &H2
MSComm1.Output = q
End Sub
Private Sub Form_Load()
Text2.Text = 0
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.Handshaking = comNone ' или 0 - никаких comXOnXoff или comRTS хотя и по умолчанию должен =0
MSComm1.RThreshold = 1 ' прерывание на каждом полученном байте, хотя как показала практика может
' принимать по 8 символов без прерывания если идут подряд, а если с разрывами во времени - то по 1
' MSComm1.InBufferSize = 1 'установить или спросить длину входного буфера (практически не влияет)
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub
Private Sub MSComm1_OnComm()
Dim InBuff(10) As Byte
Select Case MSComm1.CommEvent
' Errors
Case comEventBreak ' A Break was received.
Case comEventCDTO ' CD (RLSD) Timeout.
Case comEventCTSTO ' CTS Timeout.
Case comEventDSRTO ' DSR Timeout.
Case comEventFrame ' Framing Error.
Case comEventOverrun ' Data Lost.
Case comEventRxOver ' Receive buffer overflow.
Case comEventRxParity ' Parity Error.
Case comEventTxFull ' Transmit buffer full.
Case comEventDCB ' Unexpected error retrieving DCB]
' Events
Case comEvCD ' Change in the CD line.
Case comEvCTS ' Change in the CTS line.
Case comEvDSR ' Change in the DSR line.
Case comEvRing ' Change in the Ring Indicator.
Case comEvReceive ' Received RThreshold # of chars.
Text2.Text = Text2.Text + 1
InBuff = MSComm1.Input
Call HandleInput(InBuff)
Case comEvSend ' There are SThreshold number of
' characters in the transmit buffer.
Case comEvEOF ' An EOF character was found in the
' input stream.
End Select
End Sub
Sub HandleInput(InBuff() As Byte)
Text1.SelStart = Len(Text1.Text) ' устанавливает в конце "начало вставки"
Text1.SelText = CStr(InBuff) '"вставляет к имеющемуся"
End Sub |
|
|
|
|
05.01.2012, 08:40
|
#20
|
Прохожий
Регистрация: 06.01.2009
Сообщений: 7
Сказал спасибо: 15
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Опять про Басик
Доброго времени суток.
Возможно очень поздно, но вставлю своих 5 коп.
При загрузке формы в VB6 всегда делаю проверку на открытость СОМ-порта (если он открыт и используется сторонней прогой - он не закроется, а выдаст ошибку что он открыт):
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
На счет передачи:
сначала:
MSComm1.PortOpen = True
выдержка до 40 мс (ставил и 10 мс)
передаю HEX - типа ( 4 байт адрес (точнее 2 байта) + 16 байт данных + 1 байт CRC:
MSComm1.Output = ":100130003F0156702B5E712B722B732146013421C7"
далее жду подтверждения от МК (если в контроллере прописана отправка "Y" при нормальном преме):
Private Sub MSComm1_OnComm()
If MSComm1.Input = "Y" 'получили подтверждение от МК
Send_Good = True 'выставляем флаг что все "ГУД"
Else
Send_Good = False 'если не дошло до МК
End If
End Sub
Эта проверка работает у Меня если выставлен: MSComm1.RThreshold = 1
Если пакет не дошел - повторно отсылаю его через 100 мс, и так до 5 раз.
Если пришло "Y" передаю следующий пакет, если в ответ тишина или какой то мусор - закрываю порт и выдаю типа: MsgBox "Устройство не отвечает", vbCritical.
По завершении передачи также делаю задержку до 40 мс и закрываю порт
MSComm1.PortOpen = False
На скорости 19200 работает без проблем, кабель 10м (правда витая пара).
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:53.
|
|