Помогите новичку получить заданную частоту

via06
Offline
Зарегистрирован: 30.12.2014

Как из ARDUINO получить прямоугольный сигнал частотой 50Гц?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

via06 пишет:

Как из ARDUINO получить прямоугольный сигнал частотой 50Гц?

Легко! )))
 

/*
  Blink without Delay

  Turns on and off a light emitting diode (LED) connected to a digital pin,
  without using the delay() function. This means that other code can run at the
  same time without being interrupted by the LED code.

  The circuit:
  - Use the onboard LED.
  - Note: Most Arduinos have an on-board LED you can control. On the UNO, MEGA
    and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN
    is set to the correct LED pin independent of which board is used.
    If you want to know what pin the on-board LED is connected to on your
    Arduino model, check the Technical Specs of your board at:
    https://www.arduino.cc/en/Main/Products

  created 2005
  by David A. Mellis
  modified 8 Feb 2010
  by Paul Stoffregen
  modified 11 Nov 2013
  by Scott Fitzgerald
  modified 9 Jan 2017
  by Arturo Guadalupi

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

// constants won't change. Used here to set a pin number:
const int ledPin =  LED_BUILTIN;// the number of the LED pin

// Variables will change:
int ledState = LOW;             // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change:
const long interval = 10;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the difference
  // between the current time and last time you blinked the LED is bigger than
  // the interval at which you want to blink the LED.
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

 

via06
Offline
Зарегистрирован: 30.12.2014

Благодарю

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

via06 пишет:

Благодарю

не за что, начните знакомство с примеров в IDE, там много чего )))

via06
Offline
Зарегистрирован: 30.12.2014

Хорошо

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

via06 пишет:

Помогите новичку получить заданную частоту

Зарегистрирован:30.12.2014 -- хрена се новички!

----------------------------

Тема прибита гвоздями в разделе программирование! Там и калькулятор частот есть! Чукча - не читатель?

sadman41
Offline
Зарегистрирован: 19.10.2016

Евгений Петрович, опять списываете у David A. Mellis! А где же таймеры, регистры, профессионализьм?

via06
Offline
Зарегистрирован: 30.12.2014

Да, зарегестрировался давно, но зажожу редко, а вот за ссылку по тебе благодарю, пошел изучать!!!

AlexanderNO
Offline
Зарегистрирован: 08.11.2018
via06
Offline
Зарегистрирован: 30.12.2014

За функцию tone знаю, но она не работает на маленькой частоте, а мне нужно около 20Гц

AlexanderNO
Offline
Зарегистрирован: 08.11.2018

via06 пишет:

За функцию tone знаю, но она не работает на маленькой частоте, а мне нужно около 20Гц

Сначала было 50Гц. Какой вопрос - таков ответ. PS Tone() работает от 31Гц.

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

sadman41 пишет:

Евгений Петрович, опять списываете у David A. Mellis! 

Who такой?

Who его знает :(

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

sadman41 пишет:

Евгений Петрович, опять списываете у David A. Mellis! 

Who такой?

Who его знает :(

тут меня гуглом научили пользоваться или разбанили )))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

via06 пишет:

Помогите новичку получить заданную частоту

Зарегистрирован:30.12.2014 -- хрена се новички!

----------------------------

Тема прибита гвоздями в разделе программирование! Там и калькулятор частот есть! Чукча - не читатель?

Кстати! А за калькулятор особенное спасибо!!!

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

sadman41 пишет:

Евгений Петрович, опять списываете у David A. Mellis! 

Who такой?

Who его знает :(

Простите, что-то в голове помутилось. Показалось, что первый пост - Ваш и строка #18 при нём...

Nikolaj666
Nikolaj666 аватар
Offline
Зарегистрирован: 19.01.2017

доброго времени. 

собрал на ардуино-нано ламповые часы . с D9 идёт ШИМ на высоковольтный преобразователь. в скетче строка " TCCR1B = TCCR1B & 0b11111000 | 0x01; " . сигнал по мультиметру  с частотой 31,37 кГц. напряжение на лампы выходит 147 вольт, что очень мало. суть вопроса : что изменить в строке дабы получить 3 варианта частоты 35кГц ,40кГц и 45кГц (чтобы подобрать напряжение на преобразователе. нужно 175в )

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Изменеием данной строки желаемыой частоты получить никак не удастся.

Nikolaj666
Nikolaj666 аватар
Offline
Зарегистрирован: 19.01.2017

а вообще можно с этого выхода получить 40кГЦ ?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Nikolaj666 пишет:

доброго времени. 

собрал на ардуино-нано ламповые часы . с D9 идёт ШИМ на высоковольтный преобразователь. в скетче строка " TCCR1B = TCCR1B & 0b11111000 | 0x01; " . сигнал по мультиметру  с частотой 31,37 кГц. напряжение на лампы выходит 147 вольт, что очень мало. суть вопроса : что изменить в строке дабы получить 3 варианта частоты 35кГц ,40кГц и 45кГц (чтобы подобрать напряжение на преобразователе. нужно 175в )

Enter desired frequency in Hz
(use decimal point for fractions. I.e. 0.12 means 0,12Hz):

Results for frequency: 35000.00Hz
Prescaler: 1; MaxValue: 228; Frequency: 34934.50Hz; Diff: 65.50Hz
Prescaler: 8; MaxValue: 28; Frequency: 34482.76Hz; Diff: 517.24Hz
Prescaler: 64; MaxValue: 3; Frequency: 31250.00Hz; Diff: 3750.00Hz
Prescaler: 256; MaxValue: 0; Frequency: 31250.00Hz; Diff: 3750.00Hz
Prescaler: 1024 - Not possible

Enter desired frequency in Hz
(use decimal point for fractions. I.e. 0.12 means 0,12Hz):

Results for frequency: 40000.00Hz
Prescaler: 1; MaxValue: 199; Frequency: 40000.00Hz; Diff: 0.00Hz
Prescaler: 8; MaxValue: 24; Frequency: 40000.00Hz; Diff: 0.00Hz
Prescaler: 64; MaxValue: 2; Frequency: 41666.67Hz; Diff: 1666.67Hz
Prescaler: 256; MaxValue: 0; Frequency: 31250.00Hz; Diff: 8750.00Hz
Prescaler: 1024 - Not possible

Enter desired frequency in Hz
(use decimal point for fractions. I.e. 0.12 means 0,12Hz):

Results for frequency: 45000.00Hz
Prescaler: 1; MaxValue: 177; Frequency: 44943.82Hz; Diff: 56.18Hz
Prescaler: 8; MaxValue: 21; Frequency: 45454.55Hz; Diff: 454.55Hz
Prescaler: 64; MaxValue: 2; Frequency: 41666.67Hz; Diff: 3333.33Hz
Prescaler: 256; MaxValue: 0; Frequency: 31250.00Hz; Diff: 13750.00Hz
Prescaler: 1024 - Not possible

Enter desired frequency in Hz
(use decimal point for fractions. I.e. 0.12 means 0,12Hz):
 

Nikolaj666
Nikolaj666 аватар
Offline
Зарегистрирован: 19.01.2017

вообще ничего не понял к своему стыду.

вот кусок кода. что мне прописать чтобы получить 40кц ???

void setup() {
  TCCR1B = TCCR1B & 0b11111000 | 0x01;  // задаем частоту ШИМ на 3 выводе 30кГц
  analogWrite(9, 85); //если запитывать от блока питания 9в
  time.begin();
  //задаем режим работы выходов микроконтроллера
  for (int i = 0; i < 4; i++) {
    pinMode(def_pin[i], OUTPUT);
  }
  for (int i = 0; i < 6; i++) {
    pinMode(keys_pin[i], OUTPUT);
  }

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Если ничего непонятно, то возмите библиотеку TimerOne

Nikolaj666
Nikolaj666 аватар
Offline
Зарегистрирован: 19.01.2017

код чужой, а автор молчит как рыба об лёд

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

.изменить код как тут

 

или тут поправить, можно дл 255

 analogWrite(9, 85); //если запитывать от блока питания 9в
Nikolaj666
Nikolaj666 аватар
Offline
Зарегистрирован: 19.01.2017

фигово быть бестолковым. ну не дано мне таймерами играть

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Вот пример использования библиотеки TimerOne. Он, малость, кривоват, но для начала пойдет

#include <TimerOne.h>


const int fanPin = 9;

void setup(void)
{
  Timer1.initialize(40);  // 40 us = 25 kHz
  Serial.begin(9600);
}

void loop(void)
{
  // slowly increase the PWM fan speed
  //
  for (float dutyCycle = 30.0; dutyCycle < 100.0; dutyCycle++) {
    Serial.print("PWM Fan, Duty Cycle = ");
    Serial.println(dutyCycle);
    Timer1.pwm(fanPin, (dutyCycle / 100) * 1023);
    delay(500);
  }
}

В строке 8 задаете период в микросекундах. Надеюсь сумеете пересчитать желаемую частоту в период?

Если же говорить о напряжении, то при использовании ШИМ оно, в первую очередь, зависит от DutyCycle а не от частоты. В данном примере DutyCycle постепенно меняется от 30 до 100 процентов.

Запустите этот скетч и меряйте напряжение на вашем преобразователе. Только подключите такую нагрузку, которую сложно или не жалко будет сжечь.

Nikolaj666
Nikolaj666 аватар
Offline
Зарегистрирован: 19.01.2017

спасибо, попробую

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

Nikolaj666 пишет:

а вообще можно с этого выхода получить 40кГЦ ?

Я же Вам дал ссылку на тему, где куча примеров и калькулятор есть. Не прочитали? Ну, значит сами себе злобный буратино.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Nikolaj666 пишет:

а вообще можно с этого выхода получить 40кГЦ ?

Я же Вам дал ссылку на тему, где куча примеров и калькулятор есть. Не прочитали? Ну, значит сами себе злобный буратино.

Чукча не читатель )))
Ему вообще в его скетче данными в одной строке поиграться в сторону увеличения  стоит и чую это решило бы проблему
 

 analogWrite(9, 85); //если запитывать от блока питания 9в

 

Nikolaj666
Nikolaj666 аватар
Offline
Зарегистрирован: 19.01.2017

ua6em пишет:

 

Чукча не читатель )))
Ему вообще в его скетче данными в одной строке поиграться в сторону увеличения  стоит и чую это решило бы проблему
 

 analogWrite(9, 85); //если запитывать от блока питания 9в

 

чукча читатель, просто он тормозит после работы сильно.

этой строчкой да, играл. помогает. но теперь вылезла другая песня - железо. уходит мосфет в режим кипятильника. но это уже знаю как лечить.

всем спасибо