Прием данных по UART

Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16.05.2016{, 10:21}
Репутация: 4

Прием данных по UART

#1

Сообщение stapmoff » 11.07.2017{, 18:11}

Уважаемые помогите, не могу решить вроде элементарную задачу. Нужно из юарт принять 4 байта с расчетом контрольной суммы, после этого должен загорется сведодиод на выходе ОК сам блок и проэкт в архиве
Вложения
1234.zip
(31.19 КБ) 50 скачиваний

Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16.05.2016{, 10:21}
Репутация: 4

Прием данных по UART

#2

Сообщение stapmoff » 11.07.2017{, 20:09}

тут я разобрался, теперь данные которые отправляются по 485-му не видно на мастере
Вложения
1234.flp
(268.07 КБ) 49 скачиваний

Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16.05.2016{, 10:21}
Репутация: 4

Прием данных по UART

#3

Сообщение stapmoff » 12.07.2017{, 09:44}

Все переделал, НЕ РАБОТАЕТ мастер не видит слэйф хотя слэйф шлет нормальное количество байт и корректно 3E 0A 06 19 27 00 67 00 FB где 3Е - префикс, 0А - адрес, 06 - команда запроса, 19 - температура, 27,00 -  2 байта уровеня топлива, 67,00 - 2 байта частоты FB - контрольная сумма, что еще надо не пойму, помогите а!!!!!!!
Вложения
LLS.flp
(275.78 КБ) 42 скачивания

Аватара пользователя
rw6cm
Полковник
Сообщения: 2132
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 278
Имя: Владимир

Прием данных по UART

#4

Сообщение rw6cm » 12.07.2017{, 10:32}

так не пробовали?
Вложения
lls2.flp
(278.96 КБ) 49 скачиваний
Win10-64, FLProg (portable)

Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16.05.2016{, 10:21}
Репутация: 4

Прием данных по UART

#5

Сообщение stapmoff » 12.07.2017{, 15:47}

rw6cm писал(а):так не пробовали?
Как только не пробовал, похоже дело в контрольной сумме и в том что я правильно не могу интежер разделить на 2 байта
 data[4] = Level1;
      data[5] = Level; Должен быть один Level

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Прием данных по UART

#6

Сообщение pan » 12.07.2017{, 15:52}

а как вы делите на 2 байта?

Аватара пользователя
rw6cm
Полковник
Сообщения: 2132
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 278
Имя: Владимир

Прием данных по UART

#7

Сообщение rw6cm » 12.07.2017{, 16:00}

stapmoff писал(а):Как только не пробовал
У меня на ком порт без задержки только часть пакета приходит, с задержкой весь.
контрольную сумму можно попробовать поставить 00 ,  тогда по идее он не должен ее учитывать.
не уверен но контрольная сумма 3E0A061927006700=F5
Последний раз редактировалось rw6cm 12.07.2017{, 17:01}, всего редактировалось 1 раз.
Win10-64, FLProg (portable)

Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16.05.2016{, 10:21}
Репутация: 4

Прием данных по UART

#8

Сообщение stapmoff » 12.07.2017{, 19:31}

rw6cm писал(а):но контрольная сумма 3E0A061927006700=F5
Вот именно, не совпадос какой то!!!! Ну могу разделить интежер на 2 байта и мне кажется, что из за этого не правильно считается контрольная сумма, судя по датчику который выдавал такие же данные, контрольная сумма была 3E0A061927006700=86 вроде

Добавлено (12.07.2017, 19:00)
---------------------------------------------
Сделал вот так 
data[5] = ( byte )( Level >> 8 );
data[4] = ( byte )Level;
Не знаю правильно нет?

