Сколько времени требуется ардуино, чтобы достичь main()?
Я пытаюсь эмулировать поведение схемы с помощью Attiny85
Вот результат, который я получил на данный момент:
На рисунке выше D2 — это VCC, D4, D5 и D6 — выходы схемы, которую я пытаюсь эмулировать. D7 — это результат работы Attiny85
Код, который я использую:
#define F_CPU 8000000L
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
int main() {
DDRB = 0b00001000;
PORTB = 0b00001000;
_delay_ms(5);
PORTB = 0b00000000;
_delay_ms(5);
PORTB = 0b00001000;
_delay_ms(5);
PORTB = 0b00000000;
_delay_ms(5);
_delay_ms(5);
while(1)
{
PORTB = 0b00001000;
_delay_ms(1);
PORTB = 0b00000000;
_delay_ms(1);
}
return 0;
}
Согласно этому, с момента включения до фактического запуска основной программы проходит примерно 64 мс.
Есть ли причина такой задержки? Как я могу его как-то уменьшить (в идеале до 20 мс или меньше)?
1 ответ
Лучший ответ:
ATtiny85 имеет встроенный счетчик задержки, который поддерживает сброс MCU. режим в течение некоторого времени после подачи питания. Кажется, это задумано как ожидание стабилизации часов и питания. Длина этого задержка зависит от выбранного вами источника синхронизации и несколько настраивается с помощью предохранителей.
Согласно вашему коду, ваш MCU работает на частоте 8 МГц. Я предполагаю, что ты затем используют внутренний RC-генератор в качестве источника синхронизации. Если это В этом случае у вас есть три варианта задержки запуска:
- 20 циклов ЦП
- 20 циклов ЦП + 4 мс
- 20 циклов ЦП + 64 мс
Последнее рекомендуется, если ваша мощность растет медленно, и это значение по умолчанию. конфигурации, в которой поставляются эти микроконтроллеры. Если ваш уровень мощности повышается быстро, вы можете выбрать более короткую задержку, запрограммировав SUT. предохранители. Подробности смотрите в техническом описании (разделы «Системные часы» и «Часы»). Параметры → Источники синхронизации → Калиброванный внутренний генератор).
Вы правы — мой предохранитель L был запрограммирован как 0xE1 (тактовая частота PLL, задержка 64 мс). Я изменил его на 0xD2 (внутренние часы, 8 МГц, задержка 4 мс), и все заработало., @Filipe Rodrigues
- Связь последовательного порта Digispark
- Библиотеки I2C для ATTiny85?
- ATtiny85 Digispark clones failing USB handshake - как их запрограммировать?
- длина провода i2c
- Программирование сервопривода на ATtiny85
- Программирование микроконтроллера Attiny85 без arduino
- Digispark ATtiny 85 - не распознается как HID устройство
- Клавиатура Digispark ATtiny85
вы используете загрузчик или программируете его через интернет-провайдера?, @Juraj
Извините, забыл упомянуть - да, я программировал через интернет-провайдера (usbtiny), чтобы убедиться, что загрузчик не активен, @Filipe Rodrigues