Доброго дня, всем!
Как-то не доводилось ранее иметь дело с Arduino Mega. А тут понадобилось. Есть плата (не совсем Arduino, но похожая). Arduino IDE с ней (через ЗАГРУЗИТЬ ЧЕРЕЗ ПРОГРАММАТОР) прекрасно взаимодействует… Но вот обмен по Serial не работает корректно. Прекрасно понимаю, что эта проблема именно из-за тактового генератора. Заменить его на стандартный 16MHz нельзя. Установка в скетче #define F_CPU 14745600L результатов не улучшила… Как решить эту проблему?! Может кто-то имеет подобный опыт?
С хз какой платой?
Сначала бы определить что за плата, и на какой частоте работает проц.
разве это важно? Представьте, что в Arduino Mega2560 запаян кварцевый генератор не на 16 Mhz, а на 14.7456 (для стабильной работы с интерaейсом RS). Что прописать в Arduino IDE, что бы это учитывалось корректно? Чтобы нормально работали millis() и Serial?
Какой USBUART ? (второй чип)
может это улучшит ситуацию
#ifdef F_CPU
#undef F_CPU
#define F_CPU 14745600L
#endif
В boards.json пропиши себе вариант. Или просто выстави частоту Serial.begin с поправкой.
Была похожая проблема, когда “кварц” (скорее, керамика) работала на частоте примерно на 0.7% ниже номинала. В результате процентов 5 байтов приходило с ошибкой.
Банально изменил скорость порта на эти самые 0.7%, после чего конструкция стала работать устойчиво.
Так и Вам надо вместо, скажем 9600 устанавливать частоту 10417.
Зачем это? Значение F_CPU в IDE подаётся как опция компилятора. Нужно то же самое прописать в описании платы в файле boards.txt
Нет. Это надо делать во всех файлах всех библиотек, иначе будет как с теми Патриотами, что иракскую ракету проспали. Надо просто прописать в описании платы.
системный программист не знает как работает компилятор, оригинально…
Всем спасибо, вроде найдено решение…
в файле boards.txt нужно указать нужную частоту
И все стало передаваться корректно
а вот ставить статус “вопрос решен” самому себе, не очень корректно!
Вы точно решили его самостоятельно? Моё сообщение №10 Вы не заметили?
Кто в boards прописал, тот и решил. Все логично.
Кстати, попробовал установить MegaCore… Супер! по крайне мере, пока проблем с кодом не заметил, а “плюшки” очень даже пришлись кстати. Спасибо за наводку! На моей плате есть адаптер USB-СОМ (CP2102) и есть ощущение, что возможно удастся заливать скетчи прям как в классической Ардуине, только что-то нужно подумать с сигналом Ресет
А что CP2102 не дергает RESET ?
В данной плате нет…

После установки MegaCore заново записал новый загрузчик. Дополнительно я вывел кнопку RESET (ее тоже в этой плате не было) и пытался при загрузке скетча нажимать ее, но пока положительного результата не получил

типа не синхронизируется с программатором:
avrdude urclock_getsync() warning: attempt 10 of 10: not in sync
avrdude urclock_recv() warning: programmer is not responding; try -xstrict and/or vary -xdelay=100
avrdude main() error: unable to open programmer urclock on port COM7
Загрузчик надо перекомпилировать на новый кварц или писать на скорости с учетом разницы кварцев.