+/-7В на вход у него по-моему, но причина скорее всего не в нём, собрал компаратор на ОУ, тоже не проканало, причина в чём-то другом
если 7 вольт то умрёт однозначно!
Я бы мерил нескольно иначе, вместо резистора в контуре- INA219 в диагональ выпрямительного вч моста, съём правда по I2C )))
Навесной монтаж работает очень не стабильно, развёл плату, жду когда изготовят. Поэтому не могу проверить код.
Выход компаратора, насколько я понял, подключаем к цифровому входу (D3 или D2)?
(Компаратор AD8561 по некоторым причинам заменил на компаратор на ОУ, на выходе оу будет от 0,5 до 5В)
Во время практики в институте делал (под руководством) фотоприемник на 50-80Мгц (полоса 30МГц) на OPA687, другой делал сам на 30Мгц (AD8001) для дальномера. Сомневаюсь, что у вас полосы шире 10МГц. Мой монтаж на макетке в корпусе (частоты не самые низкие) ни один ни второй не "звенели", потому, что питание было правильно сделано, каскады согласованы. А в соседней лаборатории со смеху помирали от разводки простого УНЧ, который после сборки имел претензии на генератор белого шума. Клапауций хоть и не стесняется в выражениях, но говорит дело. С полосой до 10МГц монтаж либо есть, либо его нет т.к. он не правильный. Поставьте пузырь, тому, кто плату разводил, если она не загудит или берите букварь. Пример ЧУДО МОНТАЖА по этой ссылке.
///////////////////////////////////
//
// Пины копки и сигнала
// должны быть 2 и 3 в любом порядке
//
#define SIGNAL_PIN 3
///////////////////////////////////
//
// Время ожидания продолжения сигнала в миллисекундах
// Если за это время уровень ни разу не стал LOW,
// то считаем, что сигнал прекратился
//
#define CONTROL_PERIOD 1ul
///////////////////////////////////
//
// Возможные состояния измерителя
//
enum METER_STATES {
WAITING_FOR_SIGNAL = 0, // Ждём LOW на сигнальный пин
MEASURING, // Измеряем
READY // Закончили, результат готов
};
//////////////////////////////////
//
// Переменная для хранени текущего состояния измерителя
// Изначальное состояние - ожидание нажатия кнопки
//
static volatile METER_STATES meterState = WAITING_FOR_SIGNAL;
//////////////////////////////////
//
// Переменные для хранения времени начала отсчёта
// и времени окончания отсчёта (пропадания сигнала)
//
static volatile unsigned long startSignalTime = 0, endSignalTime = 0;
//////////////////////////////////
//
// Функция - обработчик поступающего во
// время измерения сигнала. Выполняется,
// когда на сигнальном пине появляется HIGH
//
void measureISR(void) {
endSignalTime = millis(); // просто запоминем время
}
//////////////////////////////////
//
// Функция
//
void waitingISR(void) {
startSignalTime = endSignalTime = millis(); // запоминаем время
detachInterrupt(SIGNAL_PIN - 2);
pinMode(SIGNAL_PIN, INPUT);
attachInterrupt(SIGNAL_PIN - 2, measureISR, FALLING);
meterState = MEASURING; // Изменяем состояние на "измеряем"
}
void setup(void) {
Serial.begin(115200);
pinMode(SIGNAL_PIN, INPUT);
attachInterrupt(SIGNAL_PIN - 2, waitingISR, RISING);
}
void loop(void) {
if (meterState == MEASURING) {
//
// Проверяем, что с момент последнего HIGH
// прошло >= CONTROL_PERIOD миллисекунд
//
if (millis() - endSignalTime >= CONTROL_PERIOD) {
//
// если прошло, то заканчиваем измерения
//
detachInterrupt(SIGNAL_PIN - 2);
meterState = READY; // закончили
Serial.print("Result is: ");
Serial.print(endSignalTime - startSignalTime);
Serial.println(" milliseconds");
}
}
}
Выдаёт результат с точностью 1 млсек, однако время всего сигнала всего 6 млсек, как исправить точность измерений до мксек?
сам попробовал, получил не корректные данные
///////////////////////////////////
//
// Пины копки и сигнала
// должны быть 2 и 3 в любом порядке
//
#define SIGNAL_PIN 3
///////////////////////////////////
//
// Время ожидания продолжения сигнала в миллисекундах
// Если за это время уровень ни разу не стал LOW,
// то считаем, что сигнал прекратился
//
#define CONTROL_PERIOD 1ul
///////////////////////////////////
//
// Возможные состояния измерителя
//
enum METER_STATES {
WAITING_FOR_SIGNAL = 0, // Ждём LOW на сигнальный пин
MEASURING, // Измеряем
READY // Закончили, результат готов
};
//////////////////////////////////
//
// Переменная для хранени текущего состояния измерителя
// Изначальное состояние - ожидание нажатия кнопки
//
static volatile METER_STATES meterState = WAITING_FOR_SIGNAL;
//////////////////////////////////
//
// Переменные для хранения времени начала отсчёта
// и времени окончания отсчёта (пропадания сигнала)
//
static volatile unsigned long startSignalTime = 0, endSignalTime = 0;
//////////////////////////////////
//
// Функция - обработчик поступающего во
// время измерения сигнала. Выполняется,
// когда на сигнальном пине появляется HIGH
//
void measureISR(void) {
endSignalTime = millis(); // просто запоминем время
}
//////////////////////////////////
//
// Функция
//
void waitingISR(void) {
startSignalTime = endSignalTime = millis(); // запоминаем время
detachInterrupt(SIGNAL_PIN - 2);
pinMode(SIGNAL_PIN, INPUT);
attachInterrupt(SIGNAL_PIN - 2, measureISR, FALLING);
meterState = MEASURING; // Изменяем состояние на "измеряем"
}
void setup(void) {
Serial.begin(115200);
pinMode(SIGNAL_PIN, INPUT);
attachInterrupt(SIGNAL_PIN - 2, waitingISR, RISING);
}
void loop(void) {
if (meterState == MEASURING) {
//
// Проверяем, что с момент последнего HIGH
// прошло >= CONTROL_PERIOD миллисекунд
//
if (millis() - endSignalTime >= CONTROL_PERIOD) {
//
// если прошло, то заканчиваем измерения
//
detachInterrupt(SIGNAL_PIN - 2);
meterState = READY; // закончили
Serial.print("Result is: ");
Serial.print(endSignalTime - startSignalTime);
Serial.println(" milliseconds");
}
}
}
Выдаёт результат с точностью 1 млсек, однако время всего сигнала всего 6 млсек, как исправить точность измерений до мксек?
сам попробовал, получил не корректные данные
строки с 9 по 16 - с этим контроллером и кодом - никак, даже с micros()
показали бы времена еще в посте 7(на графиках), уже тогда ответили бы. В посте 16, в коде, строка 11 - чего тогда вопрос не задали???
// строки с 9 по 16 - с этим контроллером и кодом - никак, даже с micros()
не понял смысл предложения.
// показали бы времена еще в посте 7(на графиках), уже тогда ответили бы. В посте 16, в коде, строка 11 - чего тогда вопрос не задали???
Когда моделировал, не знал, какой длительность сигнала будет, думал в милллисекундах.
Когда собрал в железе, оказалось микро
Я схему видел, а какое максимальное амплитудное с контура имеем?
11,5 В
11,5 В
не должен умирать компаратор при питании в 15 вольт, тогда что?
Не факт. Нада в доках проверить допустимое напряжение на входе и допустимую разницу межд входами. К тому же этот компаратор от рождения ОУ был ;)
+/-7В на вход у него по-моему, но причина скорее всего не в нём, собрал компаратор на ОУ, тоже не проканало, причина в чём-то другом
+/-7В на вход у него по-моему, но причина скорее всего не в нём, собрал компаратор на ОУ, тоже не проканало, причина в чём-то другом
если 7 вольт то умрёт однозначно!
Я бы мерил нескольно иначе, вместо резистора в контуре- INA219 в диагональ выпрямительного вч моста, съём правда по I2C )))
Навесной монтаж работает очень не стабильно, развёл плату, жду когда изготовят. Поэтому не могу проверить код.
Выход компаратора, насколько я понял, подключаем к цифровому входу (D3 или D2)?
(Компаратор AD8561 по некоторым причинам заменил на компаратор на ОУ, на выходе оу будет от 0,5 до 5В)
Навесной монтаж работает очень не стабильно
кривые руки, а не навесной монтаж
//кривые руки, а не навесной монтаж
Вам там наверно ведней, вы же владеете всей информацией
//кривые руки, а не навесной монтаж
Вам там наверно ведней, вы же владеете всей информацией
мне - видней, у меня есть букварь.
Поздравляю, можете с ним идти дальше
Навесной монтаж работает очень не стабильно
кривые руки, а не навесной монтаж
Во время практики в институте делал (под руководством) фотоприемник на 50-80Мгц (полоса 30МГц) на OPA687, другой делал сам на 30Мгц (AD8001) для дальномера. Сомневаюсь, что у вас полосы шире 10МГц. Мой монтаж на макетке в корпусе (частоты не самые низкие) ни один ни второй не "звенели", потому, что питание было правильно сделано, каскады согласованы. А в соседней лаборатории со смеху помирали от разводки простого УНЧ, который после сборки имел претензии на генератор белого шума. Клапауций хоть и не стесняется в выражениях, но говорит дело. С полосой до 10МГц монтаж либо есть, либо его нет т.к. он не правильный. Поставьте пузырь, тому, кто плату разводил, если она не загудит или берите букварь. Пример ЧУДО МОНТАЖА по этой ссылке.
контур работает в ударном режиме, там гармоник должно быть немеряно и чётных и нечётных, так что только экранирование
Код работает
/////////////////////////////////// // // Пины копки и сигнала // должны быть 2 и 3 в любом порядке // #define SIGNAL_PIN 3 /////////////////////////////////// // // Время ожидания продолжения сигнала в миллисекундах // Если за это время уровень ни разу не стал LOW, // то считаем, что сигнал прекратился // #define CONTROL_PERIOD 1ul /////////////////////////////////// // // Возможные состояния измерителя // enum METER_STATES { WAITING_FOR_SIGNAL = 0, // Ждём LOW на сигнальный пин MEASURING, // Измеряем READY // Закончили, результат готов }; ////////////////////////////////// // // Переменная для хранени текущего состояния измерителя // Изначальное состояние - ожидание нажатия кнопки // static volatile METER_STATES meterState = WAITING_FOR_SIGNAL; ////////////////////////////////// // // Переменные для хранения времени начала отсчёта // и времени окончания отсчёта (пропадания сигнала) // static volatile unsigned long startSignalTime = 0, endSignalTime = 0; ////////////////////////////////// // // Функция - обработчик поступающего во // время измерения сигнала. Выполняется, // когда на сигнальном пине появляется HIGH // void measureISR(void) { endSignalTime = millis(); // просто запоминем время } ////////////////////////////////// // // Функция // void waitingISR(void) { startSignalTime = endSignalTime = millis(); // запоминаем время detachInterrupt(SIGNAL_PIN - 2); pinMode(SIGNAL_PIN, INPUT); attachInterrupt(SIGNAL_PIN - 2, measureISR, FALLING); meterState = MEASURING; // Изменяем состояние на "измеряем" } void setup(void) { Serial.begin(115200); pinMode(SIGNAL_PIN, INPUT); attachInterrupt(SIGNAL_PIN - 2, waitingISR, RISING); } void loop(void) { if (meterState == MEASURING) { // // Проверяем, что с момент последнего HIGH // прошло >= CONTROL_PERIOD миллисекунд // if (millis() - endSignalTime >= CONTROL_PERIOD) { // // если прошло, то заканчиваем измерения // detachInterrupt(SIGNAL_PIN - 2); meterState = READY; // закончили Serial.print("Result is: "); Serial.print(endSignalTime - startSignalTime); Serial.println(" milliseconds"); } } }Выдаёт результат с точностью 1 млсек, однако время всего сигнала всего 6 млсек, как исправить точность измерений до мксек?
сам попробовал, получил не корректные данные
Код работает
/////////////////////////////////// // // Пины копки и сигнала // должны быть 2 и 3 в любом порядке // #define SIGNAL_PIN 3 /////////////////////////////////// // // Время ожидания продолжения сигнала в миллисекундах // Если за это время уровень ни разу не стал LOW, // то считаем, что сигнал прекратился // #define CONTROL_PERIOD 1ul /////////////////////////////////// // // Возможные состояния измерителя // enum METER_STATES { WAITING_FOR_SIGNAL = 0, // Ждём LOW на сигнальный пин MEASURING, // Измеряем READY // Закончили, результат готов }; ////////////////////////////////// // // Переменная для хранени текущего состояния измерителя // Изначальное состояние - ожидание нажатия кнопки // static volatile METER_STATES meterState = WAITING_FOR_SIGNAL; ////////////////////////////////// // // Переменные для хранения времени начала отсчёта // и времени окончания отсчёта (пропадания сигнала) // static volatile unsigned long startSignalTime = 0, endSignalTime = 0; ////////////////////////////////// // // Функция - обработчик поступающего во // время измерения сигнала. Выполняется, // когда на сигнальном пине появляется HIGH // void measureISR(void) { endSignalTime = millis(); // просто запоминем время } ////////////////////////////////// // // Функция // void waitingISR(void) { startSignalTime = endSignalTime = millis(); // запоминаем время detachInterrupt(SIGNAL_PIN - 2); pinMode(SIGNAL_PIN, INPUT); attachInterrupt(SIGNAL_PIN - 2, measureISR, FALLING); meterState = MEASURING; // Изменяем состояние на "измеряем" } void setup(void) { Serial.begin(115200); pinMode(SIGNAL_PIN, INPUT); attachInterrupt(SIGNAL_PIN - 2, waitingISR, RISING); } void loop(void) { if (meterState == MEASURING) { // // Проверяем, что с момент последнего HIGH // прошло >= CONTROL_PERIOD миллисекунд // if (millis() - endSignalTime >= CONTROL_PERIOD) { // // если прошло, то заканчиваем измерения // detachInterrupt(SIGNAL_PIN - 2); meterState = READY; // закончили Serial.print("Result is: "); Serial.print(endSignalTime - startSignalTime); Serial.println(" milliseconds"); } } }Выдаёт результат с точностью 1 млсек, однако время всего сигнала всего 6 млсек, как исправить точность измерений до мксек?
сам попробовал, получил не корректные данные
строки с 9 по 16 - с этим контроллером и кодом - никак, даже с micros()
показали бы времена еще в посте 7(на графиках), уже тогда ответили бы. В посте 16, в коде, строка 11 - чего тогда вопрос не задали???
// строки с 9 по 16 - с этим контроллером и кодом - никак, даже с micros()
не понял смысл предложения.
// показали бы времена еще в посте 7(на графиках), уже тогда ответили бы. В посте 16, в коде, строка 11 - чего тогда вопрос не задали???
Когда моделировал, не знал, какой длительность сигнала будет, думал в милллисекундах.
Когда собрал в железе, оказалось микро