по переменным таймера FlexiTimer2
- Войдите на сайт для отправки комментариев
Пнд, 06/01/2014 - 22:43
Пытаюсьзапустить таймер с частотой 1000-3000гц, на пин повешен светодиод (позже будет пьезо, пока не нашел).
Регулировка методом значений freq=0...255, выставляю кнопками.
lcd.print (1000+freq*10);
FlexiTimer2::stop();
FlexiTimer2::set(freq, flash_led);
при 0 - светодиод горит, частота видимо большая, а при 255 (типа частота 3000гц), а светодиод моргает, как будто частота низкая.
http://playground.arduino.cc/Main/FlexiTimer2
FlexiTimer2::set(unsigned long units, double resolution, void (*f)())
this function sets a time on ms (1/1000th of a second)
function above with resolution = 0.001.
Бред какой-то. Почитайте tone().
не бред, функция прерывания двойного действия, дергает пин, и ещё кое-какую работу делает.
Тоне будет работать, но только для генерации волны.
Пьезо нашел, работает, при значении 0 - высокий звук, при 255 - низкий, стучит.
не бред, функция прерывания двойного действия, дергает пин, и ещё кое-какую работу делает.
Вы лучше почитайте таймерами пользоваться...
почитал, но не понял как переводить частоту вызыва ф-ции с частотой дергания, ведь установка в ON/ OFF
происходит за 2 вызова, т.е частота уменьшается вдвое. и макс частота для этого таймера 1/500th of a second.
В будущем хочу приделать LTC6904 - 1kHz - 68MHz Serial Port Programmable Oscillator
1kHz to 68MHz Square Wave Output, только в мануале плохо расписано как им управлять
не бред, функция прерывания двойного действия, дергает пин, и ещё кое-какую работу делает.
Тоне будет работать, но только для генерации волны.
почитал
http://samou4ka.net/page/tajmer-schetchik-mikrokontrollerov-avr
http://chipenable.ru/index.php/programming-avr/item/171-avr-timer-t0-ch1.html
http://easyelectronics.ru/avr-uchebnyj-kurs-tajmery.html
обновляет одну переменную, количество пройденных импульсов поделенное на 1000
ещё моргает светодиодом, на низких частотах в такт подмигивает
Продолжение темы. Библиотека успешно работала, а теперь не компилится. При использовании родной библиотеки #include <FlexiTimer2.h> цыпятся ошибка вида:
FlexiTimer2\FlexiTimer2.cpp.o: In function `FlexiTimer2::set(unsigned long, double, void (*)())':
D:\Programm Files\arduino-1.0.5-r2\libraries\FlexiTimer2/FlexiTimer2.cpp:46: multiple definition of `FlexiTimer2::set(unsigned long, double, void (*)())'
FlexiTimer2.cpp.o:C:\DOCUME~1\IX\LOCALS~1\Temp\build3464858231907329902.tmp/FlexiTimer2.cpp:46: first defined here
d:/programm files/arduino-1.0.5-r2/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: Disabling relaxation: it will not work with multiple definitions и ещё куча.
Перевожу в свой код.
Но не понимаю отмеченные места, на которых не компилится.
Как видно хочет указатели, но классов нету. *f - это функция которая должна вызываться через определенное время. _overflow - видимо сама считалка в цикле.
Починил работу библиотеки без выдирания кода оттуда в свой. Причину нашел!
Не держать файлы библиотеки в корне своего проекта! Удалить файлы FlexiTimer2.* в корне и все компилится)