Ищу исполнителя по написанию скетча

denischernikov
Offline
Зарегистрирован: 16.02.2013

 

Нужен скетч для Arduino Uno:
Генератор  прямоугольных импульсов управляемый  двумя  кнопками.
Частота 40 до 4000 Гц. Выход 12 вольт. Нужна схема и скетч.
Оплату гарантирую.
Денис.
denischernikov
Offline
Зарегистрирован: 16.02.2013

тел. 79184390511

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Вы бы лучше почту указали. 

Могу помочь.

Пишите в почту.

heruvim219@mail.ru

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

 

madmax96
Offline
Зарегистрирован: 22.09.2011

Выполню данную работу макимально быстро и дешего. Пишите на имейл: fmv.electronics@gmail.com

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>Выполню данную работу макимально быстро и дешего.<<

Максимально "дешего" это как ?

madmax96
Offline
Зарегистрирован: 22.09.2011

Если у вас есть для меня заказ, то я с радостью с вами пообщаюсь

maksim
Offline
Зарегистрирован: 12.02.2012

    

maksim
Offline
Зарегистрирован: 12.02.2012

Я так понял, заказ еще никто не взял. Поэтому если denischernikov устроят такие недостатки функции tone(), то схема:

скейтч:

#define STEP 10         // шаг, в Гц
#define STEP1 500       // шаг при удержании кнопки, в Гц

#define OUT 2           // вывод выходного сигнала
#define BUTTON_UP 3     // вывод кнопки "выше"
#define BUTTON_DOWN 4   // вывод кнопки "ниже"

int frequency = 100;   // частота по умолчанию (при включении), в Гц 

void setup() 
{
  Serial.begin(9600);
  digitalWrite(BUTTON_UP, HIGH);     
  digitalWrite(BUTTON_DOWN, HIGH); 
  pinMode(OUT, OUTPUT);
  tone(OUT, frequency);
  Serial.println(frequency);
}

void loop()
{
  Pressed(BUTTON_UP);
  Pressed(BUTTON_DOWN);
}

void Pressed(byte button)
{
  static bool f_up, f_down;
  static uint32_t time_out;
  if(!digitalRead(button))
  {
    if(button==BUTTON_UP ? !f_up : !f_down)
    {
      frequency = button==BUTTON_UP ? frequency+STEP: frequency-STEP;
      button==BUTTON_UP ? f_up=1 : f_down=1;
      time_out = millis() + 1000;
    }
    if(millis() > time_out) 
    {
      frequency = button==BUTTON_UP ? frequency+STEP1: frequency-STEP1;
      delay(350);
    }
    frequency = constrain(frequency, 40, 32700);
    tone(OUT, frequency);
    Serial.println(frequency);
    delay(150);
  }
  else  button==BUTTON_UP ? f_up=0 : f_down=0;
}

В начале скейтча можно задать основной шаг и шаг при удержании кнопок более одной секунды, а так же на какой частоте генерить сигнал при включении, текущая частота выводится в сериал-монитор.

На данном транзисторе в таком режиме работы ток нагрузки составляет до 5 ампер.

madmax96
Offline
Зарегистрирован: 22.09.2011

ДА не нужна тут функция эта

madmax96
Offline
Зарегистрирован: 22.09.2011

ВО всяком случае мне

maksim
Offline
Зарегистрирован: 12.02.2012

Если вы про CTC, то эта функция как раз этот режим таймера и использует.

madmax96
Offline
Зарегистрирован: 22.09.2011

В том числе

maksim
Offline
Зарегистрирован: 12.02.2012

Да ладно вам тут, не в том числе, а это единственно всё.
При частоте в 40 кГц минимальный шаг, который можно выжать на выводах ОСnx 200 Гц.

maksim
Offline
Зарегистрирован: 12.02.2012

В общем то вот генератор на таймере 1 с частатой от 40 Гц до 40кГц.
Но при 10 кГц минимальный шаг составит 13 Гц, при 20 кГц - 50 Гц, при 30 кГц - 137 Гц и при 40 кГц - 200 Гц. Это максимум что можно выжать из дуины Уно. Реальная частота выводится в сериал.

схема:

скейтч:

#define STEP 10        // шаг, в Гц
#define STEP1 500      // шаг при удержании кнопки, в Гц

