Может ли IDE работать с основной тактовой частотой 32 кГц?
Я где-то читал, что частота основной тактовой частоты 32768 Гц мешает не только функциям micros() и millis(), но и некоторым другим вещам. Это правда? Придется ли мне отказаться от Arduino IDE для программирования avr, работающего на частоте 32768 Гц?
@Alexander M, 👍-1
Обсуждение1 ответ
Да, все сломается. Главный виновник вот в чем:
#define clockCyclesPerMicrosecond() ( F_CPU / 1000000L )
При любом значении ниже 1000000 результат вычисления будет равен 0.
Это означает, что код типа micros()
сломается, поскольку он использует:
return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
64/0 - это... гм... да... И что бы это ни было в конечном итоге, это умножение количества тиков. Итак... результат micros()
:... хм... да...
На самом деле при попытке скомпилировать что-либо получается (конечно, на UECIDE):
• Error at line 103 in file wiring.c:
‣ division by zero [-Werror=div-by-zero]
Поскольку при компиляции кода возникает ошибка, с этим мало что можно поделать.
Тем не менее, одна идея все же приходит на ум, и я думаю, она немного «сумасшедшая».
- Установите в файле boards.txt значение 3276800 Гц
Тогда все расчеты будут действительными, однако все они будут отклоняться в 100 раз.
Поскольку плата фактически работает на частоте 32768, а API считает, что она работает на частоте 3276800, все, что вам нужно сделать, это использовать в расчетах значения в 100 раз меньше, чем обычно.
Например, чтобы задержать 1 секунду, вы должны использовать delay(10);
вместо delay(1000);
. Или вы умножите возвращаемое значение millis()
на 100, чтобы получить реальное количество миллисекунд.
Скорость передачи данных должна быть в 100 раз выше, поэтому используйте Serial.begin(960000);
вместо Serial.begin(9600);
.
Конечно, lockCyclesPerMicro Second()
не предназначен для работы со значениями типа 3276800, и F_CPU/1000000L
приведет к тому, что 3
не будет 3.2768
, как вам хочется, поэтому расчет времени будет немного неверным. Возможно, вам придется соответствующим образом настроить такие параметры, как скорость передачи данных, чтобы компенсировать это.
- Заменить предохранители Arduino Uno (может ли Arduino Uno заменить свои собственные предохранители?)
- более низкая тактовая частота, чем ожидалось на attiny202
- Постоянный выход тактовой частоты Arduino
- В чем разница/связь между Arduino и AVR?
- Arduino 16 МГц только с 3,3 В?
- Как преобразовать скетч примера Arduino в полный проект C++?
- Не удается записать загрузчик через Arduino Nano clone ISP в atmega328p
- Что такое контакты XTAL1 и XTAL2 в Arduino Uno/Nano?
Вам все еще нужно знать, нужны ли конденсаторы фильтра? https://electronics.stackexchange.com/questions/416523/32khz-crystal-for-avr-caps-needed, @VE7JRO
@VE7JRO Нет. А ты можешь ответить на этот вопрос?, @Alexander M
Извините, у меня нет для вас однозначного ответа. Здесь ведется дискуссия по этому поводу: https://forum.arduino.cc/index.php?topic=75397.0., @VE7JRO
Расскажите, пожалуйста, почему вам нужна основная тактовая частота 32,768 кГц. Слышали ли вы о проблеме XY http://xyproblem.info/ Большинство микроконтроллеров и процессоров, используемых в платах Arduino, способны использовать кристалл с частотой 32,768 кГц, но код Arduino не предназначен для такой низкой тактовой частоты., @Jot