Максимальная частота цифрового сигнала в Arduino Uno?
Поскольку Arduino Uno имеет генератор 16 МГц, но при запуске программы он имеет меньшую частоту, потому что для запуска программы используется часть вычислительной мощности.
Я использовал задержку(1)
, но она дает мне около 500 Гц.
Мои вопросы:
- Есть ли какой-либо способ достичь частоты более 500 Гц?
- Какова будет максимальная частота цифрового сигнала для приведенной ниже программы?
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
}
@koolwithk, 👍4
Обсуждение3 ответа
Лучший ответ:
Да, используйте аппаратные таймеры.
Вы можете достичь 8 МГц.
Пример скетча, который выводит 8 МГц на вывод 9 на Uno:
#ifdef __AVR_ATmega2560__
const byte CLOCKOUT = 11; // Mega 2560
#else
const byte CLOCKOUT = 9; // Uno, Duemilanove, etc.
#endif
void setup ()
{
// set up 8 MHz timer on CLOCKOUT (OC1A)
pinMode (CLOCKOUT, OUTPUT);
// set up Timer 1
TCCR1A = bit (COM1A0); // toggle OC1A on Compare Match
TCCR1B = bit (WGM12) | bit (CS10); // CTC, no prescaling
OCR1A = 0; // output every cycle
} // end of setup
void loop ()
{
// whatever
} // end of loop
Если вы измените OCR1A, вы можете получить более низкие частоты. Если вы измените прескалер, вы снова сможете получить более низкие частоты.
Смотрите мою страницу о таймерах для получения более подробной информации.
Ниже я поместил форму сигнала осциллографа из вашего кода. Спасибо!, @Lukas Kock
Кроме того, не забывайте, что существуют альтернативные методы переключения выходов.
Вы можете использовать ПОРТЫ для выполнения этой работы.
Вот хороший пример. И еще один здесь.
И этот код является идеей, лежащей в его основе:
void setup()
{
DDRD = B11111111; // set PORTD (digital 7~0) to outputs
}
void loop()
{
PORTD = B11111111; // set PORTD pins (digital 7~0) high
PORTD = B00000000; // set PORTD pins (digital 7~0) low
}
P.S. Не забывайте, что нумерация портов относится к выводам чипа, а не к выводам/ножкам Arduino.
Код Ника Гэммона отлично сработал для меня. Вот изображение осциллографа формы сигнала, которое я получил из его кода:
Его приведенный выше код (от Ника Гэммона, 25 января 16 года в 20:33) отлично сработал для меня. Я использовал его код на Arduino UNO и получил выходную частоту около 7,9 МГц с амплитудой примерно 1 В (от пика к пику, с шипами, увеличивающими амплитуду от пика к пику примерно до 2 В).
Изображение выше было получено с помощью моего осциллографа 40 МГц от ICEL Manaus (производитель) на выводе 9 (я использовал Arduino UNO), со светодиодом и резистором в качестве нагрузки на выводе 9:
- зеленый светодиод с падением напряжения около 1,79 В
- и резистор 4,7 Ом с допуском 5%
Датчик осциллографа (канал 2, с обнаружением триггера наклона падения) находится на резисторе 4,7 Ом. Это следует порядку подключения из вывода 9 от Arduino UNO: ВЫВОД 9 > >зеленый светодиод > >Резистор 4,7 Ом > >ЗЕМЛЯ.
Зеленый светодиод продолжает мигать при нормальном свечении по сравнению с использованием на других выходных частотах.
Я использовал внешний источник питания постоянного тока 5 В вместе с USB-соединением на своем компьютере.
Если у вас есть какие-либо вопросы, просто задайте их здесь. Спасибо и спасибо Нику Гэммону
Рад, что это сработало для вас! Небольшое расхождение в частоте может быть объяснено тем фактом, что Uno имеет резонатор, а не кристалл в качестве источника частоты для основного процессора., @Nick Gammon
- Генерировать 1,7 МГц с PWM в Uno?
- Можно ли сгенерировать точный тактовый импульс 15 кГц с помощью ардуино?
- Изменение частоты вывода ШИМ на Arduino Uno
- Как увеличить громкость динамика с помощью библиотеки Talkie в Arduino Uno...?
- Проблема по осуществлению ультразвукой схемы
- создание анализатора гармоник мощности, который будет измерять амплитуды основной и кратных ей частот (например, 50 Гц, 100 Гц, 150 Гц, 200 Гц,...)
- Выход частоты FG
- Запись данных через PIN-код с определенной частотой
обратите внимание, что digitalWrite работает относительно медленно. Кроме того, обертывание всего внутри a
while(true){...}
сделает это немного быстрее, вместо того, чтобы позволить функции цикла выйти., @Gerben