#define OUT 9          // вывод выходного сигнала
#define BUTTON_UP 3    // вывод кнопки "выше"
#define BUTTON_DOWN 4  // вывод кнопки "ниже"

int frequency = 1000;  // частота по умолчанию (при включении), в Гц 

void setup() 
{
  Serial.begin(9600);
  digitalWrite(BUTTON_UP, HIGH);     
  digitalWrite(BUTTON_DOWN, HIGH); 
  pinMode(OUT, OUTPUT);
  Serial.println(Set_frequency(frequency));
}

void loop()
{
  Pressed(BUTTON_UP);
  Pressed(BUTTON_DOWN);
}

void Pressed(byte button)
{
  static bool f_up, f_down;
  static uint32_t time_out;
  if(!digitalRead(button))
  {
    if(button==BUTTON_UP ? !f_up : !f_down)
    {
      frequency = button==BUTTON_UP ? frequency+STEP: frequency-STEP;
      button==BUTTON_UP ? f_up=1 : f_down=1;
      time_out = millis() + 1000;
    }
    if(millis() > time_out) 
    {
      frequency = button==BUTTON_UP ? frequency+STEP1: frequency-STEP1;
      delay(350);
    }
    frequency = constrain(frequency, 40, 40000);
    Serial.println(Set_frequency(frequency));
    delay(150);
  }
  else  button==BUTTON_UP ? f_up=0 : f_down=0;
}

uint16_t Set_frequency(uint16_t freq)
{
  cli();
  TCCR1A = 0b01000000; 
  uint16_t ocr;
  if(freq < 134) 
  {
    TCCR1B = 0b00001010; 
    ocr = 1000000UL/freq - 1;
    freq = 1000000UL/(ocr+1);
  }
  else 
  {
    TCCR1B = 0b00001001;
    ocr = 8000000UL/freq - 1;
    freq = 8000000UL/(ocr+1);
  }
  OCR1AH = highByte(ocr);  
  OCR1AL = lowByte(ocr);
  TIMSK1 = 0b00000010; 
  sei();
  return freq;
}

ISR(TIMER1_COMPA_vect){}

 

madmax96
Offline
Зарегистрирован: 22.09.2011

Очень забавно нарисовал схему с общим эмиттером. Мы можем с тобой заключить пари, что это далеко не все, на что Arduino споосбна) 

madmax96
Offline
Зарегистрирован: 22.09.2011

К тому же, прочитай внимательно, там просят 4КГц, а не 40кГц

maksim
Offline
Зарегистрирован: 12.02.2012

Что в ней забавного? какой еще общий эмиттер? с чем он общий? Эмиттер просто подключен к земле и ничего больше. 
Да, ошибся нулем, ну тогда и tone() бы потянула. Просто в 42 строке один 0 убрать.

Хотите поспорить, что можно реализовать генератор прямоугольных импульсов диапазоном частот от 40 Гц до 40 кГц на дуине Уно (естественно без каких либо доработок) с шагом на частотах выше 30 кГц меньше 136 Гц?

madmax96
Offline
Зарегистрирован: 22.09.2011
madmax96
Offline
Зарегистрирован: 22.09.2011

Но я понял, что это не твоя схема

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

madmax96 вы не видите разницы между вашей схемой и схемой которую привел maksim ?

В схеме приведенной maksimом транзистор включен именно в режиме ключа а не усилительного каскада.

maksim
Offline
Зарегистрирован: 12.02.2012

Это стандартная схема включения NPN-транзистора, и поверьте не стыдно, это всего лишь терминология и нечего больше. А схема к вашему сожалению моя, так что понимальщик из вас никакой. Так что по поводу генератора?

И кстати, да, схемы разные.

madmax96
Offline
Зарегистрирован: 22.09.2011

)))) ребята, я ржу) просто слов нет) Итак, разъясню еще раз) Схема с общим эмиттером называется так, потому что эмиттер заземлен. Вот и все. Какая бы то она ни была - не важно. Есть еще, например, "с общим коллектром". Она же - эмиттерный повторитель. Коллектор напрямую к питанию подключается. Вот и все. Далее, загуглите в картинках "схема с общим эмиттером" и увидите миллион варьиаций. Касательно картинки с википедии, что смутило?? наличие резистора в базе у Максима и отсутствие его в википедийной картинке? Этот резистор всего-навсего ограничивает ток базы. Или, может, в коллекторе резистор смутил? Этот резистор  - нагрузка. У максима в этом месте разрыв цепи, для подключения все той же нагрузги. 

