Сетап: две ардуины, соединины между собой проводом между ногами 3 и 2 с подтяжкой на массу через резистор 10кОм. Питаются от одного источника.
Столкнулся со странной ситуацией. Оцениваю скорость кварца одной ардуины на другой. Код на первой (передающей) ардуине:
Дергаем лапкой на 4мкс, ждем некоторое время (тут 1мс), после чего дергаем второй раз и уходим в долгий сон.
код на принимающей ардуине:
Ждем когда прилетит единица, в прерывании записываем время в переменную, печатаем её в порт. Далее ждем когда прилетит вторая единица, пишем время в переменную и снова в порт.
И вот вся эта трахуёмина начинает работать только когда между передаваемыми единицами 1000мс и более. В принципе цель достигнута, разница в скорости кварцев обсчитана. Но вопрос, почему это не работает при паузе например 500мкс? Вернее работает, но наполовину: регистрируется только один импульс.
Столкнулся со странной ситуацией. Оцениваю скорость кварца одной ардуины на другой. Код на первой (передающей) ардуине:
C++:
#include <digitalWriteFast.h>
void setup() {
pinMode(3, OUTPUT);
digitalWriteFast(3, 0);
}
void loop() {
digitalWriteFast(3, 1);
delayMicroseconds(4);
digitalWriteFast(3, 0);
delay(1);
digitalWriteFast(3, 1);
delayMicroseconds(4);
digitalWriteFast(3, 0);
delay(9999999);
}
код на принимающей ардуине:
C++:
volatile uint32_t tmr;
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
attachInterrupt(0, isr, RISING);
}
void isr() {
tmr = micros();
}
void loop() {
Serial.println(tmr);
delay(200);
}
И вот вся эта трахуёмина начинает работать только когда между передаваемыми единицами 1000мс и более. В принципе цель достигнута, разница в скорости кварцев обсчитана. Но вопрос, почему это не работает при паузе например 500мкс? Вернее работает, но наполовину: регистрируется только один импульс.