Помогите изменить частоту шим сигнала Arduino

vadim4eg8@gmail.com
Offline
Зарегистрирован: 17.11.2019

Стоит задача изменять частоту шим сигнала одной кнопкой.Значения частоты шима должны быть 1, 2, 4, 8кГц.

Каждое нажатие должно менять частоту в большую сторону и так по кругу.

Как правильно это сделать ?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

vadim4eg8@gmail.com пишет:

Значения частоты шима должны быть 1, 2, 4, 8кГц.

Кому должны?

vadim4eg8@gmail.com
Offline
Зарегистрирован: 17.11.2019

мне))))

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

1) Выяснить каким таймером обслуживается PWM-выход
2) Покрутить регистры этого таймера - прескалер и всё такое.

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

vadim4eg8@gmail.com пишет:

мне))))

Нет, Вам не должны, Вы слишком ленивы.

Если бы Вы не поленились в окне поиска (в правом верхнем углу) набрать: "Шим с произвольной частотой" (без кавычек, разумеется), то этого поста бы не было. Там и примеры, и готовые библиотеки, и обсуждения - всего хватает.

vadim4eg8@gmail.com
Offline
Зарегистрирован: 17.11.2019

Мне произвольна чистота не нужна как в генераторе частоты от 0 до нескольких мегагерц.

Мне нужно четыре параметра 1, 2, 4, 8кГц

Logik
Offline
Зарегистрирован: 05.08.2014

Это просто. Задача на множества. Из полного множества частот генератора исключаем все кроме требуемых.

vadim4eg8@gmail.com
Offline
Зарегистрирован: 17.11.2019

если тебе не трудно. Можешь скинуть пример кода как это реализовать если это не трудно. 

Я с этим столкнулся первый раз, это мой первый опыт работы с ардуинкой и с подобным ранее не сталкивался  

Logik
Offline
Зарегистрирован: 05.08.2014

Не вопрос, бро! Чиркани темку сюда http://arduino.ru/forumy/ishchu-ispolnitelya

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

vadim4eg8@gmail.com пишет:

Мне произвольна чистота не нужна как в генераторе частоты от 0 до нескольких мегагерц. Мне нужно четыре параметра 1, 2, 4, 8кГц

Так вроде ж там по ссылкам показано как делать любую частоту (в разумных пределах), так и делайте какую Вам надо. В чем проблема?

vadim4eg8@gmail.com
Offline
Зарегистрирован: 17.11.2019

по какой ссылке???

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

Так, в посте #4 я Вам сказал что делать, чтобы получить ссылки и на библиотеку pwm, и на примеры и обсуждения. Вы читаете, что Вам пишут?

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

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

Так, в посте #4 я Вам сказал что делать, чтобы получить ссылки и на библиотеку pwm, и на примеры и обсуждения. Вы читаете, что Вам пишут?

А есть пример как поиск по форуму сделать?

vadim4eg8@gmail.com
Offline
Зарегистрирован: 17.11.2019

всё что я нашёл так это все проекты через энкодер а у меня кнопка

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

Через кнопки запрещено

vadim4eg8@gmail.com
Offline
Зарегистрирован: 17.11.2019

тоесть я несмогу пошагово менять частоту кнопкой?

ua4lcn
Offline
Зарегистрирован: 27.02.2016

Все возможно, главное правильно сформулировать вопрос.

bwn
Offline
Зарегистрирован: 25.08.2014

vadim4eg8@gmail.com пишет:

тоесть я несмогу пошагово менять частоту кнопкой?

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

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

vadim4eg8@gmail.com пишет:

всё что я нашёл так это все проекты через энкодер а у меня кнопка

Т.е. библиотеку PWM Вы не нашли и примеры к ней не смотрели? Или нашли, но Вам этого мало?

Ну, тогда только в Ищу исполнителя - за денюшку.

ua4lcn
Offline
Зарегистрирован: 27.02.2016

У меня уже  есть реализованное устройство ,с автономным питанием, с выходом 5 v и 12v. Девайс с индикатором , правда с двумя кнопками,хотя это исправимо. Диапазон до 10 кГц с перестраиваемым шагом, и т.д. и т.д.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

vadim4eg8@gmail.com пишет:

тоесть я несмогу пошагово менять частоту кнопкой?

А сам-то как думаешь? Очевидно, что не можешь! Если бы мог, этого поста бы не было.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

ua4lcn пишет:

правда с двумя кнопками

Нещитова!