madmax96
Offline
Зарегистрирован: 22.09.2011

Я в конце недели сделаю и сниму на видео. С осциллографа промерю периоды

maksim
Offline
Зарегистрирован: 12.02.2012

В общем есть такой "ключевой каскад с общим эмиттером" вы дали ссылку на усилительный, так что не суть.

Так что же вы тему переводите. Вы грозились открыть нам неведанные возможности. И даже пари заключить. Внимаем.

maksim
Offline
Зарегистрирован: 12.02.2012

madmax96 пишет:

Я в конце недели сделаю и сниму на видео. С осциллографа промерю периоды

Это вы как раз о шаге изменения частоты более 30 кГц?

madmax96
Offline
Зарегистрирован: 22.09.2011

Я скинул первую попавшуюся ссылку с википедии. Можете как угодно ее трактовать - суть дело оно не меняет. Это схема с общим эмиттером.  Просто, люди, хоть немного транзисторы изучавщие, данную терминологию знают. Да и если не знают даже - из названия все понятно. Почему общее и как. 

Максим, еще раз тебе повторю, я не знаю где ты откапал 40кГц и почему привязался к этой частоте. Заказчик просил 4кГц.  Все-таки надо было внимательно читать, прежде чем спешить отписаться. И когда я тебе писал изначально - речь шла о 4кГц. Но, для тебя я сделаю 40. Ближе к концу рабочей недели будет видео.

И еще, предложение, давай-те меньше срача тут. Это ни к чему не приводит и лишь засвечивает пробелы в знаниях перед заказчиками. Вот, например, как незнания понятия "общий эмиттер". 

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>И еще, предложение, давай-те меньше срача тут. <<

Вы сами его начали. В посте №3. Кто раньше встал , того и тапки. А вы лезете со своим "быстро и дешего".

madmax96
Offline
Зарегистрирован: 22.09.2011

http://arduino.ru/forum/ishchu-ispolnitelya/ishchu-ispolnitelya

- вот тут раньше встал я. Но вам это не помешало потом полезть.  Чья бы корова мычала

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Товарищ madmax96, зачем вы говорите о том чего не знаете ?

Вам не показалось странным что в той теме я написал лишь один пост - " заказ взял".

Как по вашему я связался с заказчиком (и перебил вас) , если он не выложил ни почту , ни скайп? Я в той теме тоже не  выкладывал свои координаты

maksim
Offline
Зарегистрирован: 12.02.2012

Лично меня "засвечивание пробелы в знаниях" не смущает, знать всё невозможно, тем более когда речь идет о всего лишь о понятиях и терминах, а не о самой сути.

40 кГц я уже сделал. Так вы согласны, что в диапазоне от 30 кГц до 40к кГц шаг будет от 137 Гц до 200 Гц и меньше его сделать не получится?

40000 Hz
39800 Hz
39603 Hz
39408 Hz
39215 Hz
39024 Hz
38834 Hz
38647 Hz
38461 Hz
38277 Hz
38095 Hz
37914 Hz
37735 Hz
37558 Hz
37383 Hz
37209 Hz
37037 Hz
36866 Hz
36697 Hz
36529 Hz
36363 Hz
36199 Hz
36036 Hz
35874 Hz
35714 Hz
35555 Hz
35398 Hz
35242 Hz
35087 Hz
34934 Hz
34782 Hz
34632 Hz
34482 Hz
34334 Hz
34188 Hz
34042 Hz
33898 Hz
33755 Hz
33613 Hz
33472 Hz
33333 Hz
33195 Hz
33057 Hz
32921 Hz
32786 Hz
32653 Hz
32520 Hz
32388 Hz
32258 Hz
32128 Hz
32000 Hz
31872 Hz
31746 Hz
31620 Hz
31496 Hz
31372 Hz
31250 Hz
31128 Hz
31007 Hz
30888 Hz
30769 Hz
30651 Hz
30534 Hz
30418 Hz
30303 Hz
30188 Hz
30075 Hz

 

