purebasic.info
http://purebasic.info/phpBB3ex/

Работа с байтами UART
http://purebasic.info/phpBB3ex/viewtopic.php?f=1&t=4292
Страница 1 из 5

Автор:  apofiz [ Чт сен 24, 2015 8:18 am ]
Заголовок сообщения:  Работа с байтами UART

Всем привет. Просьба не пинать новичка.
Вопрос следующий. Принимаю данные с микроконтроллера через COM порт (usb-rs232 переходник)
Данные приходят в терминале так

4329872
234
129
36
12
5

Программа для purebasic принимает данные.
Но вот главный вопрос. Как мне все эти числа (данные)
разложить например по байтам чтоб потом отобразить в разных окошках программы на purebasic?
Вроде простой вопрос, но он меня поставил в тупик. Выручайте) Буду рад примерам)))

Автор:  Пётр [ Чт сен 24, 2015 8:38 am ]
Заголовок сообщения:  Re: Работа с байтами UART

МК отсылает данные в виде строк или чисел?
Если строки, то нужно искать в строке над ее завершения (10 или 13).
Если числа то нужно принимать требуемое число байт (судя по примеру - 4).

Автор:  apofiz [ Чт сен 24, 2015 8:43 am ]
Заголовок сообщения:  Re: Работа с байтами UART

А МК данные вот так отсылает.

Print A
Print B
Print C
Print D
Print E
Print F

Мне конечно что то подсказывает что это не самый лучший способ.
Но он лучше чем отсыл нескольких переменных одной строкой.

Автор:  apofiz [ Чт сен 24, 2015 8:56 am ]
Заголовок сообщения:  Re: Работа с байтами UART

Пётр писал(а):
МК отсылает данные в виде строк или чисел?
Если строки, то нужно искать в строке над ее завершения (10 или 13).
Если числа то нужно принимать требуемое число байт (судя по примеру - 4).


Как для новичка, для меня это "Ваще нипанятна чтота" :mrgreen:

Автор:  Пётр [ Чт сен 24, 2015 9:03 am ]
Заголовок сообщения:  Re: Работа с байтами UART

Не проверял, но должно работать.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#ComPort = 0 ; Идентификатор COM порта
 
EnableExplicit
 
