проблема с частотой гены

double1
Offline
Зарегистрирован: 04.07.2016

в ардуинку добавлен чип мега 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й меге и вот такая беда, не могу запустить с нужной частотой.

помогите, куда посмотреть, что поправить?

 

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

Не знаю, влияет ли это на что-нибудь, но extended_fuses=0x4 выглядит очень странно посмотрите стр 294 даташиита на 168'ую. Наприяер, зачем Вы запрограммировали биты с 3 по 7, если они ничему не назначены. Ну, и опять же, не уверен, что это влияет, но я бы поставил upload.speed поменьше раза в два, а то и ещё меньше.

double1
Offline
Зарегистрирован: 04.07.2016

я юзаю загрузчик chipboot, заливаю хекс через него, а не через ардуинку.

при прошивке загрузчика фьюзы ставил такие же, как для "родного" ардуиновского загрузчика.

через чипбут заливаю на скорости 9600

double1
Offline
Зарегистрирован: 04.07.2016

еще раз подробнее опишу
в atmega168 залит бутлоадер chip45boot2_atmega168_uart0_v2.9Q.hex
шил кодевиженом, фьюзы вот такие

теперь делаю проект ардуино, в boards.txt добавлено

a168_8MHz.name=atmega168 (8 MHz)
a168_8MHz.upload.protocol=arduino
a168_8MHz.upload.maximum_size=15872
a168_8MHz.upload.speed=9600
a168_8MHz.bootloader.low_fuses=0xE2
a168_8MHz.bootloader.high_fuses=0xDF
a168_8MHz.bootloader.extended_fuses=0x00
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
 
компилирую проект
void setup() {
  // put your setup code here, to run once:
 Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
Serial.print("21");
if (Serial.available())
{
  int b;
  b=Serial.read();
  Serial.print(char(b));
}
delay(1000);
}

 

 беру его хекс из /local/temp/,... загружаю через chipbootGUI , все загружается ок.
в терминале пинг идет каждые 0.5сек, и мусор вместо 21 и вводимых символов:
5я4я5я5я5я5я5я5я5я5я4я5я5я5я5я%я4я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я5я4я5я5я5я5я5я5я5я5я5Н
 
что не так ? везде про 16мгц или 4мгц ни слова, ckdiv не установлен, откуда он берет неверное значение тактовой частоты?
arduinec
Offline
Зарегистрирован: 01.09.2015

А если SysInfo запустить?
http://arduino.ru/forum/programmirovanie/sysinfo-arduino
 

double1
Offline
Зарегистрирован: 04.07.2016

когда в 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@fПr@ЃrduinП@versiПn@1.``
 
VCC@=@51x5@mV
 
FїГ U@=@16``````

 

Frequency@=@16@Mz
 
 
arduinec
Offline
Зарегистрирован: 01.09.2015

А последняя версия SysInfo 1.05 не запустилась?

double1
Offline
Зарегистрирован: 04.07.2016

не увидел сразу. запустил 1.05

