Частота в напряжение

Makkov
Offline
Зарегистрирован: 23.11.2014

Ребята, подскажите кто в курсе. Нучно преобразовать частоту на входе arduino UNO, от 0 до 250 Гц., в уровни ШИМ, от 0 до 255 на выходе. Чем руководствоваться при написании скетча? А может есть примеры?

Coolerr
Offline
Зарегистрирован: 30.06.2014

А частота, синус или меандр и какая амплитуда?

Makkov
Offline
Зарегистрирован: 23.11.2014

Меандр, размах 0-5 в.

sva1509
Offline
Зарегистрирован: 07.12.2012

я бы использовал два таймера

таймером 1 захватывал частоту

таймером 2 генерировал ШИМ

В общем копайте в сторону описания таймеров atmega32

 

Makkov
Offline
Зарегистрирован: 23.11.2014

Спасибо за совет.

Может быть, пробую разобраться. Пока безуспешно. Конечно хотелось бы найти решение попроще.

sva1509
Offline
Зарегистрирован: 07.12.2012

Вас интересует timer1 input compare unit это специальный режим таймера для замера длинны импульса

А timer2 в режим FastPWM это режим таймера для генерации ШИМ сигнала.

вот пример

http://www.embedds.com/programming-16-bit-timer-on-atmega328/

 

Coolerr
Offline
Зарегистрирован: 30.06.2014

Для замера длины импульса есть pulseIn,  но все же лучше считать внешними прерываниями. У меня вот такой пердюмонокль получился, в Протеусе работает как в железе себя поведет хз, только ШИМ до 250. Ну при желании можно пересчитать.

#define led 10
volatile int count=0;
unsigned long oldTime=0;
int freq=0;
void setup(){
pinMode(led,OUTPUT);
//Serial.begin(9600);
}
 void loop(){
  attachInterrupt(0,counter,FALLING);
    if(millis()-oldTime>1000){
    oldTime=millis();
     freq=count;
      count=0;
      //Serial.print("Freq= ");
      //Serial.println(freq);
      }
      analogWrite(led,freq);
}
void counter(){
 count++;
}

 

Makkov
Offline
Зарегистрирован: 23.11.2014

Спасибо ребята!

Буду разбираться.