Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Непонятки с UART
Непонятки с UART
vladh Дата: Вт, 01.06.2021, 05:28  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 351
Репутация: 11   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Уважаемые, несколько дней бьюсь над кодом Modbus. И вот сегодня утром обнаружил неприятную вещь. Во время пересылки данных кто то меняет цифру 0 на 8. Т.е. я например посылаю значение 3, а на экране терминала рисуется 83. Или я посылаю 4 то все хорошо, рисуется 04. И так по разному с каждой цифрой. Либо это мой Протон так заточен, либо это делает версия Протеус. У меня Протеус 8.11. Может у кого другая версия попробуйте мой код.
Прикрепления: 9456581.rar(93.7 Kb)
ЯНДЕКС Дата: 01.06.2021
xvovanx Дата: Вт, 01.06.2021, 08:49  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 460
Репутация: 55   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата vladh ()
У меня Протеус 8.11. Может у кого другая версия попробуйте мой код

Беда в том, чтобы проверить ваш пример надо установить 8.11 или новее версию, а не всем это хочется wink

Сообщение отредактировал xvovanx - Вт, 01.06.2021, 08:54
vladh Дата: Вт, 01.06.2021, 09:03  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 351
Репутация: 11   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата xvovanx ()
Беда в том, чтобы проверить ваш пример надо установить 8.11 или новее версию, а не всем это хочется
Этого делать совершенно необязательно. Я же там привел рисунок схемы, которая состоит всего из двух элементов. Её можно быстро прорисовать в своей версии и опробовать.

Добавлено (01.06.2021, 12:35)
---------------------------------------------
Я вот сейчас гулял в обед и пришел к выводу, что это скорее всего хулиганит Протон. Поскольку я хчу переслать по Модбасу определенные данные, а ведомый мне должен ответить, он мне не отвечает потому как данные к нему приходят неверные. Попробуйте скомпелировать код вашими Протонами.

dimvad Дата: Вт, 01.06.2021, 14:20  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 108
Репутация: 52   ±
Замечания:   ±
На сайте с 20.07.2012

Статус: Offline

Во!
Прикрепления: 3782194.rar(95.5 Kb)
vladh Дата: Вт, 01.06.2021, 14:42  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 351
Репутация: 11   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата dimvad ()
Во!Прикрепления: 3782194.rar(95.5 Kb)
А попробуйте организовать вывод в шестнадцатеричном формате и поучится тоже ерунда.
Хотя за намек на дальнейшее исследование, СПАСИБО.

Сообщение отредактировал vladh - Вт, 01.06.2021, 14:46
dimvad Дата: Вт, 01.06.2021, 15:23  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 108
Репутация: 52   ±
Замечания:   ±
На сайте с 20.07.2012

Статус: Offline


Цитата
А попробуйте организовать вывод в шестнадцатеричном формате
Просто надо заменить идентификаторы DEC на HEX
vladh Дата: Вт, 01.06.2021, 15:46  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 351
Репутация: 11   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата dimvad ()
Просто надо заменить идентификаторы DEC на HEX
В этом случае получается при выводе в шестнадцатиричном формате вместо 0 вставляются 3, как раньше восьмерки.
dimvad Дата: Вт, 01.06.2021, 16:25  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 108
Репутация: 52   ±
Замечания:   ±
На сайте с 20.07.2012

Статус: Offline

Не пойму, в чем загвоздка. Вроде все работает
Прикрепления: 5860947.rar(95.1 Kb)
vladh Дата: Вт, 01.06.2021, 18:18  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 351
Репутация: 11   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата dimvad ()
Вроде все работает
Но как? Вы пытаетесь передать последовательность чисел в шестнадцатеричном формате. то в должны принять в этом же формате. Так число 0 в этом формате какой имеет вид - также 0 или 00, а в вашем примере -30. Далее число 1 или 01, а у вас на экране 31. Объясните это расхождение
dimvad Дата: Вт, 01.06.2021, 20:29  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 108
Репутация: 52   ±
Замечания:   ±
На сайте с 20.07.2012

Статус: Offline

Не понимаю, откуда у Вас эти числа. Вот что у меня на мониторе.
Прикрепления: 6181268.jpg(147.4 Kb)
vladh Дата: Ср, 02.06.2021, 02:33  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 351
Репутация: 11   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата dimvad ()
Не понимаю, откуда у Вас эти числа. Вот что у меня на мониторе
А вы щелкните правой кнопкой мышки по экрану терминала и выберите режим шестнадцатеричного вывода
ЯНДЕКС Дата: 02.06.2021
dimvad Дата: Ср, 02.06.2021, 13:24  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 108
Репутация: 52   ±
Замечания:   ±
На сайте с 20.07.2012

Статус: Offline

Так этот режим применяется для отображения  кодов символов в системе юникод. Например, код символа "1"  это 30, символа "%" это 25. А вы передаете числовые данные, и ничего выбирать не надо. Терминал сам распознает в каком формате ему посылаются данные.
vladh Дата: Ср, 02.06.2021, 13:48  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 351
Репутация: 11   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Т.е. вы хотите сказать, что так настроен терминал в Протеусе.
ivan_fd Дата: Ср, 02.06.2021, 16:30  |                                                                                                                Сообщение # 14
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1168
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

vladh,
Если  делать, так как вы,
HRSOut  3, то в передатчик записывается число 3, или %00000011, или $03, что одно и тоже. И на принимающей стороне придет та же последовательность бит.
Терминал Протеуса, по умолчанию,  отображает только символы кодовой страницы. Если вы переключаете терминал протеуса на HEX Display Mode, то он отображает уже, всё, именно в HEX формате и по одному байту, поскольку данные передаются, так же, по одному байту.

Если, же написать HRSOut Dec 3, то передается код символа 3, а именно $33.

Ну и настройку скорости Вы не указали, Declare Hserial_SPBRG 12


Меня все время преследуют умные мысли...но я быстрее!!!
vladh Дата: Ср, 02.06.2021, 18:02  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 351
Репутация: 11   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ivan_fd ()
Если, же написать HRSOut Dec 3, то передается код символа 3, а именно $33.Ну и настройку скорости Вы не указали, Declare Hserial_SPBRG 12
Иван. добрый вечер. Как то вы меня не убедили, и вот почему. Я посылаю вот такой код:
Main:
GoSub RS232_out
DelayMS 500
'Stop
GoTo Main
'******************

'************************
RS232_out:
PORTC.5 = 1
HRSOut 1,2,3,4
HRSOut Dec 1, Dec 2, Dec 3, Dec 4
'HRSOut Hex 01,Hex 03,Hex 01,Hex 01,Hex 00,Hex 02,Hex 37,Hex 94
PORTC.5 = 0
PIE1.5 = 1
Return
В результате его выполнения на экране вижу это:

По моему соображению я должен увидеть первоначально  символы, которые определяются представленными кодами (4 символа), затем я должен увидеть 4 десятичные цифры. Но я не вижу ничего из предположенного.
и по поводу настройки скорости. А разве этого н достаточно

Declare Hserial_Baud 9600
Прикрепления: 2296275.png(34.1 Kb)

Сообщение отредактировал vladh - Ср, 02.06.2021, 18:05
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Непонятки с UART
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: