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

Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16 май 2016, 10:21

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

Сообщение stapmoff »

Уважаемые помогите, не могу решить вроде элементарную задачу. Нужно из юарт принять 4 байта с расчетом контрольной суммы, после этого должен загорется сведодиод на выходе ОК сам блок и проэкт в архиве
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16 май 2016, 10:21

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

Сообщение stapmoff »

тут я разобрался, теперь данные которые отправляются по 485-му не видно на мастере
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16 май 2016, 10:21

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

Сообщение stapmoff »

Все переделал, НЕ РАБОТАЕТ мастер не видит слэйф хотя слэйф шлет нормальное количество байт и корректно 3E 0A 06 19 27 00 67 00 FB где 3Е - префикс, 0А - адрес, 06 - команда запроса, 19 - температура, 27,00 -  2 байта уровеня топлива, 67,00 - 2 байта частоты FB - контрольная сумма, что еще надо не пойму, помогите а!!!!!!!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
rw6cm
Полковник
Сообщения: 2299
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир

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

Сообщение rw6cm »

так не пробовали?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16 май 2016, 10:21

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

Сообщение stapmoff »

rw6cm писал(а):так не пробовали?
Как только не пробовал, похоже дело в контрольной сумме и в том что я правильно не могу интежер разделить на 2 байта
 data[4] = Level1;
      data[5] = Level; Должен быть один Level
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

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

Сообщение pan »

а как вы делите на 2 байта?
Аватара пользователя
rw6cm
Полковник
Сообщения: 2299
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир

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

Сообщение rw6cm »

stapmoff писал(а):Как только не пробовал
У меня на ком порт без задержки только часть пакета приходит, с задержкой весь.
контрольную сумму можно попробовать поставить 00 ,  тогда по идее он не должен ее учитывать.
не уверен но контрольная сумма 3E0A061927006700=F5
Последний раз редактировалось rw6cm 12 июл 2017, 17:01, всего редактировалось 1 раз.
Win10-64, FLProg (portable)
Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16 май 2016, 10:21

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

Сообщение stapmoff »

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 апр 2017, 11:57
Имя: noname

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

Сообщение pan »

а может так 
data[4] = Level&FF; (или Level&255)
data[5] = Level>>8;
Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16 май 2016, 10:21

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

Сообщение stapmoff »

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
Полковник
Сообщения: 2299
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир

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

Сообщение rw6cm »

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

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

Сообщение stapmoff »

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 июл 2017, 08:36, всего редактировалось 1 раз.
Аватара пользователя
rw6cm
Полковник
Сообщения: 2299
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир

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

Сообщение rw6cm »

Это же такой же    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 май 2016, 10:21

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

Сообщение stapmoff »

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 июл 2017, 08:59, всего редактировалось 1 раз.
Аватара пользователя
rw6cm
Полковник
Сообщения: 2299
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир

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

Сообщение rw6cm »

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 июл 2017, 09:07, всего редактировалось 1 раз.
Win10-64, FLProg (portable)
Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16 май 2016, 10:21

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

Сообщение stapmoff »

Немного исправил блок, теперь сумма другая, но не та
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 апр 2017, 11:57
Имя: noname

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

Сообщение pan »

как может быть при одинаковых цифрах разная сумма...
чудес не бывает. единственное что приходит на ум это то циферки в разных форматах (dec hex)
Аватара пользователя
stapmoff
Лейтенант
Сообщения: 341
Зарегистрирован: 16 май 2016, 10:21

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

Сообщение stapmoff »

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

Но все равно сумма не совпадает
Последний раз редактировалось stapmoff 13 июл 2017, 09:26, всего редактировалось 1 раз.
Аватара пользователя
rw6cm
Полковник
Сообщения: 2299
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир

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

Сообщение rw6cm »

У вас есть пакет который должен проходить, (правильный)?
Win10-64, FLProg (portable)
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

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

Сообщение pan »

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

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей