=GEN= F 5de2236a-c225-4318-934e-777f35a54ad1 Желаемая частота 1baad5f8-c152-4184-af0b-55b38ba6f644 Fr e651190f-53d9-49cb-9e25-6241349b2371 Частота реальная, расчётная a9529dba-12a7-4d8f-89df-5a43426ceeb3 ba90dae4-91f8-415c-9db4-d257239dc638 =GEN= static uint32_t enc=1; //переменная счёта энкодера uint32_t ocr; uint32_t divider; float freq; if (enc > 0){ enc = F ; //расчёт прескалера и OCR по нужной частоте divider=1; ocr = (F_CPU / enc /2 /divider); if (ocr >65536) { divider=8; ocr = F_CPU / enc /2 /divider; if (ocr >65536) { divider=64; ocr = F_CPU / enc /2 /divider; if (ocr >65536) {divider=256; ocr = F_CPU / enc /2 /divider; if (ocr >65536) { divider=1024; ocr = F_CPU / enc /2 /divider; if (ocr >65536){ocr=65536; }}}}} OCR1A=ocr-1; //запись в регистр прескалера switch (divider) { case 1: TCCR1B=1|(1<<WGM12); break; case 8: TCCR1B=2|(1<<WGM12); break; case 64: TCCR1B=3|(1<<WGM12); break; case 256: TCCR1B=4|(1<<WGM12); break; case 1024: TCCR1B=5|(1<<WGM12); break; } freq= (float) F_CPU/2 / (OCR1A+1) /divider; if (freq <10000) { Serial.print(freq,1);Serial.println(" Hz "); } if (freq >10000) { Serial.print(freq/1000,3);Serial.println(" kHz");} } //end if serial.. 1091 Serial.begin(9600); pinMode (9,OUTPUT); // выход генератора TCCR1A=1<<COM1A0; //подключить выход OC1A первого таймера TCCR1B=0;// 129 8fd09b22-fef5-49e7-b45e-6dbe281be759 0deba5ba-1325-4bf2-97f7-46b8383e3355 ГЕНЕРАТОР ДЛЯ "NANO" И ПОДОБНЫХ ------------------------------------------------------------------------------------------------------- Генератор генерирует частоту на выводе D9 до 6 МГц Используется первый таймер, отсюда все последствия Нужную вам частоту необходимо задать на входе блока F На выводе D9 будут импульсы с ближайшей возможной частотой На выводе Fr будет значение этой РЕАЛЬНОЙ частоты в кГц, чем больше частота тем больше шаг между ближайшими частотами 514 static uint32_t enc=1; //переменная счёта uint32_t ocr; uint32_t divider; float freq; if (enc > 0){ enc = F ; //расчёт прескалера и OCR по нужной частоте divider=1; ocr = (F_CPU / enc /2 /divider); if (ocr >65536) { divider=8; ocr = F_CPU / enc /2 /divider; if (ocr >65536) { divider=64; ocr = F_CPU / enc /2 /divider; if (ocr >65536) {divider=256; ocr = F_CPU / enc /2 /divider; if (ocr >65536) { divider=1024; ocr = F_CPU / enc /2 /divider; if (ocr >65536){ocr=65536; }}}}} OCR1A=ocr-1; //запись в регистр прескалера switch (divider) { case 1: TCCR1B=1|(1<<WGM12); break; case 8: TCCR1B=2|(1<<WGM12); break; case 64: TCCR1B=3|(1<<WGM12); break; case 256: TCCR1B=4|(1<<WGM12); break; case 1024: TCCR1B=5|(1<<WGM12); break; } freq= (float) F_CPU/2 / (OCR1A+1) /divider; } 908 pinMode (9,OUTPUT); // выход генератора TCCR1A=1<<COM1A0; //подключить выход OC1A первого таймера TCCR1B=0; 108