Procedure InComStr() ; Прием строк из COM порта.
  Static InBuff.s
  Protected Bytes, Buff.a, i
 
  Bytes = AvailableSerialPortInput(#ComPort)
  If Bytes>0
    For i=1 To Bytes
      If ReadSerialPortData(#ComPort, @Buff, 1)=1
        If Buff<>#CR And Buff<>#LF
          InBuff+Chr(Buff)
        Else
          Debug InBuff
          InBuff=""
        EndIf
      EndIf
    Next i
  EndIf
 
EndProcedure
 
If OpenSerialPort(#ComPort, "COM1", 9600, #PB_SerialPort_NoParity, 8, 1,
                  #PB_SerialPort_NoHandshake, 255, 255)
 
  Repeat
    InComStr()
    Delay(500)
  ForEver
 
  CloseSerialPort(#ComPort)
Else
  Debug "Не удалось открыть COM порт"
EndIf


Автор:  apofiz [ Чт сен 24, 2015 9:03 am ]
Заголовок сообщения:  Re: Работа с байтами UART

Пробовал так. Но нифига не пашет (не удивлен) .
Не выводится ни как. Пытаюсь разбираться. Но не могу найти примеры хоть какой то реализации.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
;Процедура приема данных
Procedure InData()  
  Protected InBytes
  Dim InBytes.c(9) ;Байтовый массив, используемый как бцфер приёма данных.
  Protected Dim InBuffer.a(InBytes), RealInBytes
 
 
  If IsSerialPort(#COM_Port)  ;С таким ИД порт открыт.
    InBytes = AvailableSerialPortInput(#COM_Port)
    If InBytes>0  ;Получены данные.
     
      RealInBytes = ReadSerialPortData(#COM_Port, @InBuffer(), InBytes)
      If RealInBytes>0
       
        Structure RealInBytes
          datas1.w
          datas2.w
          datas3.w
          datas4.w
          datas5.w
          datas6.w
          datas7.w
          datas8.w
        EndStructure
       
       
        AddGadgetItem(400, -1, PeekS(@InBuffer(), datas1, #PB_Ascii))
        AddGadgetItem(500, -1, PeekS(@InBuffer(), datas2, #PB_Ascii))
      EndIf
    EndIf
  EndIf
 
EndProcedure


Автор:  apofiz [ Чт сен 24, 2015 9:21 am ]
Заголовок сообщения:  Re: Работа с байтами UART

Не. Ничего не получается... Уже не знаю что придумать.
Свой вариант надо переписывать.
Опыта почти нет...

Автор:  apofiz [ Чт сен 24, 2015 11:03 am ]
Заголовок сообщения:  Re: Работа с байтами UART

Не могу придумать как правильно отобразить принятые данные. Жаль. Я думал хоть тут помогут.

Автор:  Пётр [ Чт сен 24, 2015 11:30 am ]
Заголовок сообщения:  Re: Работа с байтами UART

apofiz писал(а):
Не. Ничего не получается.
apofiz писал(а):
Я думал хоть тут помогут.
"Ничего не получается" это не очень информативно, а не зная подробностей сложно чем-то помочь. Надеюсь был правильно выбран порт и скорость обмена?
Хоть что-то в порт приходит?

Автор:  apofiz [ Чт сен 24, 2015 1:00 pm ]
Заголовок сообщения:  Re: Работа с байтами UART

Выше я писал что все принимается. Даже так работает. Но в окне данные отображаются точно так же как их передает контроллер. Как мне надо чтоб они отображались я тоже писал. Напишу еще раз на всякий случай. Мне надо отображать эти данные в разных текстовых гаджетах в программе. Текстовые гатжеты создать не проблема. Данных может быть несколько видов, строка с точкой, 2 байта, байт. И их надо отображать в разных окнах а не все в одном. В каком виде они принимаются я тоже выше писал.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
;Процедура приема данных
Procedure InData()  
 Protected InBytes
 Dim InBytes.c(9) ;Байтовый массив, используемый как бцфер приёма данных.
Protected Dim InBuffer.a(InBytes), RealInBytes
 
 
 If IsSerialPort(#COM_Port)  ;С таким ИД порт открыт.
 InBytes = AvailableSerialPortInput(#COM_Port)
 If InBytes>0  ;Получены данные.
   
 RealInBytes = ReadSerialPortData(#COM_Port, @InBuffer(), InBytes)
 If RealInBytes>0
 
x=InBytes(0)
x1=InBytes(1)
 
 ;AddGadgetItem(400, -1, PeekS(@InBuffer(), x, #PB_Ascii))
 AddGadgetItem(500, -1, PeekS(@InBuffer(), x1, #PB_Ascii))
EndIf
 EndIf
 EndIf
 
EndProcedure


Автор:  kvitaliy [ Чт сен 24, 2015 1:20 pm ]
Заголовок сообщения:  Re: Работа с байтами UART

А в какой кодировке у вас настроен компилятор?
И ещё, хотелось бы реально увидеть, что вы видите на приеме:
4329872 - это реальные данные?
И что реально хотели бы увидеть, что бы понять, какие преобразования вам нужны.

Автор:  apofiz [ Чт сен 24, 2015 1:28 pm ]
Заголовок сообщения:  Re: Работа с байтами UART

Понятия не имею в какой кодировке он настроен. Да это в данном случае и не имеет ни какого значения.
Скриншот с принимаемыми данными прикрепляю.
Нет. Данные в сообщении были взяты для примера.
Уже в третий раз пишу что я хочу увидеть. Нужно чтоб данные отображались не в виде 3 строк в одном окне и в кучу, а чтоб каждая из 3 строк (их будет больше) отображалась в окне программы в отдельных текстовых (например) гатжетах. Мне нарисовать в пэйнте как это должно выглядеть? Если надо то нарисую.

С таким кодом отображается как на скриншоте

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
;Процедура приема данных
Procedure InData()  
 Protected InBytes
 Dim InBytes.c(9) ;Байтовый массив, используемый как бцфер приёма данных.
Protected Dim InBuffer.a(InBytes), RealInBytes
 
 
 If IsSerialPort(#COM_Port)  ;С таким ИД порт открыт.
 InBytes = AvailableSerialPortInput(#COM_Port)
 If InBytes>0  ;Получены данные.
   
 RealInBytes = ReadSerialPortData(#COM_Port, @InBuffer(), InBytes)
 If RealInBytes>0
 
x=InBytes(0)
x1=InBytes(1)
 
 
 ;AddGadgetItem(400, -1, PeekS(@InBuffer(), RealInBytes, #PB_Ascii))
 AddGadgetItem(500, -1, PeekS(@InBuffer(), RealInBytes, #PB_Ascii))
EndIf
 EndIf
 EndIf
 
EndProcedure



Вложения:
Безымянный.jpg [7.3 KiB]
Скачиваний: 0

Автор:  kvitaliy [ Чт сен 24, 2015 2:07 pm ]
Заголовок сообщения:  Re: Работа с байтами UART

apofiz писал(а):
Понятия не имею в какой кодировке он настроен. Да это в данном случае и не имеет ни какого значения.

Ну как сказать. К примеру тип .с в юникоде 2 байта, а не 1, как в ASCII.
Хоть какая у вас версия PB знаете?
apofiz писал(а):
Мне нарисовать в пэйнте как это должно выглядеть? Если надо то нарисую.

Да хоть в фотошопе. Мне без разницы, лишь бы было понятно, как это должно выглядеть.
Как это выглядит я уже увидел.

Автор:  SereZa [ Чт сен 24, 2015 2:09 pm ]
Заголовок сообщения:  Re: Работа с байтами UART

да это какой-то террорист :)

думаю в анси наверное, если он не знает где и что настраивается, то значит там значение по умолчанию стоит.

Автор:  apofiz [ Чт сен 24, 2015 2:16 pm ]
Заголовок сообщения:  Re: Работа с байтами UART

SereZa я тебя оскорблял? Я что такого написал? Если ты новичек и просишь помощи то это здесь называется терроризм? Сам ты террорист.

У меня версия purebasic 5.11
Настройки у меня по умолчанию и меня это пока вполне устраивает.
Скриншот как хотелось бы чтоб все выглядело прикрепляю.

Вложения:
111.jpg [6.66 KiB]
Скачиваний: 0

Страница 1 из 5 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/