Это мой первый практический проект с Arduino UNO, и правда в том, что я ничего не трогал :(Мне нужно преобразовать Arduino в 14-битный драйвер кодировщика, для этого мне нужно сгенерировать 14-импульсный поезд до фиксированной частоты, превышающей 30 кГц, и установить между каждым поездом мертвое время 50 микросекунд или пока еще немного. Во всех вариантах, которые я понял, я наткнулся на свой осциллограф с раздражающим джиттером или фазовым сдвигом в . волна, которая должна быть как можно более чистым Это был мой первый сырой вариант:Как удалить джиттер в последовательности импульсов в Arduino UNO?
void setup() {
pinMode(11, OUTPUT);
}
void loop() {
for (int i=0; i<15; i++){
digitalWrite(11, HIGH);
delayMicroseconds(12);
digitalWrite(11, LOW);
delayMicroseconds(12);
}
delayMicroseconds(50);
}
Тогда я попытался решить с помощью таймера, чтобы сделать волну, и там, кажется, время продукт смещение остановка и суммирование rize таймер, чтобы составить мертвое время. Я использую TimerOne библиотеку, которую я загрузить по адресу: https://github.com/PaulStoffregen/TimerOne
#include <TimerOne.h>
const byte CLOCKOUT = 11;
volatile long counter=0;
void setup() {
Timer1.initialize(15); //Cada 15 microsegundos cambio el estado del pin en la funcion onda dando un periodo
Timer1.attachInterrupt(Onda); //de 30 microsegundos
pinMode (CLOCKOUT, OUTPUT);
digitalWrite(CLOCKOUT,HIGH);
}
void loop() {
if (counter>=29){ //con 29 cambios logro los pulsos que necesito
Timer1.stop(); //Aqui creo el tiempo muerto, el cual esta debe estar en HIGH
digitalWrite(CLOCKOUT,HIGH);
counter=0;
delayMicroseconds(50);
Timer1.resume();
}
}
void Onda(){
digitalWrite(CLOCKOUT, digitalRead(CLOCKOUT)^1); //Cambio el estado del pin
counter+=1;
}
FYI, вы можете попробовать просить более в [arduino.se]. –