Ищу исполнителя по написанию скетча
- Войдите на сайт для отправки комментариев
Сб, 16/02/2013 - 09:19
Нужен скетч для Arduino Uno:
Генератор прямоугольных импульсов управляемый двумя кнопками.
Частота 40 до 4000 Гц. Выход 12 вольт. Нужна схема и скетч.
Оплату гарантирую.
Денис.
тел. 79184390511
Вы бы лучше почту указали.
Могу помочь.
Пишите в почту.
1
heruvim219@mail.ru
Опишите подробней для чего нужен данный генератор частоты и какой ток нагрузки. Ну или замерьте сопротивление нагрузки.
Выполню данную работу макимально быстро и дешего. Пишите на имейл: fmv.electronics@gmail.com
>>Выполню данную работу макимально быстро и дешего.<<
Максимально "дешего" это как ?
Если у вас есть для меня заказ, то я с радостью с вами пообщаюсь
Я так понял, заказ еще никто не взял. Поэтому если denischernikov устроят такие недостатки функции tone(), то схема:

скейтч:
01
#define STEP 10 // шаг, в Гц
02
#define STEP1 500 // шаг при удержании кнопки, в Гц
03
04
#define OUT 2 // вывод выходного сигнала
05
#define BUTTON_UP 3 // вывод кнопки "выше"
06
#define BUTTON_DOWN 4 // вывод кнопки "ниже"
07
08
int
frequency = 100;
// частота по умолчанию (при включении), в Гц
09
10
void
setup
()
11
{
12
Serial
.begin(9600);
13
digitalWrite(BUTTON_UP, HIGH);
14
digitalWrite(BUTTON_DOWN, HIGH);
15
pinMode(OUT, OUTPUT);
16
tone(OUT, frequency);
17
Serial
.println(frequency);
18
}
19
20
void
loop
()
21
{
22
Pressed(BUTTON_UP);
23
Pressed(BUTTON_DOWN);
24
}
25
26
void
Pressed(
byte
button)
27
{
28
static
bool
f_up, f_down;
29
static
uint32_t time_out;
30
if
(!digitalRead(button))
31
{
32
if
(button==BUTTON_UP ? !f_up : !f_down)
33
{
34
frequency = button==BUTTON_UP ? frequency+STEP: frequency-STEP;
35
button==BUTTON_UP ? f_up=1 : f_down=1;
36
time_out = millis() + 1000;
37
}
38
if
(millis() > time_out)
39
{
40
frequency = button==BUTTON_UP ? frequency+STEP1: frequency-STEP1;
41
delay(350);
42
}
43
frequency = constrain(frequency, 40, 32700);
44
tone(OUT, frequency);
45
Serial
.println(frequency);
46
delay(150);
47
}
48
else
button==BUTTON_UP ? f_up=0 : f_down=0;
49
}
В начале скейтча можно задать основной шаг и шаг при удержании кнопок более одной секунды, а так же на какой частоте генерить сигнал при включении, текущая частота выводится в сериал-монитор.
На данном транзисторе в таком режиме работы ток нагрузки составляет до 5 ампер.
ДА не нужна тут функция эта
ВО всяком случае мне
Если вы про CTC, то эта функция как раз этот режим таймера и использует.
В том числе
Да ладно вам тут, не в том числе, а это единственно всё.
При частоте в 40 кГц минимальный шаг, который можно выжать на выводах ОСnx 200 Гц.
В общем то вот генератор на таймере 1 с частатой от 40 Гц до 40кГц.
Но при 10 кГц минимальный шаг составит 13 Гц, при 20 кГц - 50 Гц, при 30 кГц - 137 Гц и при 40 кГц - 200 Гц. Это максимум что можно выжать из дуины Уно. Реальная частота выводится в сериал.
схема:

