Нестандартная скорость Serial

bifurkas
Offline
Зарегистрирован: 27.10.2013

Есть устройство, ЭБУ автомобиля, обмен с которым идёт по UART на скорости 7812 бод. Если просто писать mySerial.begin(7812) - ничего не читается/отправляется. На любой другой стандартной скорости работает, с эмулятором устройства разумеется. Подскажите как быть, я новичок.

denis64
Offline
Зарегистрирован: 07.10.2013

нужно  менять значение делителя стандартной скорости

гуглите "прогу на экселе которая вычисляет значение ExtBaudrate"

maksim
Offline
Зарегистрирован: 12.02.2012

Если кофейнаюя гуща не обманула, то пользетесь вы SoftwareSerial, в файле arduino-1.x\libraries\SoftwareSerial\SoftwareSerial.cpp есть таблица:

#if F_CPU == 16000000

static const DELAY_TABLE PROGMEM table[] = 
{
  //  baud    rxcenter   rxintra    rxstop    tx
  { 115200,   1,         17,        17,       12,    },
  { 57600,    10,        37,        37,       33,    },
  { 38400,    25,        57,        57,       54,    },
  { 31250,    31,        70,        70,       68,    },
  { 28800,    34,        77,        77,       74,    },
  { 19200,    54,        117,       117,      114,   },
  { 14400,    74,        156,       156,      153,   },
  { 9600,     114,       236,       236,      233,   },
  { 4800,     233,       474,       474,      471,   },
  { 2400,     471,       950,       950,      947,   },
  { 1200,     947,       1902,      1902,     1899,  },
  { 300,      3804,      7617,      7617,     7614,  },
};

вот в нее и нужно добавить вашу скорость с соответствующими значениями задержек, примерно так:

#if F_CPU == 16000000

static const DELAY_TABLE PROGMEM table[] = 
{
  //  baud    rxcenter   rxintra    rxstop    tx
  { 115200,   1,         17,        17,       12,    },
  { 57600,    10,        37,        37,       33,    },
  { 38400,    25,        57,        57,       54,    },
  { 31250,    31,        70,        70,       68,    },
  { 28800,    34,        77,        77,       74,    },
  { 19200,    54,        117,       117,      114,   },
  { 14400,    74,        156,       156,      153,   },
  { 9600,     114,       236,       236,      233,   },
  { 7812,     143,       290,       290,      287,   },
  { 4800,     233,       474,       474,      471,   },
  { 2400,     471,       950,       950,      947,   },
  { 1200,     947,       1902,      1902,     1899,  },
  { 300,      3804,      7617,      7617,     7614,  },
};

А вот если бы вы воспользовались хардовым UART'ом то этого бы делать не пришлось, так как для хардового UART'а "задержки" расчитываются исходя из заданной скорости.

bifurkas
Offline
Зарегистрирован: 27.10.2013

Спасибо за ответ!

Александр597
Offline
Зарегистрирован: 30.01.2016

bifurkas пишет:

Спасибо за ответ!

Решили вопрос?

vins
Offline
Зарегистрирован: 22.09.2016

Помогите надо вычислить тайминги для скорости 33300