FLProg
Вход на сайт
Логин:
Пароль:
Поиск
...
Статистика
Понедельник, 21.08.2017, 11:18
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 3123»
Модератор форума: support, Сергей 
Форум » Основной » Спросить у знатоков » Прием данных по UART (Блок)
Прием данных по UART
stapmoff Дата: Вторник, 11.07.2017, 18:11 | Сообщение # 1
Подполковник
Группа: Проверенные
Сообщений: 251
Награды: 3
Репутация: 2
Статус: Offline
Уважаемые помогите, не могу решить вроде элементарную задачу. Нужно из юарт принять 4 байта с расчетом контрольной суммы, после этого должен загорется сведодиод на выходе ОК сам блок и проэкт в архиве
Прикрепления: 1234.zip(31Kb)
 
stapmoff Дата: Вторник, 11.07.2017, 20:09 | Сообщение # 2
Подполковник
Группа: Проверенные
Сообщений: 251
Награды: 3
Репутация: 2
Статус: Offline
тут я разобрался, теперь данные которые отправляются по 485-му не видно на мастере
Прикрепления: 1234.flp(268Kb)
 
stapmoff Дата: Среда, 12.07.2017, 09:44 | Сообщение # 3
Подполковник
Группа: Проверенные
Сообщений: 251
Награды: 3
Репутация: 2
Статус: Offline
Все переделал, НЕ РАБОТАЕТ мастер не видит слэйф хотя слэйф шлет нормальное количество байт и корректно 3E 0A 06 19 27 00 67 00 FB где 3Е - префикс, 0А - адрес, 06 - команда запроса, 19 - температура, 27,00 -  2 байта уровеня топлива, 67,00 - 2 байта частоты FB - контрольная сумма, что еще надо не пойму, помогите а!!!!!!!
Прикрепления: LLS.flp(276Kb)
 
rw6cm Дата: Среда, 12.07.2017, 10:32 | Сообщение # 4
Генерал-лейтенант
Группа: Проверенные
Сообщений: 884
Награды: 80
Репутация: 59
Статус: Offline
так не пробовали?
Прикрепления: lls2.flp(279Kb)


Win7-32, FLProg (portable)
 
stapmoff Дата: Среда, 12.07.2017, 15:47 | Сообщение # 5
Подполковник
Группа: Проверенные
Сообщений: 251
Награды: 3
Репутация: 2
Статус: Offline
Цитата rw6cm ()
так не пробовали?
Как только не пробовал, похоже дело в контрольной сумме и в том что я правильно не могу интежер разделить на 2 байта
 data[4] = Level1;
      data[5] = Level; Должен быть один Level
 
pan Дата: Среда, 12.07.2017, 15:52 | Сообщение # 6
Генерал-лейтенант
Группа: Проверенные
Сообщений: 726
Награды: 30
Репутация: 29
Статус: Offline
а как вы делите на 2 байта?
 
rw6cm Дата: Среда, 12.07.2017, 16:00 | Сообщение # 7
Генерал-лейтенант
Группа: Проверенные
Сообщений: 884
Награды: 80
Репутация: 59
Статус: Offline
Цитата stapmoff ()
Как только не пробовал
У меня на ком порт без задержки только часть пакета приходит, с задержкой весь.
контрольную сумму можно попробовать поставить 00 ,  тогда по идее он не должен ее учитывать.
не уверен но контрольная сумма 3E0A061927006700=F5


Win7-32, FLProg (portable)

Сообщение отредактировал rw6cm - Среда, 12.07.2017, 17:01
 
stapmoff Дата: Среда, 12.07.2017, 19:31 | Сообщение # 8
Подполковник
Группа: Проверенные
Сообщений: 251
Награды: 3
Репутация: 2
Статус: Offline
Цитата 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 Дата: Среда, 12.07.2017, 20:15 | Сообщение # 9
Генерал-лейтенант
Группа: Проверенные
Сообщений: 726
Награды: 30
Репутация: 29
Статус: Offline
а может так 
data[4] = Level&FF; (или Level&255)
data[5] = Level>>8;
 
stapmoff Дата: Среда, 12.07.2017, 20:43 | Сообщение # 10
Подполковник
Группа: Проверенные
Сообщений: 251
Награды: 3
Репутация: 2
Статус: Offline
Цитата 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 Дата: Четверг, 13.07.2017, 08:14 | Сообщение # 11
Генерал-лейтенант
Группа: Проверенные
Сообщений: 884
Награды: 80
Репутация: 59
Статус: Offline
Цитата stapmoff ()
Вот реальные данные от рабочего слэйва 3E 01 06 19 27 00 67 00 87
Похож на алгоритм CRC-8/MAXIM
Вот его калькулятор
Для уверенности еще один пакет правильных данных не помешал бы.


Win7-32, FLProg (portable)
 
stapmoff Дата: Четверг, 13.07.2017, 08:31 | Сообщение # 12
Подполковник
Группа: Проверенные
Сообщений: 251
Награды: 3
Репутация: 2
Статус: Offline
Цитата 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
 
rw6cm Дата: Четверг, 13.07.2017, 08:44 | Сообщение # 13
Генерал-лейтенант
Группа: Проверенные
Сообщений: 884
Награды: 80
Репутация: 59
Статус: Offline
Это же такой же    3E 01 06 19 27 00 67 00 BB  и  3E 01 06 19 27 00 67 00 87
Почему контрольные суммы разные?


Win7-32, FLProg (portable)
 
stapmoff Дата: Четверг, 13.07.2017, 08:53 | Сообщение # 14
Подполковник
Группа: Проверенные
Сообщений: 251
Награды: 3
Репутация: 2
Статус: Offline
Цитата 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
 
rw6cm Дата: Четверг, 13.07.2017, 09:00 | Сообщение # 15
Генерал-лейтенант
Группа: Проверенные
Сообщений: 884
Награды: 80
Репутация: 59
Статус: Offline
Цитата 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


Win7-32, FLProg (portable)

Сообщение отредактировал rw6cm - Четверг, 13.07.2017, 09:07
 
Форум » Основной » Спросить у знатоков » Прием данных по UART (Блок)
Страница 1 из 3123»
Поиск:

FLProg © 2017
Яндекс.Метрика