Деление периода пополам. Помощь новичку.

alekcey53
Offline
Зарегистрирован: 24.09.2016

Приветствую всех, прошу помощи в поставленной мне задаче, нужно принять сигнал поделить период пополам и выдать его на осцил.

void setup() {
  pinMode (8, INPUT); 
  pinMode (9, OUTPUT); 
 
}

void loop() {
  a = pulseIn (8, HIGH);
  freq = (1/a)/1000000; 
  tone (9, freq); 

}

подскажите где косяк? 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016
  freq = 1000000/a; 

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

void setup() {
pinMode(3,INPUT);
pinMode(9,OUTPUT);
TCCR0B=0;
attachInterrupt(1, popolamer,RISING);
}

void loop() {}

void popolamer() {
PORTB^=1<<PB1;  //инверсия 9 пина
}

Примерно до 150кГц.. дальше будет не успевать.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

alekcey53 пишет:

Приветствую всех, прошу помощи в поставленной мне задаче, нужно принять сигнал поделить период пополам и выдать его на осцил.

void setup() {
  pinMode (8, INPUT); 
  pinMode (9, OUTPUT); 
 
}

void loop() {
  a = pulseIn (8, HIGH);
  freq = (1/a)/1000000; 
  tone (9, freq); 

}

подскажите где косяк? 

Первый косяк в публикации Вами скетча. Почему он не полный, вы все, блин, что место на сервере экономите? Вот как у Вас описана переменная a? Секрет, чтол-и? Если как int или long, то Ваша freq всегда будет 0.

alekcey53
Offline
Зарегистрирован: 24.09.2016

они просто объявлены через инт

int a;          
int frec;

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

см. предыдущий пост: "Ваша freq всегда будет 0"