Если подавать питание на USB вход, то аппаратный сброс проходит не зависимо от положения датчика, естественно кнопка reset приводит устройство в чувство ))), а вот замыкание контакта rst на gnd - НЕТ!
Что-то Вы хитрое намудрили. Согласен с Евгением, не вижу разницы между кнопой ресет и замыканием контакта rst на граунд.
естественно кнопка reset приводит устройство в чувство ))), а вот замыкание контакта rst на gnd - НЕТ!
А кнока reset - это не замыкание контакта?
Решил проблему в лоб!!!
Запитал датчики от выводов ардуины настроив их на выход и выставив в HIGH )))
Да, вторая ардуина вела себя так же, на ардуине два вывода RESET, замыкал на GND тот вывод, что между GND и +5V, что там намудрил ROBODYN с разводкой пинов не выяснял.
Но раз эффект проявился и со второй, значит это ОСОБЕННОСТИ построения платы.
Код в посте заменил на актуальную версию, возврат на исходный датчик - убрал, оказалось лишним.
(PS есть конечно подозрение, что плохо отмыл спиртом после пайки, то-есть это не исключено, спирт всё жеж ))) )
естественно кнопка reset приводит устройство в чувство ))), а вот замыкание контакта rst на gnd - НЕТ!
А кнока reset - это не замыкание контакта?
Евгений Петрович, так всё же, сможете изыскать возможность переделать библиотеку на совместимость с Servo.h ??? Очень хочется сервотестер в металле воплотить )))
PS а вот если бы я мог использовать STM32F103 видимо всё было бы значительно проще, там три необходимых нам таймера в полном распоряжении... среду по IDE поставил, но пока только удалось диодиком помигать )))
Евгений Петрович, так всё же, сможете изыскать возможность переделать библиотеку на совместимость с Servo.h ??? Очень хочется сервотестер в металле воплотить )))
Смогу, но боюсь, что не раньше выходного. Уж потерпите. Если получится раньше - отпишусь.
Евгений Петрович, так всё же, сможете изыскать возможность переделать библиотеку на совместимость с Servo.h ??? Очень хочется сервотестер в металле воплотить )))
Смогу, но боюсь, что не раньше выходного. Уж потерпите. Если получится раньше - отпишусь.
Да без проблем...хоть и зудит... )))
PS Удивляюсь, что никто таким проектом до сих пор не озадачился... а ведь для некоторых вопросов - незаменим.
Правда КРУТЫЕ ПАРНИ покупают готовый правильный сервотестер и не заморачиваются, но мы ж лёгких путей не ищем
Евгений Петрович один вопрос поясните по примеру скетча:
#include "TimeMeasure.h"
void setup() {
Serial.begin(57600);
initTimeMeasuring();
}
//
// Если готов результат измерения, печатаем
//
void loop() {
const uint16_t res = measureResult();
if (res) Serial.println(res);
}
Строка 12 присваиваем переменной типа константа значение формируемое в счетчике, если данные были, то выставляется флаг ИСТИНА, если данных нет, ЛОЖЬ?
Я к тому, что следующей строкой идёт проверка и получается обрасть видимости res один цикл loop?
Вспомнилось, 90-е, инженер-наладчик запускает фрезерный ЧПУ с точностью на фрезеровании 2 микрона, говорим о процессорах, я ему об отладке в тактах процессора, а он МНЕ: посмотри какие у Вас женщины...какие у них глаза... )))
Обновил код всё в том же посте #26. теперь может работать и со втормым таймером. Таймер выбирается константой (орисано в начале .cpp фала). Сейчас стоит второй таймер - с сервой драться не должно, там первый используется.
Поставил, проверил, серва на 9 пине не заработала, все остальные кроме 3 с ШИМ заняты, на 3 - РАБОТАЕТ!
Благодарствую Уважаемый!!!
Пока не разобрался, как Вы это сделали, но я постараюсь понять )))
Почему не заработала? Первый таймер я не занимал. Може случайно чего забыл, я проверю, кончено.
Пока попробуйте просто ШИМ на 9 пине. Есть - нету?
Сегодня проверю, может я его чем занимал, переписываю с чистого листа
Переписал пробный скетч с нуля, задействовал все 6 ШИМ каналов доступных на ардуино нано.
Всё работает великолепно, так что до окончательного проекта Серво-Тестера на ардуино нано осталось пару шагов.
Код проверки был такой:
/*
* Программа сервотестера для ARDUINO NANO
* начало
* 28.10.2018 - сделано ядро измерения импульса по 8 пину
* 02.11.2018 - переход на библиотеку TimeMeasure.h
* АКА ЕвгенийП www.arduino.ru
* 03.11.2018 - подключение библиотеки Servo.h проверка
* возможности работы с шестью каналами PWM
* ВАУ *** работает по всем 6 пинам PWM ***
*
*/
// Измерение проводим через пин 2
#define IN_PWM 2
// Шим доступен на пинах 3,5,6,9,10,11
#define CH1 3
#define CH2 5
#define CH3 6
#define CH4 9
#define CH5 10
#define CH6 11
// Светодиодное отобрахение режимов
#define LD_1000 7
#define LD_1500 8
#define LD_2000 12
#define LD_RCV 13
// #define LD_PTN 1
// Для управления задествуем аналоговые пины
#define PT1 A0
#define SW1 A1
#define SW2 A2
#define SW3 A3
// Новая функция обработчика прерывания, подключаем
#include "TimeMeasure.h"
#include <Servo.h>
//Серво каналы
Servo servo_ch1;
Servo servo_ch2;
Servo servo_ch3;
Servo servo_ch4;
Servo servo_ch5;
Servo servo_ch6;
int pwm_ch1 = 0;
int pwm_ch2 = 1000;
int pwm_ch3 = 2000;
int pwm_ch4 = 0;
int pwm_ch5 = 0;
int pwm_ch6 = 0;
void setup() {
pinMode (IN_PWM,INPUT);
pinMode (PT1,INPUT);
pinMode (SW1,INPUT);
pinMode (SW2,INPUT);
pinMode (SW3,INPUT);
pinMode (CH1,OUTPUT);
pinMode (CH2,OUTPUT);
pinMode (CH3,OUTPUT);
pinMode (CH4,OUTPUT);
pinMode (CH5,OUTPUT);
pinMode (CH6,OUTPUT);
pinMode (LD_1000 ,OUTPUT);
pinMode (LD_1500 ,OUTPUT);
pinMode (LD_2000 ,OUTPUT);
pinMode (LD_RCV ,OUTPUT);
//pinMode (LD_PTN ,OUTPUT);
servo_ch1.attach(CH1);
servo_ch2.attach(CH2);
servo_ch3.attach(CH3);
servo_ch4.attach(CH4);
servo_ch5.attach(CH5);
servo_ch6.attach(CH6);
// Временно, для отладки разрешим вывод в порт
Serial.begin(57600);
// Установим состояние органов управления
initTimeMeasuring();
managers();
} // Конец процедуры инициализации
void managers(){
} // Конец процедуры управления
// ***---***
void loop() {
const uint16_t res = measureResult();
if (res){
pwm_ch1 = res/TICKS_PER_MICROSECOND;
pwm_ch2 = pwm_ch1;
pwm_ch3 = 1250;
pwm_ch4 = 1500;
pwm_ch5 = 1750;
pwm_ch6 = 2000;
Serial.println(pwm_ch1);
servo_ch1.writeMicroseconds(pwm_ch1);
servo_ch2.writeMicroseconds(pwm_ch2);
servo_ch3.writeMicroseconds(pwm_ch3);
servo_ch4.writeMicroseconds(pwm_ch4);
servo_ch5.writeMicroseconds(pwm_ch5);
servo_ch6.writeMicroseconds(pwm_ch6);
delay(15);
}
} // END LOOP
Откуда я знаю, что серве нужно от пинов, я никогда ею не пользуюсь. Яиспользую второй таймер. на этом таймере сидит ШИМ 11 и 3 пинов. В принципе ШИМ там никуда не денется. но частота будет другой. Нужно это серве или нет, я не знаю.
Ну Вы же его не всё время испотльзуете, а только 4 миллисекунды, если серва успевает шимить в оставшиеся 16 миллисекунд то может быть не всё так плохо...а в принципе для прибора 6 каналов уже перебор...ту сложно определиться с ТТХ на прибор...видимо надо остановиться на том, что без прибора делается методом научного тыка...ну мы же взрослые люди....зачем тыкаться носом, когда можно все очень точно измерить и выставить те же расходы в соответствии с измерениями...как правило в аппаратуре управления расходы калибруются в процентах, а это в абсолютных величинах от 10 до 20 микросекнд, библиотека позволяет измерять с точностью на порядок больше, то что от прибора и требуется )))
Я его настраиваю на делитель 0, а среда ардуино для ШИМа настраивает на делитель 64. Потому я и говорю про частоту.
Прорверил работу по всем пинам задавая длительность от 1000 до 2000 микросекунд, то-есть выставляю tau и меряю подавая на 2-й пин по всем ШИМ выходам, только с 11 пина во всем диапазоне занижает на 7 микросекунд, по всем остальным пинам полное совпадение (разность не более 1 микросекунды)
Не знаю, как, что и почему но выходит что работает!?
Скетч
/*
* Программа сервотестера для ARDUINO NANO
* начало
* 28.10.2018 - сделано ядро измерения импульса по 8 пину
* 02.11.2018 - переход на библиотеку TimeMeasure.h
* АКА ЕвгенийП www.arduino.ru (в папке скетча)
* 03.11.2018 - подключение библиотеки Servo.h проверка
* возможности работы с шестью каналами PWM
* ВАУ *** работает по всем 6 пинам PWM ***
*
*/
// Измерение проводим через пин 2
#define IN_PWM 2
// Шим доступен на пинах 3,5,6,9,10,11
#define CH1 3
#define CH2 5
#define CH3 6
#define CH4 9
#define CH5 10
#define CH6 11
// Светодиодное отобрахение режимов
#define LD_1000 7
#define LD_1500 8
#define LD_2000 12
#define LD_RCV 13
// #define LD_PTN 1
// Для управления задествуем аналоговые пины
#define PT1 A0
#define SW1 A1
#define SW2 A2
#define SW3 A3
// Новая функция обработчика прерывания, подключаем
#include "TimeMeasure.h"
#include <Servo.h>
//Серво каналы
Servo servo_ch1;
Servo servo_ch2;
Servo servo_ch3;
Servo servo_ch4;
Servo servo_ch5;
Servo servo_ch6;
int pwm_ch0 = 0;
int pwm_ch1 = 0;
int pwm_ch2 = 1000;
int pwm_ch3 = 2000;
int pwm_ch4 = 1500;
int pwm_ch5 = 1500;
int pwm_ch6 = 1500;
void setup() {
pinMode (IN_PWM,INPUT);
pinMode (PT1,INPUT);
pinMode (SW1,INPUT);
pinMode (SW2,INPUT);
pinMode (SW3,INPUT);
pinMode (CH1,OUTPUT);
pinMode (CH2,OUTPUT);
pinMode (CH3,OUTPUT);
pinMode (CH4,OUTPUT);
pinMode (CH5,OUTPUT);
pinMode (CH6,OUTPUT);
pinMode (LD_1000 ,OUTPUT);
pinMode (LD_1500 ,OUTPUT);
pinMode (LD_2000 ,OUTPUT);
pinMode (LD_RCV ,OUTPUT);
//pinMode (LD_PTN ,OUTPUT);
servo_ch1.attach(CH1);
servo_ch2.attach(CH2);
servo_ch3.attach(CH3);
servo_ch4.attach(CH4);
servo_ch5.attach(CH5);
servo_ch6.attach(CH6);
// Временно, для отладки разрешим вывод в порт
Serial.begin(57600);
// Установим состояние органов управления
initTimeMeasuring();
managers();
} // Конец процедуры инициализации
void managers(){
} // Конец процедуры управления
// ***---***
void loop() {
const uint16_t res = measureResult();
if (res){
pwm_ch0 = res/TICKS_PER_MICROSECOND;
// servo_ch1.writeMicroseconds(pwm_ch1);
Serial.println(pwm_ch0);
} // измерили входящий импульс и продублировали на выход канала CH1
pwm_ch1 = map(analogRead(PT1),0, 1023, 1000,2000);
pwm_ch2 = pwm_ch1;
pwm_ch3 = pwm_ch1;
pwm_ch4 = pwm_ch1;
pwm_ch5 = pwm_ch1;
pwm_ch6 = pwm_ch1;
// pwm_ch2 = map(analogRead(PT1),0, 1023, 1000,2000);
// pwm_ch3 = 1500;
// pwm_ch4 = 1500;
// pwm_ch5 = 1500;
// pwm_ch6 = 1500;
servo_ch1.writeMicroseconds(pwm_ch1);
servo_ch2.writeMicroseconds(pwm_ch2);
servo_ch3.writeMicroseconds(pwm_ch3);
servo_ch4.writeMicroseconds(pwm_ch4);
servo_ch5.writeMicroseconds(pwm_ch5);
servo_ch6.writeMicroseconds(pwm_ch6);
delay(1000);
} // END LOOP
Минимальное отклонение от заданного параметра имеет шим на 10 пине, поотключал все остальные каналы, ничего в точности не изменилось, разночтение с устанавливаемым порядка 3-4 микросекунд, видимо дело в библиотеке servo.h. Можно конечно оставить и один канал, переключая его параметры на выход.
0,3% отличная точность
Пошёл еще дальше, залил в другую ардуино пробный скетч генерирующий шим на трёх пинах 9,10,11 соответственно 1000, 1500, 2000 миллисекунд, выходы подключаю на измерение скетчем, что выше, измерячет очень точно, иногда проскакивают значения на 1 больше или меньше, то-есть - измерительная часть работает безукоризненно, огрехи в генерации но допустимые
Время теперь есть, примусь за макетирование, тем паче, что самолёты и коптеры у меня долго не держатся, позавчера только получил, сегодня уже ушатал )))
Но летал восхитительно жеж!!!
Если подавать питание на USB вход, то аппаратный сброс проходит не зависимо от положения датчика, естественно кнопка reset приводит устройство в чувство ))), а вот замыкание контакта rst на gnd - НЕТ!
Что-то Вы хитрое намудрили. Согласен с Евгением, не вижу разницы между кнопой ресет и замыканием контакта rst на граунд.
Решил проблему в лоб!!!
Запитал датчики от выводов ардуины настроив их на выход и выставив в HIGH )))
Да, вторая ардуина вела себя так же, на ардуине два вывода RESET, замыкал на GND тот вывод, что между GND и +5V, что там намудрил ROBODYN с разводкой пинов не выяснял.
Но раз эффект проявился и со второй, значит это ОСОБЕННОСТИ построения платы.
Код в посте заменил на актуальную версию, возврат на исходный датчик - убрал, оказалось лишним.
(PS есть конечно подозрение, что плохо отмыл спиртом после пайки, то-есть это не исключено, спирт всё жеж ))) )
Евгений Петрович, так всё же, сможете изыскать возможность переделать библиотеку на совместимость с Servo.h ??? Очень хочется сервотестер в металле воплотить )))
PS а вот если бы я мог использовать STM32F103 видимо всё было бы значительно проще, там три необходимых нам таймера в полном распоряжении... среду по IDE поставил, но пока только удалось диодиком помигать )))
Евгений Петрович, так всё же, сможете изыскать возможность переделать библиотеку на совместимость с Servo.h ??? Очень хочется сервотестер в металле воплотить )))
Смогу, но боюсь, что не раньше выходного. Уж потерпите. Если получится раньше - отпишусь.
Евгений Петрович, так всё же, сможете изыскать возможность переделать библиотеку на совместимость с Servo.h ??? Очень хочется сервотестер в металле воплотить )))
Смогу, но боюсь, что не раньше выходного. Уж потерпите. Если получится раньше - отпишусь.
Да без проблем...хоть и зудит... )))
PS Удивляюсь, что никто таким проектом до сих пор не озадачился... а ведь для некоторых вопросов - незаменим.
Правда КРУТЫЕ ПАРНИ покупают готовый правильный сервотестер и не заморачиваются, но мы ж лёгких путей не ищем
Евгений Петрович один вопрос поясните по примеру скетча:
Строка 12 присваиваем переменной типа константа значение формируемое в счетчике, если данные были, то выставляется флаг ИСТИНА, если данных нет, ЛОЖЬ?
Я к тому, что следующей строкой идёт проверка и получается обрасть видимости res один цикл loop?
А зачем её ещё быть видимой где-то?
А флагов никаких нет. Просто если if'у подсунуть число, то он считает ложью 0, а истиной всё, кроме 0.
А зачем её ещё быть видимой где-то?
А флагов никаких нет. Просто если if'у подсунуть число, то он считает ложью 0, а истиной всё, кроме 0.
Ясно, то есть, если импульс еще не измерян, строка выше присваивает переменной res =0 ?
Ну, да.
Ну, да.
век живи век учись )))
Удалось ли выкроить время для моей просьбы?
Пока нет, но я честно - не забыл. Как только, так сразу.
Пока нет, но я честно - не забыл. Как только, так сразу.
А Вы на STM не поглядывали, там несколько 16 битных таймеров. Можно ли Вашу библиотеку под него адаптировать?
Нет, не поглядывал. Вообще, в руках никогда не держал и особого желания не испытываю. Для моих задач хватает avr за глаза.
Нет, не поглядывал. Вообще, в руках никогда не держал и особого желания не испытываю. Для моих задач хватает avr за глаза.
Да вот читаю доку на STM32 на русском, могуч, реально могуч, эх, где мои 17 лет )))
Ну, читайте.
Ну, читайте.
Вспомнилось, 90-е, инженер-наладчик запускает фрезерный ЧПУ с точностью на фрезеровании 2 микрона, говорим о процессорах, я ему об отладке в тактах процессора, а он МНЕ: посмотри какие у Вас женщины...какие у них глаза... )))
Обновил код всё в том же посте #26. теперь может работать и со втормым таймером. Таймер выбирается константой (орисано в начале .cpp фала). Сейчас стоит второй таймер - с сервой драться не должно, там первый используется.
Поставил, проверил, серва на 9 пине не заработала, все остальные кроме 3 с ШИМ заняты, на 3 - РАБОТАЕТ!
Благодарствую Уважаемый!!!
Пока не разобрался, как Вы это сделали, но я постараюсь понять )))
Почему не заработала? Первый таймер я не занимал. Може случайно чего забыл, я проверю, кончено.
Пока попробуйте просто ШИМ на 9 пине. Есть - нету?
Почему не заработала? Первый таймер я не занимал. Може случайно чего забыл, я проверю, кончено.
Пока попробуйте просто ШИМ на 9 пине. Есть - нету?
Сегодня проверю, может я его чем занимал, переписываю с чистого листа
Переписал пробный скетч с нуля, задействовал все 6 ШИМ каналов доступных на ардуино нано.
Всё работает великолепно, так что до окончательного проекта Серво-Тестера на ардуино нано осталось пару шагов.
Код проверки был такой:
Что-то не так.
ШИМ на пинах 3 и 11 должен либо не работать, либо работать с нестандартной частотой. Ну, или мои измерения должны врать.
Что-то не так.
ШИМ на пинах 3 и 11 должен либо не работать, либо работать с нестандартной частотой. Ну, или мои измерения должны врать.
попереключал с 3 на 5 пин, разница есть, серва докручивает буду пытать, я тут обрадовался было )))
Ну, Вы понимаете, что хоть какой-то таймер мне нужен :)
Ну, Вы понимаете, что хоть какой-то таймер мне нужен :)
Конечно )))
какие пины можно использовать для servo.h ?
Откуда я знаю, что серве нужно от пинов, я никогда ею не пользуюсь. Яиспользую второй таймер. на этом таймере сидит ШИМ 11 и 3 пинов. В принципе ШИМ там никуда не денется. но частота будет другой. Нужно это серве или нет, я не знаю.
Ну Вы же его не всё время испотльзуете, а только 4 миллисекунды, если серва успевает шимить в оставшиеся 16 миллисекунд то может быть не всё так плохо...а в принципе для прибора 6 каналов уже перебор...ту сложно определиться с ТТХ на прибор...видимо надо остановиться на том, что без прибора делается методом научного тыка...ну мы же взрослые люди....зачем тыкаться носом, когда можно все очень точно измерить и выставить те же расходы в соответствии с измерениями...как правило в аппаратуре управления расходы калибруются в процентах, а это в абсолютных величинах от 10 до 20 микросекнд, библиотека позволяет измерять с точностью на порядок больше, то что от прибора и требуется )))
Я его настраиваю на делитель 0, а среда ардуино для ШИМа настраивает на делитель 64. Потому я и говорю про частоту.
Я его настраиваю на делитель 0, а среда ардуино для ШИМа настраивает на делитель 64. Потому я и говорю про частоту.
Прорверил работу по всем пинам задавая длительность от 1000 до 2000 микросекунд, то-есть выставляю tau и меряю подавая на 2-й пин по всем ШИМ выходам, только с 11 пина во всем диапазоне занижает на 7 микросекунд, по всем остальным пинам полное совпадение (разность не более 1 микросекунды)
Не знаю, как, что и почему но выходит что работает!?
Скетч
Минимальное отклонение от заданного параметра имеет шим на 10 пине, поотключал все остальные каналы, ничего в точности не изменилось, разночтение с устанавливаемым порядка 3-4 микросекунд, видимо дело в библиотеке servo.h. Можно конечно оставить и один канал, переключая его параметры на выход.
0,3% отличная точность
Пошёл еще дальше, залил в другую ардуино пробный скетч генерирующий шим на трёх пинах 9,10,11 соответственно 1000, 1500, 2000 миллисекунд, выходы подключаю на измерение скетчем, что выше, измерячет очень точно, иногда проскакивают значения на 1 больше или меньше, то-есть - измерительная часть работает безукоризненно, огрехи в генерации но допустимые
Ну, и слава Богу.
Ну, и слава Богу.
Время теперь есть, примусь за макетирование, тем паче, что самолёты и коптеры у меня долго не держатся, позавчера только получил, сегодня уже ушатал )))
Но летал восхитительно жеж!!!