Arduino MEGA2560 генератор на 14,7456MHz. Как?

Доброго дня, всем!
Как-то не доводилось ранее иметь дело с Arduino Mega. А тут понадобилось. Есть плата (не совсем Arduino, но похожая). Arduino IDE с ней (через ЗАГРУЗИТЬ ЧЕРЕЗ ПРОГРАММАТОР) прекрасно взаимодействует… Но вот обмен по Serial не работает корректно. Прекрасно понимаю, что эта проблема именно из-за тактового генератора. Заменить его на стандартный 16MHz нельзя. Установка в скетче #define F_CPU 14745600L результатов не улучшила… Как решить эту проблему?! Может кто-то имеет подобный опыт?

С хз какой платой?

1 лайк

Сначала бы определить что за плата, и на какой частоте работает проц.

разве это важно? Представьте, что в 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.

MegaCore решит проблему

Зачем это? Значение F_CPU в IDE подаётся как опция компилятора. Нужно то же самое прописать в описании платы в файле boards.txt

Нет. Это надо делать во всех файлах всех библиотек, иначе будет как с теми Патриотами, что иракскую ракету проспали. Надо просто прописать в описании платы.

1 лайк

системный программист не знает как работает компилятор, оригинально…

Всем спасибо, вроде найдено решение…
в файле boards.txt нужно указать нужную частоту


И все стало передаваться корректно

а вот ставить статус “вопрос решен” самому себе, не очень корректно!

image

Вы точно решили его самостоятельно? Моё сообщение №10 Вы не заметили?

Кто в boards прописал, тот и решил. Все логично.

3 лайка

Кстати, попробовал установить MegaCore… Супер! по крайне мере, пока проблем с кодом не заметил, а “плюшки” очень даже пришлись кстати. Спасибо за наводку! На моей плате есть адаптер USB-СОМ (CP2102) и есть ощущение, что возможно удастся заливать скетчи прям как в классической Ардуине, только что-то нужно подумать с сигналом Ресет

А что CP2102 не дергает RESET ?

В данной плате нет… :frowning:

. И чувствую, что припаять проводок к такому мелкому выводу - та еще задачка :slight_smile:
После установки MegaCore заново записал новый загрузчик. Дополнительно я вывел кнопку RESET (ее тоже в этой плате не было) и пытался при загрузке скетча нажимать ее, но пока положительного результата не получил :frowning:
типа не синхронизируется с программатором:
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

Загрузчик надо перекомпилировать на новый кварц или писать на скорости с учетом разницы кварцев.