madmax96
Offline
Зарегистрирован: 22.09.2011

а что тогда означала фраза "заказ взял"?? 

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

Либо, может, это какой-то человек, с которым дела ранее велись уже и контакты имелись.

Если я не прав и заказ вы этот не брали - объясните, пожалуйста, смысл той фразы и зачем вы ее писали там. 

maksim
Offline
Зарегистрирован: 12.02.2012

Что здесь не понятного? заказщик сам выбрал исполнителя из списка исполнителей.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>ну, наверно, можно предположить, что заказчик связался с вами взяв контакты, например, из темы "исполнители".<<

Именно так. Так в чем же вы меня обвиняете ?

Тот заказчик скинул мне на почту письмо около 11 часов а тему создал около 15.

Он просто продублировал заказ т.к. не знал стоимость работы.

Когда я увидел его тему на форуме , я обозначил сумму и спросил его "Будем работать ? Или вы нашли другого исполнителя? ". Он сказал что мои условия его полностью устраивают.

К моменту создания темы  мы уже обговаривали алгоритмы и сроки.

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

 

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

madmax96, если уж вам так нужны заказчики  могу отрекошетить вам парочку.

Сегодня обратились, но т.к. у меня сейчас и без них три заказа я их не взял. Скинуть вам их координаты и требования (работа чисто программная) ?

madmax96
Offline
Зарегистрирован: 22.09.2011

да, на 40кГц разбежка будет такого порядка

madmax96
Offline
Зарегистрирован: 22.09.2011

Зачем вы тогда за этот заказ боритесь сейчас?)  Я не скажу, что прям остро нуждаюсь. У меня есть сейчас заказы. Но, практически все, в стадии сдачи-приемки. Потому, я бы не отказался сейчас рассмотреть еще что-то. Буду благодарен.

По поводу взятия заказа. Можем с вами по джентельменски договориться. Кто раньше вступил в диалог с закачиком- тот и берет заказ. Не смог договориться- другой договаривается.

  

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

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

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

Если заказ не взять , скажем дольше суток , то можно перебивать. Как то так.

>>Потому, я бы не отказался сейчас рассмотреть еще что-то. Буду благодарен.<<

Сейчас перекину вам письма и координаты. Дальше договаривайтесь сами.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Заказчиков скинул .

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>Зачем вы тогда за этот заказ боритесь сейчас?)<<

Ну не то чтобы борюсь. Он совсем простой. Час работы с перекурами. Если бы данный заказчик разместил тему где нибудь в программировании и попытался сам разобраться , я бы помог ему бесплатно.

Но если он так уж хочет расстаться с деньгами... Это его право.

madmax96
Offline
Зарегистрирован: 22.09.2011

Ок. спасибо. 

Nikolai54
Offline
Зарегистрирован: 23.06.2013

Спасибо повторил, отлично работает.
Вот мне бы частоту (максимальну задать) не знаю какая получается  восем раз нажимаю на кнопку "выше" больше и не надо.
где  можно задать мою максимальную частоту?
Спасибо
 

maksim
Offline
Зарегистрирован: 12.02.2012

Запустите сериал монитор и увидите что это за частота, а в строке 

    frequency = constrain(frequency, 40, 40000);

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

Nikolai54
Offline
Зарегистрирован: 23.06.2013

Максим Спасибо большое.

Не получается у меня задать минимум 0.5 гц

кнопкой не могу меньше 20 гц уменишить

Установлена frequency, 0,5 гц  1500 гц  Мне больше не надо

 

Nikolai54
Offline
Зарегистрирован: 23.06.2013

Максим, этот скетч не даст эти частоты?

maksim
Offline
Зарегистрирован: 12.02.2012

Ниже 20-ти не получится.

Nikolai54
Offline
Зарегистрирован: 23.06.2013

Что бы окончательно закрыть эту тему, скажите Максим на Arduino это не возможно?

maksim
Offline
Зарегистрирован: 12.02.2012

Конечно возможно.

void setup() {                
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);     
}

void loop() {
  digitalWrite(13, HIGH);   // set the LED on
  delay(50);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(50);              // wait for a second
}

 

Nikolai54
Offline
Зарегистрирован: 23.06.2013

Огоромное спасибо Вам.
А кнопки и LCD Ваши, как прикрутить?
Извините.