ua4lcn
Offline
Зарегистрирован: 27.02.2016

НЕ! с двумя круче! можно вперед крутить частоту, назад. А так как бы только вперед.Хотя есть варианты и для одной кнопки - крутить назад...

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Может и круче, но удорожает конструкцию.

Кнопка ж не простая нужна, а "для лохов Ардуино", а они вон по 100+ рублей за штучку!

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

Изверги! Вы чё ребёнка тролите, можно, всё можно!

ua4lcn
Offline
Зарегистрирован: 27.02.2016

<тоесть я несмогу пошагово менять частоту кнопкой?>

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

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

ua4lcn пишет:

НЕ! с двумя круче! можно вперед крутить частоту, назад. А так как бы только вперед.Хотя есть варианты и для одной кнопки - крутить назад...

в КВН говорили, что в Татарском языке нет слова назад )))

ua4lcn
Offline
Зарегистрирован: 27.02.2016

ua6em пишет:

ua4lcn пишет:

НЕ! с двумя круче! можно вперед крутить частоту, назад. А так как бы только вперед.Хотя есть варианты и для одной кнопки - крутить назад...

в КВН говорили, что в Татарском языке нет слова назад )))

Алга - что означает вперед,хотя я их языка  не знаю.

 

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

ua4lcn пишет:

ua6em пишет:

ua4lcn пишет:

НЕ! с двумя круче! можно вперед крутить частоту, назад. А так как бы только вперед.Хотя есть варианты и для одной кнопки - крутить назад...

в КВН говорили, что в Татарском языке нет слова назад )))

Алга - что означает вперед,хотя я их языка  не знаю.

ал - высший, га - путь ))) (на русском)

girenko.dmitrii...
Offline
Зарегистрирован: 09.02.2016

Элементарно) Просто используй функцию пьезо пищалки. Она отлично генерирует любой сигнал.

 int p = 9; //объявляем переменную с номером пина, на который мы

//подключили пьезоэлемент

void setup() //процедура setup

{

pinMode(p, OUTPUT); //объявляем пин как выход

}

void loop() //процедура loop

{

tone (p, 500); //включаем на 500 Гц

delay(100); //ждем 100 Мс

tone(p, 1000); //включаем на 1000 Гц

delay(100); //ждем 100 Мс

}

И будет тебе щастье

b707
Offline
Зарегистрирован: 26.05.2017

girenko.dmitrii@mail.ru пишет:

Элементарно) Просто используй функцию пьезо пищалки.

не пишите чушь... человек спрашивал про частоту ШИм

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

b707 пишет:

girenko.dmitrii@mail.ru пишет:

Элементарно) Просто используй функцию пьезо пищалки.

не пишите чушь... человек спрашивал про частоту ШИм

может так?
 


/*
Пример для мега и Уно.
позволяет менять диапазона частот:
 1 Гц - 2 мГц (2000000 Гц) на 16-битных таймеров 
31 Гц - 2 мГц (2000000 Гц) на  8-битных таймеров 
Стандартная частота ШИМ ардуины 500Гц.
pwmWriteHR() может использоваться пины: на Uno (9 и 10) на Мега (2,3, 5, 6, 7, 8, 11, 12, 44, 45, и 46)
*/


#include <PWM.h>
int led = 9;   // пин, светодиод 
int knob = 12; // пин кнопки
byte flag_knob = 0;

unsigned long frequency = 1000; // частота  1 - 2000000 (Гц)
int brightness = 125;         // частота ШИМ (0-255)  
//или
//word brightnessHR = 32768;  // частота ШИМ (0-65536) is 32768.
void setup(){
InitTimersSafe();                         //инициализируем все таймеры, кроме 0,
//SetPinFrequencySafe(led, frequency);    //устанавливает частоту для указанного pin
SetPinFrequency(led, frequency);          //устанавливает частоту для указанного pin
pinMode(knob,INPUT_PULLUP);
}

void loop(){
  pwmWrite(led, brightness);     //0-255   используйте эту функцию вместо analogWrite 
//или
//pwmWriteHR(led, brightnessHR); //0-65536 используйте эту функцию вместо analogWrite     
  if(digitalRead(knob)==LOW &&flag_knob==0){
  flag_knob=1;
  frequency = frequency*2;
  if(frequency>8000){frequency=1000;}
    }
  SetPinFrequency(led, frequency);  
  if(digitalRead(knob)==HIGH &&flag_knob==1){
  flag_knob=0;
    }
  delay(200);
}