Работаю с проектом Aruino, который управляет платой синтезатора частоты на Si5351. В проекте очень важны тайминги, в частности - длительность импульсов.
Я нашел готовый проект на GitHub и отредактировал его под свои нужды. Запустил на Arduino Nano - работало нормально. Но для окончательного устройства нужно было использовать «клон Ардуино» — WeMos XI.
Когда я запустил проект на этой плате - всё заработало в несколько раз медленнее. Импульсы стали длиннее, что уже недопустимо для конструкции.
// ***** Function to transmit 'space' (higher FSK tone) for BIT_TIME microseconds *****
void TransmitSpace(int BIT_TIME)
{
long NOW = micros();
long END = NOW + BIT_TIME;
setFrequency(SPACE_FREQ);
digitalWrite(FSK_PIN, LOW);
do { NOW = micros(); } while (NOW < END);
}
// ***** Function to transmit 'mark' (lower FSK tone) for BIT_TIME microseconds *****
void TransmitMark(int BIT_TIME)
{
long NOW = micros();
long END = NOW + BIT_TIME;
digitalWrite(FSK_PIN, HIGH);
setFrequency(MARK_FREQ);
do { NOW = micros(); } while (NOW < END);
}
Предполагаю: программа с помощью оператора
millis() считает время с момента запуска, а в переменной
BIT_TIME устанавливается как раз длительность импульса в этих самых миллисекундах. Вроде все должно работать независимо от тактовой частоты.
Однако что пошло не так? Что делать?