Arduino и пакетная передача данных

agent73
Offline
Зарегистрирован: 15.01.2017

Всем привет, нужна помощь в том чтобы научить ардуинку читать данные которые идут пакетами

ардуинкой считал данные с помощью digitalRead но не пойму как ловить начало и конец пакета ?
правильно ли я понимаю что конец пакета это всегда 0000001 ?

Access method: CSMA/CD with bit wise arbitration
Error Detection: 8-bit CRC
Header Length: 25bits
Data length: 1-11bytes
Bit rate: 10Kb/s

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

agent73. Похоже вам дали задание и вы ,как очень "хитрый" или "умный" , решили не загружать свою голову , а загрузить форум. Похвально.

5N62V
Offline
Зарегистрирован: 25.02.2016

agent73 пишет:

ардуинкой считал данные с помощью digitalRead но не пойму как ловить начало и конец пакета ?

Тут какая-то нестыковка первой половины предложение со второй. Если Вы умудрились считать данные с помощью digitalRead, при этом соблюдив синхронность опроса и прихода данных, то определить начало/конец пакета для Вас должно быть как два пальца.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

agent73 пишет:

ардуинкой считал данные с помощью digitalRead 

Код в студию! А там посмотрим, что можно сделать.

agent73
Offline
Зарегистрирован: 15.01.2017

нужно ли менять настройки таймера или дефолтные подойдут ?

а тут обсуждение и даже готовый сниффер но на пике - открыл исходники и понял что моих знаний явно мало чтобы написать нечто подобное самому

ссылка на патент

вообще "задание" заключается в том чтобы считать из шины команду на включение кондера в машине и отправить нужную, но мне хотя бы считывать научится т.к для отправки еще и crc считать

в результатах все что арудинка выплюнула в монитор порта, также присутсвует и бит стафинг (после 5 одинаковых идет обратный  от sof до crc )

синхронизировать включение блока климата и ардуинки я так думаю не реально и как следствие сложно поймать начало передачи первого пакета ? правильно ли я понимаю что конец пакета это всегда 0000001 ? переход на новую строку раставил на глаз чтобы нагляднее было:

1011000110111000110101010110000110101010101110110110001000111101101011000101111111110000101010101011110101000000001
0111100110010000101010101011101011111110111000010101010101011010101011101000011111110101000010101010111011111010101010111001011111110001010000001
01011101100000000011111111111010001000000000000001011001000000001011111110001010010101010100000010010010101010101011001111100000000001
01010101000111010010101000100000010101011111110011000000000100000000000111001010101010000011100101111111011101100000001000001
010111110110010101010101010101110101001011101010110010000000001001011111110100000101010111111101110111000100000001001011111111111000101000000001
0101111101111101010100000000010110101101111101111010000000001011010011111010101000001010101010101001111110101010101000001
010101111111101100000000000000001010110101111111100000000001010101011101010000000000101000101011111011110011101100101000101010101011100101101001000010101000001
0111110100011111110111010101010000000111010101011111010100000000000000001011
0111110011010000000100010000011111100001010100000000001
01010100111101111111110100011101010101111111111101010101010101010000011010111111111100100010101010101011111110111110101010101010101011011011111110001101010101000000100110000000010000000000001010000110101110100010101000001
01010110101110100000101010101110101111111001101010101000000000100101110001000101010000111011101101001111110000001010000000001101000101000101000001
0101111111100011100011111000000000010101000001110000010111110111110101010100000000010010001111110101110001010101010101011111010000000000001
010111110111100101010000101010100111011111000001010000000011101110110000101011101000101010111100010111110100001010111001000000000101010101011001011010111010101010101010000000010011010000001010101010010001000011010101110101000100000011111001101010000001011111011011101001100000010000111101111111000001
0100001011111111101010100000010100000011111110010001010101000001
01101011101000100010101000111111001111000101001010000001010101101010101000101000100000001111111110110000000000101000100001110110111000010001000000010011111111110101000000000101010101000000001
010111110110101000000101000000101001111110101000000000010101010110111011101000000000010100101111110001011111010101000010101010100101000001010100000011111111100010110100001000000001
01010101111011101010100000000001110111111011100010101000000101001111111100011101000000001010101011011101111100100000001
01000100111111111101110100001010111111010111110100000010101010100101010111100000001
0101010011111100011100001000100000000001110000101011101010100101010101101111111000010101010010111000010111101110101010000000010100000011101010000001
0101000010111111011111000110000101010100101111111000000001010100001111111101001001010000001010010111001111110001010000000011111001010111010101010010101000010101011011101111011100101000000111101010111010000000110000001
01011010101110000010010000101011110101010010100000010110000011101111010111111010001010000001110110111010100001010010101001010100111110111001010101001010101011111101010000101010000101100011111111111100101010000101010010101111011111010000101010100100011110111010100001001010000101011011111000000001
010000001010110011110110111010100001010100001010000101000010100101010100111110010111010000000010000001110000111111100001000010100111111001110100110100001000101001111101101110100101000000001000010111101110010001011010100001010101101111110101110100000010000111111110111100010101000010100100000011111111011110111110100101010100111000011100100011

читал так:

int portMPX = 2;

void setup() {
  Serial.begin(9600);
  pinMode(portMPX, INPUT);
}

void loop() {
  int resultMPX = digitalRead(portMPX);
  Serial.print(resultMPX);
}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ведь не поспоришь с товарищем. У товарища видно с базовыми знаниями тяжеловато, если он сейчас скеч "логического анализатора" привел. Найдите (одолжите,купите) настоящий логический анализатор и тогда разбирайтесь дальше.

5N62V
Offline
Зарегистрирован: 25.02.2016

agent73 пишет:

читал так:

int portMPX = 2;

void setup() {
  Serial.begin(9600);
  pinMode(portMPX, INPUT);
}

void loop() {
  int resultMPX = digitalRead(portMPX);
  Serial.print(resultMPX);
}

 

Смею Вас расстроить: это у Вас не читалка, это у Вас какой-то анализатор состояния 2го пина получился. То, что Вы считали,  скорее всего, никакого отношения к потоку данных в исследуемой шине не имеет, без синхронизации с тактовой частотой шины.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

qwone пишет:

...он сейчас скеч "логического анализатора" привел.

Если это "логический анализатор", то где, собственно, анализ?

Это какой-то "логический показометр" безо всяких претензий на анализ. В котором, к тому же, полно лишнего кода (примерно половина).

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

andriano пишет:

Это какой-то "логический показометр" безо всяких претензий на анализ. В котором, к тому же, полно лишнего кода (примерно половина).

ну, как же не онализатор? - а, кто онализирует нопряжение на пине и конвертит ега зночение в нули и единицы?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Нифига он не онализирует - на пин 0 или 1 подаются снаружи. Он просто берет готовые и отправляет в порт.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

andriano пишет:

на пин 0 или 1 подаются

на пин подаётся напряжение, а не 0 или 1

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Напряжение подается на аналоговый пин, а на цифровой - 0 или 1!

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

andriano пишет:

Напряжение подается на аналоговый пин, а на цифровой - 0 или 1!

отлил в гранит #65 О_О

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Если что - обращайтесь еще!