скейтч:
01
#define STEP 10 // шаг, в Гц
02
#define STEP1 500 // шаг при удержании кнопки, в Гц
03
04
#define OUT 9 // вывод выходного сигнала
05
#define BUTTON_UP 3 // вывод кнопки "выше"
06
#define BUTTON_DOWN 4 // вывод кнопки "ниже"
07
08
int
frequency = 1000;
// частота по умолчанию (при включении), в Гц
09
10
void
setup
()
11
{
12
Serial
.begin(9600);
13
digitalWrite(BUTTON_UP, HIGH);
14
digitalWrite(BUTTON_DOWN, HIGH);
15
pinMode(OUT, OUTPUT);
16
Serial
.println(Set_frequency(frequency));
17
}
18
19
void
loop
()
20
{
21
Pressed(BUTTON_UP);
22
Pressed(BUTTON_DOWN);
23
}
24
25
void
Pressed(
byte
button)
26
{
27
static
bool
f_up, f_down;
28
static
uint32_t time_out;
29
if
(!digitalRead(button))
30
{
31
if
(button==BUTTON_UP ? !f_up : !f_down)
32
{
33
frequency = button==BUTTON_UP ? frequency+STEP: frequency-STEP;
34
button==BUTTON_UP ? f_up=1 : f_down=1;
35
time_out = millis() + 1000;
36
}
37
if
(millis() > time_out)
38
{
39
frequency = button==BUTTON_UP ? frequency+STEP1: frequency-STEP1;
40
delay(350);
41
}
42
frequency = constrain(frequency, 40, 40000);
43
Serial
.println(Set_frequency(frequency));
44
delay(150);
45
}
46
else
button==BUTTON_UP ? f_up=0 : f_down=0;
47
}
48
49
uint16_t Set_frequency(uint16_t freq)
50
{
51
cli();
52
TCCR1A = 0b01000000;
53
uint16_t ocr;
54
if
(freq < 134)
55
{
56
TCCR1B = 0b00001010;
57
ocr = 1000000UL/freq - 1;
58
freq = 1000000UL/(ocr+1);
59
}
60
else
61
{
62
TCCR1B = 0b00001001;
63
ocr = 8000000UL/freq - 1;
64
freq = 8000000UL/(ocr+1);
65
}
66
OCR1AH = highByte(ocr);
67
OCR1AL = lowByte(ocr);
68
TIMSK1 = 0b00000010;
69
sei();
70
return
freq;
71
}
72
73
ISR(TIMER1_COMPA_vect){}
Очень забавно нарисовал схему с общим эмиттером. Мы можем с тобой заключить пари, что это далеко не все, на что Arduino споосбна)
К тому же, прочитай внимательно, там просят 4КГц, а не 40кГц
Что в ней забавного? какой еще общий эмиттер? с чем он общий? Эмиттер просто подключен к земле и ничего больше.
Да, ошибся нулем, ну тогда и tone() бы потянула. Просто в 42 строке один 0 убрать.
Хотите поспорить, что можно реализовать генератор прямоугольных импульсов диапазоном частот от 40 Гц до 40 кГц на дуине Уно (естественно без каких либо доработок) с шагом на частотах выше 30 кГц меньше 136 Гц?
Максим, стыдно не знать..
http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%81%D0%BA%D0%B0%D0%B4_%D1%81...
Но я понял, что это не твоя схема
madmax96 вы не видите разницы между вашей схемой и схемой которую привел maksim ?
В схеме приведенной maksimом транзистор включен именно в режиме ключа а не усилительного каскада.
Это стандартная схема включения NPN-транзистора, и поверьте не стыдно, это всего лишь терминология и нечего больше. А схема к вашему сожалению моя, так что понимальщик из вас никакой. Так что по поводу генератора?
И кстати, да, схемы разные.
)))) ребята, я ржу) просто слов нет) Итак, разъясню еще раз) Схема с общим эмиттером называется так, потому что эмиттер заземлен. Вот и все. Какая бы то она ни была - не важно. Есть еще, например, "с общим коллектром". Она же - эмиттерный повторитель. Коллектор напрямую к питанию подключается. Вот и все. Далее, загуглите в картинках "схема с общим эмиттером" и увидите миллион варьиаций. Касательно картинки с википедии, что смутило?? наличие резистора в базе у Максима и отсутствие его в википедийной картинке? Этот резистор всего-навсего ограничивает ток базы. Или, может, в коллекторе резистор смутил? Этот резистор - нагрузка. У максима в этом месте разрыв цепи, для подключения все той же нагрузги.
Я в конце недели сделаю и сниму на видео. С осциллографа промерю периоды
В общем есть такой "ключевой каскад с общим эмиттером" вы дали ссылку на усилительный, так что не суть.
Так что же вы тему переводите. Вы грозились открыть нам неведанные возможности. И даже пари заключить. Внимаем.
Я в конце недели сделаю и сниму на видео. С осциллографа промерю периоды
Это вы как раз о шаге изменения частоты более 30 кГц?
Я скинул первую попавшуюся ссылку с википедии. Можете как угодно ее трактовать - суть дело оно не меняет. Это схема с общим эмиттером. Просто, люди, хоть немного транзисторы изучавщие, данную терминологию знают. Да и если не знают даже - из названия все понятно. Почему общее и как.
Максим, еще раз тебе повторю, я не знаю где ты откапал 40кГц и почему привязался к этой частоте. Заказчик просил 4кГц. Все-таки надо было внимательно читать, прежде чем спешить отписаться. И когда я тебе писал изначально - речь шла о 4кГц. Но, для тебя я сделаю 40. Ближе к концу рабочей недели будет видео.
И еще, предложение, давай-те меньше срача тут. Это ни к чему не приводит и лишь засвечивает пробелы в знаниях перед заказчиками. Вот, например, как незнания понятия "общий эмиттер".
>>И еще, предложение, давай-те меньше срача тут. <<
Вы сами его начали. В посте №3. Кто раньше встал , того и тапки. А вы лезете со своим "быстро и дешего".
http://arduino.ru/forum/ishchu-ispolnitelya/ishchu-ispolnitelya
- вот тут раньше встал я. Но вам это не помешало потом полезть. Чья бы корова мычала
Товарищ madmax96, зачем вы говорите о том чего не знаете ?
Вам не показалось странным что в той теме я написал лишь один пост - " заказ взял".
Как по вашему я связался с заказчиком (и перебил вас) , если он не выложил ни почту , ни скайп? Я в той теме тоже не выкладывал свои координаты
Лично меня "засвечивание пробелы в знаниях" не смущает, знать всё невозможно, тем более когда речь идет о всего лишь о понятиях и терминах, а не о самой сути.
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
а что тогда означала фраза "заказ взял"??
ну, наверно, можно предположить, что заказчик связался с вами взяв контакты, например, из темы "исполнители".
Либо, может, это какой-то человек, с которым дела ранее велись уже и контакты имелись.
Если я не прав и заказ вы этот не брали - объясните, пожалуйста, смысл той фразы и зачем вы ее писали там.
Что здесь не понятного? заказщик сам выбрал исполнителя из списка исполнителей.
>>ну, наверно, можно предположить, что заказчик связался с вами взяв контакты, например, из темы "исполнители".<<
Именно так. Так в чем же вы меня обвиняете ?
Тот заказчик скинул мне на почту письмо около 11 часов а тему создал около 15.
Он просто продублировал заказ т.к. не знал стоимость работы.
Когда я увидел его тему на форуме , я обозначил сумму и спросил его "Будем работать ? Или вы нашли другого исполнителя? ". Он сказал что мои условия его полностью устраивают.
К моменту создания темы мы уже обговаривали алгоритмы и сроки.
Я посчитал правильным уведомить других исполнителей о том что заказ взят.
madmax96, если уж вам так нужны заказчики могу отрекошетить вам парочку.
Сегодня обратились, но т.к. у меня сейчас и без них три заказа я их не взял. Скинуть вам их координаты и требования (работа чисто программная) ?
да, на 40кГц разбежка будет такого порядка
Зачем вы тогда за этот заказ боритесь сейчас?) Я не скажу, что прям остро нуждаюсь. У меня есть сейчас заказы. Но, практически все, в стадии сдачи-приемки. Потому, я бы не отказался сейчас рассмотреть еще что-то. Буду благодарен.
По поводу взятия заказа. Можем с вами по джентельменски договориться. Кто раньше вступил в диалог с закачиком- тот и берет заказ. Не смог договориться- другой договаривается.
>>Можем с вами по джентельменски договориться. Кто раньше вступил в диалог с закачиком- тот и берет заказ.<<
По крайней мере это будет правильно. Так же не мешало бы уведомлять исполнителей о том что заказ взят.
Если заказ не взять , скажем дольше суток , то можно перебивать. Как то так.
>>Потому, я бы не отказался сейчас рассмотреть еще что-то. Буду благодарен.<<
Сейчас перекину вам письма и координаты. Дальше договаривайтесь сами.
Заказчиков скинул .
>>Зачем вы тогда за этот заказ боритесь сейчас?)<<
Ну не то чтобы борюсь. Он совсем простой. Час работы с перекурами. Если бы данный заказчик разместил тему где нибудь в программировании и попытался сам разобраться , я бы помог ему бесплатно.
Но если он так уж хочет расстаться с деньгами... Это его право.
Ок. спасибо.
Спасибо повторил, отлично работает.
Вот мне бы частоту (максимальну задать) не знаю какая получается восем раз нажимаю на кнопку "выше" больше и не надо.
где можно задать мою максимальную частоту?
Спасибо
Запустите сериал монитор и увидите что это за частота, а в строке
42
frequency = constrain(frequency, 40, 40000);
задаются минимальный и максимальный пределы частоты.
Максим Спасибо большое.
Не получается у меня задать минимум 0.5 гц
кнопкой не могу меньше 20 гц уменишить
Установлена frequency, 0,5 гц 1500 гц Мне больше не надо
Максим, этот скетч не даст эти частоты?
Ниже 20-ти не получится.
Что бы окончательно закрыть эту тему, скажите Максим на Arduino это не возможно?
Конечно возможно.
01
void
setup
() {
02
// initialize the digital pin as an output.
03
// Pin 13 has an LED connected on most Arduino boards:
04
pinMode(13, OUTPUT);
05
}
06
07
void
loop
() {
08
digitalWrite(13, HIGH);
// set the LED on
09
delay(50);
// wait for a second
10
digitalWrite(13, LOW);
// set the LED off
11
delay(50);
// wait for a second
12
}
Огоромное спасибо Вам.
А кнопки и LCD Ваши, как прикрутить?
Извините.