Добавлено (12.07.2017, 19:04)
---------------------------------------------
Вот теперь точно все правильно, разделил int на 2 байта, старший первый, но прибор не видит(( Вот что шлет слэйф 3E 0A 06 19 0F FF 07 D0 9C
19 - 25 градусов
0F FF - 2 байта уровень топлива 4095
07 D0 - 2 байта частота 2000
9C- сумма

Добавлено (12.07.2017, 19:31)
---------------------------------------------
Вот реальные данные от рабочего слэйва  3E 01 06 19 27 00 67 00 87 
Вот те же данные, но от моего слэйва        3E 01 06 19 27 00 67 00 4D 
не совпадает контрольная сумма!!! Блин

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Прием данных по UART

#9

Сообщение pan » 12.07.2017{, 20:15}

а может так 
data[4] = Level&FF; (или Level&255)
data[5] = Level>>8;

Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16.05.2016{, 10:21}
Репутация: 4

Прием данных по UART

#10

Сообщение stapmoff » 12.07.2017{, 20:43}

pan писал(а):а может так data[4] = Level&FF; (или Level&255)
data[5] = Level>>8;
Да не я уже разделил интежер на 2 байта, тут все ОК. теперь не совпадает контрольная сумма

Добавлено (12.07.2017, 20:43)
---------------------------------------------
Попробовал, вот что выдает 3E 01 06 19 00 67 00 00 39

Добавлено (12.07.2017, 20:43)
---------------------------------------------
Это не то

Аватара пользователя
rw6cm
Полковник
Сообщения: 2132
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 278
Имя: Владимир

Прием данных по UART

#11

Сообщение rw6cm » 13.07.2017{, 08:14}

stapmoff писал(а):Вот реальные данные от рабочего слэйва 3E 01 06 19 27 00 67 00 87
Похож на алгоритм CRC-8/MAXIM
Вот его калькулятор
Для уверенности еще один пакет правильных данных не помешал бы.
Win10-64, FLProg (portable)

Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16.05.2016{, 10:21}
Репутация: 4

Прием данных по UART

#12

Сообщение stapmoff » 13.07.2017{, 08:31}

rw6cm писал(а):Для уверенности еще один пакет правильных данных не помешал бы.
Вот несколько
3E 01 06 19 27 00 67 00 BB
 25 градусов 39 уровень 103 частота
3E 01 06 19 27 00 67 00 BB

3E 01 06 1E FF 0F D0 07 5A
30 градусов 4095 уровень 2000 частота
3E 01 06 1E FF 0F D0 07 5A
3E 01 06 1E FF 0F D0 07 5A
Последний раз редактировалось stapmoff 13.07.2017{, 08:36}, всего редактировалось 1 раз.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2132
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 278
Имя: Владимир

Прием данных по UART

#13

Сообщение rw6cm » 13.07.2017{, 08:44}

Это же такой же    3E 01 06 19 27 00 67 00 BB  и  3E 01 06 19 27 00 67 00 87
Почему контрольные суммы разные?
Win10-64, FLProg (portable)

Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16.05.2016{, 10:21}
Репутация: 4

Прием данных по UART

#14

Сообщение stapmoff » 13.07.2017{, 08:53}

rw6cm писал(а):Почему контрольные суммы разные?
Вот о том и речь)

Вот такой пример из документации протокола LLS Алгоритм вычисления контрольной суммы

1 U8 CRC8(U8 data, U8 crc)
2 {
3   U8 i = data ^ crc;
4   crc = 0;
5   if(i & 0x01) crc ^= 0x5e;
6   if(i & 0x02) crc ^= 0xbc;
7   if(i & 0x04) crc ^= 0x61;
8   if(i & 0x08) crc ^= 0xc2;
9   if(i & 0x10) crc ^= 0x9d;
10  if(i & 0x20) crc ^= 0x23;
11  if(i & 0x40) crc ^= 0x46;
12  if(i & 0x80) crc ^= 0x8c;
13  return crc;
14 }
Последний раз редактировалось stapmoff 13.07.2017{, 08:59}, всего редактировалось 1 раз.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2132
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 278
Имя: Владимир

Прием данных по UART

#15

Сообщение rw6cm » 13.07.2017{, 09:00}

stapmoff писал(а):Вот реальные данные от рабочего слэйва 3E 01 06 19 27 00 67 00 87
Эти откуда ?
3E 01 06 19 27 00 67 00 BB
3E 01 06 1E FF 0F D0 07 5A
Последний раз редактировалось rw6cm 13.07.2017{, 09:07}, всего редактировалось 1 раз.
Win10-64, FLProg (portable)

Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16.05.2016{, 10:21}
Репутация: 4

Прием данных по UART

#16

Сообщение stapmoff » 13.07.2017{, 09:14}

Немного исправил блок, теперь сумма другая, но не та
3E 01 06 19 27 00 67 00 4D
3E 01 06 19 27 00 67 00 4D

Добавлено (13.07.2017, 09:14)
---------------------------------------------
rw6cm писал(а):Эти откуда ?
с моего устройства

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Прием данных по UART

#17

Сообщение pan » 13.07.2017{, 09:18}

как может быть при одинаковых цифрах разная сумма...
чудес не бывает. единственное что приходит на ум это то циферки в разных форматах (dec hex)

Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16.05.2016{, 10:21}
Репутация: 4

Прием данных по UART

#18

Сообщение stapmoff » 13.07.2017{, 09:25}

pan писал(а):циферки в разных форматах (dec hex)
Всему виной была вот эта строчка
for (n = 0; n <= 7; n++)  // рассчитываем crc8
тут была 8

Но все равно сумма не совпадает
Последний раз редактировалось stapmoff 13.07.2017{, 09:26}, всего редактировалось 1 раз.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2132
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 278
Имя: Владимир

Прием данных по UART

#19

Сообщение rw6cm » 13.07.2017{, 09:25}

У вас есть пакет который должен проходить, (правильный)?
Win10-64, FLProg (portable)

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Прием данных по UART

#20

Сообщение pan » 13.07.2017{, 09:28}

stapmoff писал(а):тут была 8
 если была 8 , то должно было быть в скобках n=1

Добавлено (13.07.2017, 09:28)
---------------------------------------------
чудеса

Ответить

Вернуться в «UART»