Другие языки программирования и технологии

Как получить 1 МГц на ШИМ порту arduino?

Искал информацию, но дельного или рабочего так и не нашел, так что прошу помочь кому не сложно. Заранее спасибо
нет делителя на 16, только 8 и 32, вряд ли получится
Вадим Николаев
Вадим Николаев
85 240
Лучший ответ
ШИМ на ардуино устроен примерно так
На выходе формируется сигнал с частью времени установленной "единицей", остальное время - 0
Имеем "разрешение" 8 бит - получаем, что для сигнала с соотношением единицы к нулю 50/50 - частота будет равна частоте сигнала ШИМ-генератора (один период "синусоиды")
Но в ардуино максимальная частота генератора ШИМ = 62 500 Гц (для кварца 16МГц)

void setup() {
// ШИМ 8 разрядов, 62,5 кГц
TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09;
analogWrite(9, 128); // на выводе 9 ШИМ=50%
}

void loop() {
}
Костя Вавейков
Костя Вавейков
65 739
Никак. Ардуинка не тянет такие частоты.
Я Тут
Я Тут
26 548
Нормально я с ШИМ не разбирался. Но юзал вот такую функцию, скопипащенную с форума:
https://pastebin.com/Rfg1Xrj7
Пин 9 ставишь в OUTPUT, вызываешь функцию с параметром 1000000, получаешь меандр 1 МГц на 9 пине.
И логический анализатор купи для подобных задач. Бери так называемый "клон Saleae Logic", который китайский и стоит 700-1500 руб. Именно л\а нужен, а не осциллограф.
Изучайте датащит на AVR Atmega328, а именно тактирование. Теоретически есть два способа получения 1 МГц на ноге.
1 - Работа микроконтроллера от внутренней RC цепочки (8 МГц), во фьюзах выставляете делитель тактовой частоты на 8 вот вам и 1 МГц.
2 - Работа от кварца 16 Мгц. Запускаете таймер в режиме СТС и через него уже получаете заветные 1 МГц
Vadim Proturenko
Vadim Proturenko
3 184