Измерение длительности импульса от 1гц до 250кгц с выводом данной измерения.
Что то он у меня срывается после примерно 7-10сек работы... Начинаются прерывания в выводе данных. На скрине все настройки что нужны? Может еще что то надо?
Более подробнее, что надо получить, а то не улавливаю сути вопроса...
Получил время импульса и паузы, раздели на нужное, подай на генератор.
Саш, как запустить генератор с длительностью импульса и паузы меньше 1 микросекунды. А то получается что минимальное значение в сумме 2 микросекунды или около 500 килогерц, Если конечно я правильно перевел. Просто стало интересно какую максимальную частоту можно с ESP выжать.
Написать свой генератор.fsergei70 писал(а): ↑04.07.2018{, 21:08}Саш, как запустить генератор с длительностью импульса и паузы меньше 1 микросекунды. А то получается что минимальное значение в сумме 2 микросекунды или около 500 килогерц, Если конечно я правильно перевел. Просто стало интересно какую максимальную частоту можно с ESP выжать.
А вот тут интрига! Подробнее можно? Может я сумею код собрать? Желательно на что опираться в поиске...Sancho писал(а): ↑04.07.2018{, 21:18}Написать свой генератор.
Попробую попозже, работы основной подвалило...
Подумайте немного:injener писал(а): ↑05.07.2018{, 15:59}Sancho, ну ведь точно! Если задействовать аппаратный таймер то он будет равен для всех!
Диапазон частот не высок. 6имп/метр. До 700кгц думаю потянет.
У меня два выхода. Первый найти датчик скорости от другой машины, но потом в приборке делитель городить. Второй собрать множитель и от него все доп устройство будет работать... Второе предпочтительнее. Сегодня буду пробовать собирать и поженить множитель с другими платами...
Не понял, о какой памяти идёт речь.
Как я вижу, эскиз, так сказать:
Код: Выделить всё
volatile long unsigned int time_gen, time =0;
volatile bool work = false;
volatile byte step =2;
По прерыванию rising обработчик
{
step--;
if(step)запускаем функцию abcd(step);
else{time_gen=time/3; time=0; work=1;}
}
void abcd(step)
{
while(1){time++} // считаем такты между фронтами в бесконечном цикле,
// узнаём косвенно время периода
}
loop(){
if(work)
{
noInterrupts(); // хватит прерываний
//генерируем сигнал, используя полученное time_gen
// время генерации должно зависеть от полученного значения, я так думаю...
// Когда надоело генерить: { work = 0; step =2; interrupts();}
// и идём за новыми данными
}
}
О массивах.
Я себе это немного по другому представлял... Тогда уж лучше пристрелите меня.
Например?Sancho писал(а): ↑05.07.2018{, 16:57}Подумайте немного:
Любой генератор в мк привязан к кварцу,
Частота тем или иным образом будет привязана к производным от деления, даже если делать импульс и паузу разной длинны.
Плавного изменения в области больших частот ожидать не стоит при всём желании - скорость пина, да и программы в общем, не велика. Надо смотреть в сторону более быстрых мк.
Только одна мысль - по фронту дёргаем выход нужное кол-во раз. умножитель за 100 руб. не более. недорого.