AT328P от 8 МГц и от 16 МГц работает медленнее, чем от 1 МГц

cofessor
Offline
Зарегистрирован: 17.11.2015

Вцелях экономии и миниатюризации решил модули заменять на чипы AT328P. Для этого установил на Arduino IDE поддержку AVR:  https://raw.githubusercontent.com/sleemanj/optiboot/master/dists/package...

После настройки в меню "Инструменты" появились поддерживаемые микросхемы и скорость процессора:
8MHz Internal Oscillator
20MHz Crystal/Resonator
16MHz Crystal/Resonator
1MHz Internal Oscillator
Проверяю скорость - от 1 МГц(4-й вариант) всё соответствует, а от 8 МГц всё работает раз в 10 медленней, а от 16-ти - ещё раза в 2 медленнее. 
Прошиваю всё через USBASP, на скриншоте было бы всё видно, но вставить его не получается. Но вообще это всё странно, получается что ссылка с гитхаба кривая?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Думаю, мастер такой. 

cofessor
Offline
Зарегистрирован: 17.11.2015

Брысь...

cofessor
Offline
Зарегистрирован: 17.11.2015

В общем, скриншот такой:

b707
Offline
Зарегистрирован: 26.05.2017

cofessor пишет:

После настройки в меню "Инструменты" появились поддерживаемые микросхемы и скорость процессора:
8MHz Internal Oscillator
20MHz Crystal/Resonator
16MHz Crystal/Resonator
1MHz Internal Oscillator
Проверяю скорость - от 1 МГц(4-й вариант) всё соответствует, а от 8 МГц всё работает раз в 10 медленней, а от 16-ти - ещё раза в 2 медленнее.

эти настройки не меняют скорость контроллера, а только компилируют код под соответствующую частоту. Если у вас при настройке 1 МГц код исполняется нормально - значит у вас МК работает на частоте  1 МГц. Потом вы компилируете код для 8 МГц - а заливаете то в контроллер, который по-прежнему работает под 1 МГц - не удивительно, что код "работает раз в 10 медленней" чем должен - на самом деле не в 10, а в 8 раз. Ну а при выборе в меню 16 МГц - "ещё раза в 2 медленнее" :)

Чтобы поменять частоту тактирования МК, его нужно перешить с правильными фьюзами.

cofessor
Offline
Зарегистрирован: 17.11.2015

А почему тогда в родных платах фьюзы конфигурируются правильно при выборе платы в меню?
По сути, тогда от Arduino IDE никакого толку, раз фьюзы всё равно нужно будет прошивать отдельно.
Вроде раньше видел где-то, что для добавочных платформ также формируется файл boards.txt, только не в папке "Arduino", а где-то в другом месте, и там точно так же прописываются все настройки, в т.ч. фьюзы. Если это так, то непонятно, почему это не срабатывает. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

cofessor пишет:

А почему тогда в родных платах фьюзы конфигурируются правильно при выборе платы в меню?
По сути, тогда от Arduino IDE никакого толку, раз фьюзы всё равно нужно будет прошивать отдельно.
Вроде раньше видел где-то, что для добавочных платформ также формируется файл boards.txt, только не в папке "Arduino", а где-то в другом месте, и там точно так же прописываются все настройки, в т.ч. фьюзы. Если это так, то непонятно, почему это не срабатывает. 


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

b707
Offline
Зарегистрирован: 26.05.2017

Из Ардуино ИДЕ можно и фьюзы перешить в соответствии с этими настройками - только вы же этого не делали, верно? - а просто выбора пункта из меню недостаточно.

Я сознательно не пишу, как перешить фьюзы, чтобы вы не дернулись сразу это делать. Дело в том, что если вы перешьете камень, работающий под 1 МГц - на 16 МГц и не добавите в схему внешний кварц - вы больше ничего с МК сделать уже не сможете и опять начнутся жалобы в конфе. что "ничего не работает". Работа с фьюзами - довольно опасная вещь, сначала изучите тему.

cofessor
Offline
Зарегистрирован: 17.11.2015

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

По avrdude то фьюзы прошиваются без проблем:

C:\Program Files\Arduino\hardware\tools\avr\bin>avrdude -C avrdude.conf -c usbasp -p m328p -P com1 -b 9600 -U lfuse:w:0xe2:m
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.03s
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: reading input file "0xe2"
avrdude: writing lfuse (1 bytes):
Writing | ################################################## | 100% 0.02s
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xe2:
avrdude: load data lfuse data from input file 0xe2:
avrdude: input file 0xe2 contains 1 bytes
avrdude: reading on-chip lfuse data:
Reading | ################################################## | 100% -0.00s
avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: safemode: Fuses OK (E:FF, H:D9, L:E2)
avrdude done.  Thank you.
Я сначала прошил плату на 1МГц, затем изменил бит CKDIV8 на 1 (см. выше) - на дисплее всё замелькало. Затем вновь прошил плату на 8 МГ-цах - всё стало чётко, временные интервалы стали правильными.
Т.о. я сделал работу МК от 8 МГц, но это не очень удобно и может не нужно ради одного только бита CKDIV8. Вроде его можно просто в самом скетче прописывать.
b707
Offline
Зарегистрирован: 26.05.2017

cofessor пишет:

 Вроде его можно просто в самом скетче прописывать.

Если это AVR Atmega328 -то нельзя, у АВР-ок только через перешивку фьюзов.

Вот, например, у СТМ8 - там тактирование можно менять на ходу, прямо из программы.

cofessor
Offline
Зарегистрирован: 17.11.2015

А что же тогда делает команда CLKPR?

Green
Offline
Зарегистрирован: 01.10.2015

Молодец, cofessor.) Только это не команда - это регистр. С помощью которого можно как понижать, так и повышать частоту контроллера. Не зависимо от установленного CKDIV8.

b707
Offline
Зарегистрирован: 26.05.2017

Green пишет:

Молодец, cofessor.) Только это не команда - это регистр. С помощью которого можно как понижать, так и повышать частоту контроллера. Не зависимо от установленного CKDIV8.

молодец-то то он может и да - только я очень бы советовал ему почитать, например, вот эту ветку:

https://www.avrfreaks.net/forum/atmega328p-clkpr-problem

если ОЧЕНЬ ЧЕТКО не понимать. что делаешь - вероятность окирпичить чип - 90%

А у ТС с пониманием туго - он даже не допер, почему унего скорость программы снижается при выборе разных конфигураций в Ардуино ИДЕ

Green
Offline
Зарегистрирован: 01.10.2015

Тем более, если ТС не понимает, не надо его вводить в заблуждение. Потому что реально с CLKPR проблем нет.

b707
Offline
Зарегистрирован: 26.05.2017

Green пишет:

Тем более, если ТС не понимает, не надо его вводить в заблуждение. Потому что реально с CLKPR проблем нет.

я не путаюсь ввести его в заблуждение - я вместе с ним эту тему изучаю. И что-то пока кажется - нафик-нафик этот CLKPR - с фьюзами как-то надежнее

Green
Offline
Зарегистрирован: 01.10.2015

Там больше проблема в программаторе. Фьюзы - это железно.

В программаторе - что бы имел возможность понижать скорость программирования в случае понижения частоты тактирования при помощи CLKPR.