проблема с частотой гены
- Войдите на сайт для отправки комментариев
Чт, 18/08/2016 - 04:26
в ардуинку добавлен чип мега 168
в boards.txt вставлено
a168_8MHz.name=atmega168 (8 MHz) a168_8MHz.upload.protocol=arduino a168_8MHz.upload.maximum_size=15872 a168_8MHz.upload.speed=115200 a168_8MHz.bootloader.low_fuses=0xe2 a168_8MHz.bootloader.high_fuses=0xdf a168_8MHz.bootloader.extended_fuses=0x4 a168_8MHz.bootloader.path=optiboot a168_8MHz.bootloader.file=a168_8MHz_e2_de_4.hex a168_8MHz.build.mcu=atmega168 a168_8MHz.build.f_cpu=8000000L a168_8MHz.build.core=arduino a168_8MHz.build.variant=standard a168_8MHz.upload.tool=avrdude
но при компилировании и заливке в проц все выполняется в два раза быстрее. соответственно, юарт выдает мусор, диод мигает в два раза быстрее. ставлю f_cpu=16000000L , текст в юарте становится читаем, но местами буквы кривые. передаваемые чипу символы он не рспознает.
до этого удалось компильнуть проект , все ок залилось. потом менял чипы в настройках, компилил под другие девайсы, теперь вернулся к 168й меге и вот такая беда, не могу запустить с нужной частотой.
помогите, куда посмотреть, что поправить?
Не знаю, влияет ли это на что-нибудь, но extended_fuses=0x4 выглядит очень странно посмотрите стр 294 даташиита на 168'ую. Наприяер, зачем Вы запрограммировали биты с 3 по 7, если они ничему не назначены. Ну, и опять же, не уверен, что это влияет, но я бы поставил upload.speed поменьше раза в два, а то и ещё меньше.
я юзаю загрузчик chipboot, заливаю хекс через него, а не через ардуинку.
при прошивке загрузчика фьюзы ставил такие же, как для "родного" ардуиновского загрузчика.
через чипбут заливаю на скорости 9600
еще раз подробнее опишу
в atmega168 залит бутлоадер chip45boot2_atmega168_uart0_v2.9Q.hex
шил кодевиженом, фьюзы вот такие
теперь делаю проект ардуино, в boards.txt добавлено
А если SysInfo запустить?
http://arduino.ru/forum/programmirovanie/sysinfo-arduino
когда в boards стоит a168_8MHz.build.f_cpu=8000000L
в терминале
M:ыY•лC‡ѕЈYЧЮ>SўK<SІhСUґСЛiТс"М[XQQСљФHњсIhQСУ'іу
когда в board ставлю a168_8MHz.build.f_cpu=16000000L
в терминале выдает
А последняя версия SysInfo 1.05 не запустилась?
не увидел сразу. запустил 1.05
при boards a168_8MHz.build.f_cpu=8000000L
при boards a168_8MHz.build.f_cpu=16000000L
у меня есть подозрение, что загрузчик мудит. загрузил через него другой сишный проект, не ардуиновский, тоже под 8мгц, и та же фигня, работает в два раза быстрее.
но еще загадка в том, что я одну из плат прошил нормально. теми же настройками. а потом вот какая-то хрень пошла и остальные не могу прошить так же. в загрузчике же нигде частота не указывается, только фьюзами. фьюзы все норм... не пойму, куда еще глядеть.
Начиная с версии 1.03 SysInfo выдаёт реальную частоту кварца (мы видим 16 МГц), заодно выдаётся и программно задаваемая F_CPU = 16000000. По частотам совпадение есть.
Если кварц на 16 МГц, а загрузчик на 8 МГц, то логично, что в сериал-мониторе будет мусор. Можно поиграться с последней строкой функции Frequence() в SysInfo 1.05 и менять скорость в Serial.begin(), но если только понимаете что при этом будет происходить.
Фьюзы не совпадают ни с указанными в посте 0, ни с указанными в посте 3. Во фьюзах я не специалист, просто констатирую факт.
Так я использую внутренний генератор на 8мгц. Фьюзами он ставится или 8мгц или 1мгц (с установленным CKDIV8)
Почему он стартует на 16мгц, не пойму
кароче я разобрался. у меня то ли бракованые чипы попались, либо не понятно что.
в тех, где частота не ставится, как указана в проекте, имеют calibration byte = 0xFF
а нормальные чипы, которые ок зашились, имеют calibration byte = любое кроме 0xFF (например, 0xA9, 0xD2, 0x45...)
которые с 0xFF зашиваются нормально на частоте 16мгц, но инфу в порт выдают нестабильно, с ошибками, и принимают входящую инфу с ошибками, примерно 20% ошибочных данных.
кто в курсе, что за ерунда? в extreme burner этот байт можно зашивать самому, пробовал ставить рандомные значения, эффекта никакого. может к таким чипам другой подход нужен? маркировка на корпусах идентичная.