при boards a168_8MHz.build.f_cpu=8000000L

 
GІ3аСЊЙ0U¦¤<v•гGФW[XQ(САЌ<^
                  %Г­ТЃpЈџпЅЂСW†IУi!^]іcr‘с„\   .GU№SёXфЃ.xўQA¶уВX8ѕґј8hЙф>Gї@yО3QQQґ{E1€Ђ[
           ¶QБуЈ‰зK„пСQiп`
                          QцsМўБсtёQИ¦0>Q(Qя±ПЈQА,ПЈQpЈ€ц¦ВпЃQй?ЃKQ'AАQQм<3
                                                                           ПOп,QйпА2QwAЂ_Qму3пґ°»QЙыEяQ'AEs(QpЈБы(&‚п,QQiЭСЛQ'AEsQaуЊчЈK„жЃQґпt2QwA&Qму3
                                                                        П¦‚пQQiѕСKQГ#ЃЛQxSfПOп,СЙпE3Ѓ[·(QpДцЈ&‚п,SQiЭЃЛQГ#ЃЛQySз(KВуEљQйыE.QCsEKQQму3
                                                                     ПKВчREЂ”я,ПQЃ/3цQБаEыKоУEQ..чЂ6пFQмS
                         пGґЅ»ґ{KQwsEы(QБЊ.¶ ЋЂWQQя.g(Ђ[,пGQ<Sg¶(KД.SEя1¶QiЫ·ЈQpЉЂqЛ$3Уй{Eы(Qй/3¶QБУЈБч°П4YQя1цQБ/»ч8сиqEыKД.Уґ{Eы(Qй[3пG<s.·¦–ь

при boards a168_8MHz.build.f_cpu=16000000L

SysInfo`for`Arduino`version`1.05
 
F_CPU`=`16000000
Frequency@=`16`MHz
 
CPU`=`ATmega168
 
Flash@Memory`=`16383`bytes
Free`RAM`memory`=`558`bytes
 
VCC`=@5258`mV
 
Signatura`=`C62C
Fuses@(L/H/ext)`=`E2DFF8
 
Test`of`short`circuit`on`GND`or`VCC:
Pin:`@0`@``Low:@Fail`@High:`Ok```@Pull`Up:`Ok`@
Pin:``1````Low:`Ok@``@High:`Fail``Pull`Up:`Fail
Pin:``2````Low:`Ok````High:`Ok``@`Pull`Up:`Ok``
Pin:``3````Low:`Ok````High:`Ok````Pull`Up:`Ok``
Pin:@`4````Low:`Ok``@`High:`Ok````Pull`Up:`Ok``
Pin:``5``@`Low:@Ok@```High:`Ok``@`Pull`Up:`Ok``
Pin:`@6````Low:`Ok````High:`Ok````Pull`Up:`Ok`@
Pin:``7````Low:`Ok`@`@High:`Ok@```Pull`Up:`Ok``
Pin:``8````Low:`Ok````High:@Ok````Pull`Up:`Ok``
Pin:``9```@Low:`Ok@```High:@Ok````Pull`Up:`Ok``
Pin:`10````Low:`Ok````High:@Ok````Pull`Up:`Ok`@
Pin:`11````Low:@Ok````High:@Ok````Pull`Up:`Ok@`
Pin:@12`@``Low:@Ok```@High:`Ok@```Pull@Up:`Ok@`
Pin:`13`@@`Low:`Ok@```High:`Ok``@`Pull`Up:`Ok``
Pin:@14````Low:`Ok````High:@Ok````Pull`Up:`Ok``
Pin:`15````Low:`Ok``@`High:`Ok````Pull`Up:`Ok``
Pin:`16@```Low:`Ok````High:`Ok````Pull`Up:`Ok``
Pin:`17@```Low:`Ok````High:@Ok`@`@Pull`Up:`Ok``
Pin:`18```@Low:`Ok````High:`Ok````Pull`Up:@Ok``
Pin:`19````Low:`Ok```@High:`Ok````Pull`Up:`Ok``

у меня есть подозрение, что загрузчик мудит. загрузил через него другой сишный проект, не ардуиновский, тоже под 8мгц, и та же фигня, работает в два раза быстрее.

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

arduinec
Offline
Зарегистрирован: 01.09.2015

Начиная с версии 1.03 SysInfo выдаёт реальную частоту кварца (мы видим 16 МГц), заодно выдаётся и программно задаваемая F_CPU = 16000000. По частотам совпадение есть.

Если кварц на 16 МГц, а загрузчик на 8 МГц, то логично, что в сериал-мониторе будет мусор. Можно поиграться с последней строкой функции Frequence() в SysInfo 1.05 и менять скорость в Serial.begin(), но если только понимаете что при этом будет происходить.

Фьюзы не совпадают ни с указанными в посте 0, ни с указанными в посте 3. Во фьюзах я не специалист, просто констатирую факт.

double1
Offline
Зарегистрирован: 04.07.2016

Так я использую внутренний генератор на 8мгц. Фьюзами он ставится или 8мгц или 1мгц (с установленным CKDIV8)

Почему он стартует на 16мгц, не пойму

double1
Offline
Зарегистрирован: 04.07.2016

кароче я разобрался. у меня то ли бракованые чипы попались, либо не понятно что.

в тех, где частота не ставится, как указана в проекте, имеют calibration byte = 0xFF

а нормальные чипы, которые ок зашились, имеют calibration byte = любое кроме 0xFF (например, 0xA9, 0xD2, 0x45...)

которые с 0xFF зашиваются нормально на частоте 16мгц, но инфу в порт выдают нестабильно, с ошибками, и принимают входящую инфу с ошибками, примерно 20% ошибочных данных.

кто в курсе, что за ерунда? в extreme burner этот байт можно зашивать самому, пробовал ставить рандомные значения, эффекта никакого. может к таким чипам другой подход нужен? маркировка на корпусах идентичная.