как отсеять мусор из UART в реал-тайме?
- ElectroMechaniC
- Сержант
- Сообщения: 230
- Зарегистрирован: 21 сен 2016, 06:50
- Откуда: Донецк
- Имя: Юрий
как отсеять мусор из UART в реал-тайме?
Так! И где истина?





- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
как отсеять мусор из UART в реал-тайме?
Просто, если int, в смысле uint16_t сдвинуть влево на 16, получим нули....
Отправлено спустя 2 минуты 5 секунд:
А так мы явно указываем - принимай байт/интегер как 32-битное число. Я не знаю, как будет работать компилятор, поэтому прямо ему указываю, как работать.
Отправлено спустя 2 минуты 5 секунд:
А так мы явно указываем - принимай байт/интегер как 32-битное число. Я не знаю, как будет работать компилятор, поэтому прямо ему указываю, как работать.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- ElectroMechaniC
- Сержант
- Сообщения: 230
- Зарегистрирован: 21 сен 2016, 06:50
- Откуда: Донецк
- Имя: Юрий
как отсеять мусор из UART в реал-тайме?
Так ка правильно? То?





- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
как отсеять мусор из UART в реал-тайме?
У тебя переменная, более 65536 - это что?
Попробуй оба варианта.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- ElectroMechaniC
- Сержант
- Сообщения: 230
- Зарегистрирован: 21 сен 2016, 06:50
- Откуда: Донецк
- Имя: Юрий
как отсеять мусор из UART в реал-тайме?
Это значение пробега в километрах! Ок попробую оба! Спасибо!





как отсеять мусор из UART в реал-тайме?
не совсем компактно, но 100 пудов работает
out = in1 ;
out = (out << 8) | in2 ;
out = (out<<8) | in3 ;
надо почитать как это более изящно делается
out = in1 ;
out = (out << 8) | in2 ;
out = (out<<8) | in3 ;
надо почитать как это более изящно делается

- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
как отсеять мусор из UART в реал-тайме?
Ещё один вариант:
out=0;
out |= (in1 << 16) | (in2 << 8) | in3;
Отправлено спустя 54 секунды:
Так один из операндов 32 битный, и всё будет обрабатываться по его размерности. Вроде.
out=0;
out |= (in1 << 16) | (in2 << 8) | in3;
Отправлено спустя 54 секунды:
Наверно так

Так один из операндов 32 битный, и всё будет обрабатываться по его размерности. Вроде.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
как отсеять мусор из UART в реал-тайме?
да. надо перед смещением приводить к такому типу данных чтоб "смещение" влезло
[ref]ElectroMechaniC[/ref], вот так работает out = ((uint32_t)in1<<16) | ((uint16_t)in2<<8) | in3 ;
третий вход в блоке небось сам добавишь
[ref]ElectroMechaniC[/ref], вот так работает out = ((uint32_t)in1<<16) | ((uint16_t)in2<<8) | in3 ;
третий вход в блоке небось сам добавишь
- ElectroMechaniC
- Сержант
- Сообщения: 230
- Зарегистрирован: 21 сен 2016, 06:50
- Откуда: Донецк
- Имя: Юрий
как отсеять мусор из UART в реал-тайме?
[ref=#ff8000]pan[/ref], не ну я конечно нуб , по сравнению с вами! Но не до такой же степени)))
пока что столкнулся с маленькой загвоздкой! Данный id (с пробегом), не присутствует в потоке изначально, а вызывается соответствующим запросом! Если бы это был .hex , то строка с запросом должна была бы выглядеть вот так:
А строка с ответом выглядела бы вот так:
"740" -id кан кадра.
"8" -количество байт в кадре.
С "07" по "04 само тело кадра= 8 байт.
Отправлено спустя 8 минут 53 секунды:
И если получать ответы мы уже научились! ( блок в этой теме) спасибо ребятам! То с отправкой запроса есть моменты... и вопросы...
Первый из них стоит ребром:
Можно ли обновременно в одном скетче и делать запросы и получать ответы? Это пока обобщённый вопрос, который имеет множество подвопросов... но изначально нужно понимать хотя бы это... я приведу код из примера с отправкой пакета в кан шину...
И мне нужно сделать так, что бы он не конфликтовал с блоком получения байтов...
Отправлено спустя 5 минут 36 секунд:
Отправлено спустя 5 минут 13 секунд:
а вот блок который получает данные из кана! я так понимаю что инициализация у них общаяя? Тоесть в блоке отправки всё что до цикла "Loop" можно упустить, если модуль один и эти два блока будут использоваться в одном скетче!
пока что столкнулся с маленькой загвоздкой! Данный id (с пробегом), не присутствует в потоке изначально, а вызывается соответствующим запросом! Если бы это был .hex , то строка с запросом должна была бы выглядеть вот так:
Код: Выделить всё
740 8 03 22 4В 06 00 00 00 00
Код: Выделить всё
760 8 07 62 4В 06 00 27 5F 04
"8" -количество байт в кадре.
С "07" по "04 само тело кадра= 8 байт.
Отправлено спустя 8 минут 53 секунды:
И если получать ответы мы уже научились! ( блок в этой теме) спасибо ребятам! То с отправкой запроса есть моменты... и вопросы...
Первый из них стоит ребром:
Можно ли обновременно в одном скетче и делать запросы и получать ответы? Это пока обобщённый вопрос, который имеет множество подвопросов... но изначально нужно понимать хотя бы это... я приведу код из примера с отправкой пакета в кан шину...
И мне нужно сделать так, что бы он не конфликтовал с блоком получения байтов...
Отправлено спустя 5 минут 36 секунд:
Код: Выделить всё
// demo: CAN-BUS Shield, send data
// loovee@seeed.cc
#include <mcp_can.h>
#include <SPI.h>
// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 9;
MCP_CAN CAN(SPI_CS_PIN); // Set CS pin
void setup()
{
Serial.begin(115200);
while (CAN_OK != CAN.begin(CAN_500KBPS)) // init can bus : baudrate = 500k
{
Serial.println("CAN BUS Shield init fail");
Serial.println(" Init CAN BUS Shield again");
delay(100);
}
Serial.println("CAN BUS Shield init ok!");
}
unsigned char stmp[8] = {0, 0, 0, 0, 0, 0, 0, 0};
void loop()
{
// send data: id = 0x00, standrad frame, data len = 8, stmp: data buf
stmp[7] = stmp[7]+1;
if(stmp[7] == 100)
{
stmp[7] = 0;
stmp[6] = stmp[6] + 1;
if(stmp[6] == 100)
{
stmp[6] = 0;
stmp[5] = stmp[6] + 1;
}
}
CAN.sendMsgBuf(0x00, 0, 8, stmp);
delay(100); // send data per 100ms
}
// END FILE
а вот блок который получает данные из кана! я так понимаю что инициализация у них общаяя? Тоесть в блоке отправки всё что до цикла "Loop" можно упустить, если модуль один и эти два блока будут использоваться в одном скетче!
У вас нет необходимых прав для просмотра вложений в этом сообщении.





Кто сейчас на конференции
Сейчас этот форум просматривают: niko191 и 7 гостей