ua6em, кста, если убрать автоповтор, можно получить автоматический ключ. Набрал в сериале то, что хочешь передать, нажимаешь ентер да наливаешь себе, пока оно там само отстукиваеца.
ua6em, а я всё хотел спросить. Вот ваш маяк, подключили вы его к своему ТХ. Как я понимаю, сами при этом работать не можете - ведь маяк за вас работает... Или есть какие то иные правила?
маяк работает на своих частотах, я на общепринятых
Хорошо работает такой маяк, на 8 мГц проверил, правда частота на 20 килогерц ниже. За 20 км можно принять на трансивер с хорошей антенной, на Sметре ничего, на слух принимается. При том что антенна 2 метра провода. Через пару комнат ловил 3 гармонику на SDR приемник, на кусок провода. У меня трансивер есть только на 2м, не попадает его диапазон ни в одну из гармоник, частоту кварца бы на 20 КГц больше, поймал думаю бы. Усилитель к нему бы еще, для КВ маяк на 10 ватт это норма, для УКВ и ватта за глаза хватит.
Одно но получается... Не получится с ардуино задавать любую частоту. Максимум 16 мегагерц, следующая будет 8.. но чем ниже, тем больше возможных делителей.
Хорошо работает такой маяк, на 8 мГц проверил, правда частота на 20 килогерц ниже. За 20 км можно принять на трансивер с хорошей антенной, на Sметре ничего, на слух принимается. При том что антенна 2 метра провода. Через пару комнат ловил 3 гармонику на SDR приемник, на кусок провода. У меня трансивер есть только на 2м, не попадает его диапазон ни в одну из гармоник, частоту кварца бы на 20 КГц больше, поймал думаю бы. Усилитель к нему бы еще, для КВ маяк на 10 ватт это норма, для УКВ и ватта за глаза хватит.
Одно но получается... Не получится с ардуино задавать любую частоту. Максимум 16 мегагерц, следующая будет 8.. но чем ниже, тем больше возможных делителей.
у меня на нано от рободина нормальный кварц, 144 слышно на ура, а вот 430 уже нет
Задавать получится, я жеж всё это дело к SI модулю прикручивать далее буду, у него три выхода частоты, так что маячок на 144/430/1200 должен получится
С сишкой конечно получится. Но ардуинко перестанет быть генератором, она будет управлять сишкой.
У меня не слышно на двойке потому, что начальная частота трансивера 144 ровно, а частота моего генератора будет на 360 килогерц ниже. Следующая частота примерно 152, но я уже не слышу на трансивере выше 149. Так услышал бы.
На 430 можно было бы услышать, несколько укоротив импульс. Думаю получилось бы, если выход ардуино подключить к входу элементу ксор, к одному напрямую, к другому через 4 инвертора. А потом это все на умножитель. Но думаю не стоит такой огород городить.
На свой трансивер я ловил гармоники, кварц на 3.5 мгц примерно, гормоники в районе сороковой, с уровнем 5/9!! Чем понлавилось, очень чистый сигнал.
ua6em, а я всё хотел спросить. Вот ваш маяк, подключили вы его к своему ТХ. Как я понимаю, сами при этом работать не можете - ведь маяк за вас работает... Или есть какие то иные правила?
маяк работает на своих частотах, я на общепринятых
И что? Вы можете членораздельно людям объяснить что к чему? И не так, что бы было понятно только вам самому.
Каждый из радиолюбительских диапазонов разделен на несколько участков. Есть участки для работы маяков, есть для телеграфной связи, есть для телефонной связи, есть для передачи цифры. Потому пока маяк работает на участке, предназначенном для маяков, мы спокойно работаем совсем недалкео от частоты маяка, где уже можно устанавливать двухскоронние связи.
А тако поулчается, что этот маяк вообще работает за пределами радиолюибтельского участка...
И если Вы о другом... то маяк сам по себе передатчик. Он не использует основной трансивер.
ОК, допустим есть разделение по диапазонам. Но ведь маяк это передатчик. А передатчик должен быть за кем то зарегистрирован, кому то принадлежать. И если он принадлежит мне, то как я могу работать параллельно на другой частоте с этим же позывным? Вот на это я хотел получить объяснение. Я 100 лет не связан с КВ, поэтому не знаю сегодняшней ситуации, поэтому и вопросы.
ОК, допустим есть разделение по диапазонам. Но ведь маяк это передатчик. А передатчик должен быть за кем то зарегистрирован, кому то принадлежать. И если он принадлежит мне, то как я могу работать параллельно на другой частоте с этим же позывным? Вот на это я хотел получить объяснение. Я 100 лет не связан с КВ, поэтому не знаю сегодняшней ситуации, поэтому и вопросы.
маяки для временной экспериментальной работы регистрировать не надо, а регистрировать можно хоть сто передатчиков, сейчас эта процедура упрощена, можно зарегистрировать онлайн, работайте хоть на трёх диапазонах одновременно, если сможите )))
А позывной сигнал используется ваш, есть же свидетельство об образовании радиолюбительского сигнала, в соответствии с этим свидетельство и работаете, некоторые позывные выдают на ограниченный срок работы, к примеру сейчас выданы позывные для мемориала Победы, на майские праздники
ua6em, кста, если убрать автоповтор, можно получить автоматический ключ. Набрал в сериале то, что хочешь передать, нажимаешь ентер да наливаешь себе, пока оно там само отстукиваеца.
Активный бузер весьма пригодица для самопрослушивания
выдернул с компьютера, там пассивный
еще не придумал, как прирулить регулировку скорости передачи, понятно, что переменный резистор на аналоговый пин, далее не весь код еще одолел, посматриваю
DOT_TIME = от 25 до 100 будет достаточно, резистора тут под руками нет, попытать )))
Может не надо? Я вот тут подумал, может не в кварце дело у меня.. На измерения аналога уйдет время Если оно еще будет выполняться в цикле, то вообще будет не хорошо, может повлиять на частоту. Потому либо после каждой передачи выход из оснвоного цикла.. Но с другой стороне, ничего нам не должно мешать только в то время, пока передается точка или тире, на следующей паузе можно немного мк и озадачить еще чем...
Может не надо? Я вот тут подумал, может не в кварце дело у меня.. На измерения аналога уйдет время Если оно еще будет выполняться в цикле, то вообще будет не хорошо, может повлиять на частоту. Потому либо после каждой передачи выход из оснвоного цикла.. Но с другой стороне, ничего нам не должно мешать только в то время, пока передается точка или тире, на следующей паузе можно немного мк и озадачить еще чем...
в кварце...тем более что в дуине у тебя и не кварц вовсе )))
Кварцы они в дуинах от рободына... у меня в WAVGAT такой же, и тоже частота ниже получается...
Я о вводе регулировки скорости в скетч от DetSimen, задумка есть куда применить его код и, это не Маяк
не, у меня этих системников )))
В генераторе для катушки Мишина как раз пассивный используется, у приятеля их есть, но это паяться надо, а тут прям с проводками и пецалками для подключения
Да, собрал твой скетч всё с библиотеками в одну папку, так понимать проще... кое-что поправить правда пришлось, чтобы компилировалось
Да! на таймерах скорость регулируется правильно, строго пропорционально от константы...
каоче, пофиг, главна, чтоб работало. Если спросишь, расскажу как другие операции, например, опрос даччиков или верчение моторами или реле встроить в эту карикатуру, ничего не сломав. Или ты сам мальчик башой, догадаешьса?
каоче, пофиг, главна, чтоб работало. Если спросишь, расскажу как другие операции, например, опрос даччиков или верчение моторами или реле встроить в эту карикатуру, ничего не сломав. Или ты сам мальчик башой, догадаешьса?
А энкодер идея хорошоя, но шаг то может быть любой, хоть 1*10^-15, да и нажатием на кнопку (самого же энкодера) можно поменять будет. В ардуино если не ошибаюсь керамический резонатор. Лежит у меня плата от старого кенвуда, на 430, вот в нем вроде или ГУН, или образцовый генератор на 14 мегагерц. Еще лучше чем у обычного кварца дочность должна быть... Если на выходе логика, то можно внешнее тактирование делать. Но по идее мы должны фузы поменять, иначе все делей или мились будут работать медленнее.
Если это ГУН, то конечно им ничего не потактирвоать, или получится плата с плавно изменяемой частотой.
вот матри. В диапаносе 20-100 интервалов по 5 укладываеца 15
(100-20)/5 - 1 = 15
для расчета лучше взять 16 интервалов.
читаем потенциометр (аналоговый порт), получаем значения от 0 до 1023. Теперь простым делением на 64 (сдвигом на 6) мы проецируем интервал 0-1023 на 0-15 (пусь это будет L), прикинь, да?
при 0 у нас задержка будет 100, а при 15 - 25 если написать так: 100-(5*L)
втуляешь полученное значение в таймер и радуешься. При выкрученном влево резисторе, задершка будет максимальна (скорость передачи самая ниская), при полностью вкрученном, задержка самая маинькая - 25, сотвецтвенно скорость передачи самая высокая. пропробуй.
Не, только все начинается. Теперь нужно вводить гистерезис, чтобы на крайних положениях не было дрожания скорости, которая может происходить слишком часто) Вот терь будет интереснее!
она и не будет дрожать (именно в крайних значениях). угадаешь почему?
а вот МЕЖДУ значениями - может дрожать. Решается доворотом чучуть потацометра.
Ну это немногоо я костноязычен. Имел ввиду на краях значений, написал на крайних, изменив смысл. Не, ну без гистерезиса все равно не очень Потому нужны небольшие участки, гне изменения бы не происходили, как раз на границе участков значений. Так что, чтобы все было попроще, надо писать свою библиотеку, под аналоговой энкодер, гистререзис в которой задавался бы при подключении библиотеки.
она и не будет дрожать (именно в крайних значениях). угадаешь почему?
а вот МЕЖДУ значениями - может дрожать. Решается доворотом чучуть потацометра.
Ну это немногоо я костноязычен. Имел ввиду на краях значений, написал на крайних, изменив смысл. Не, ну без гистерезиса все равно не очень Потому нужны небольшие участки, гне изменения бы не происходили, как раз на границе участков значений. Так что, чтобы все было попроще, надо писать свою библиотеку, под аналоговой энкодер, гистререзис в которой задавался бы при подключении библиотеки.
ну так я это давно понял, когда только подумал про потенциометр, потому и сказал, что энкодер будет попроще
Ну как это забудь...
1- случайно попал на границу между значениями
2- ручка потенциометра прокрутилась, и все значения сместились на пол значения
3-При передаче трансивера уровень, наведенный на аналоговый пин оказался достаточным, чтобы изменить его значение.
4- При передаче изменилось напряжение питания микроконтроллера, по причине просадки напряжения, изменив значение напряжения на нужную величину.
5- На не очень новых потенциометров при вращении возможен некоторый дребезг, потому необходимо производить накопление за некоторый, относительно короткий перид вращения, являющийся делением колличества материальных точек на одно положение аналогового энкодера, т.е. резистора, на время прохождение материальной точки. Т.е. делением бесконечно малой величины на бесконечно малую.
6- Вижу еще необходимость предсказать ожидаемую величину по ускорению поворота энкодера, т.к. оно прямо пропорционально рассктоянию, на которое мы хотим повернуть ручку. Пример реализации, комьютерная мышка.
Остальные проблемы думаю будут вытекать из этих, как раз можно решить за выходные.
ua6em, кста, если убрать автоповтор, можно получить автоматический ключ. Набрал в сериале то, что хочешь передать, нажимаешь ентер да наливаешь себе, пока оно там само отстукиваеца.
Только не ключ, а клавиатурный датчик кода Морзе.)
ua6em, а я всё хотел спросить. Вот ваш маяк, подключили вы его к своему ТХ. Как я понимаю, сами при этом работать не можете - ведь маяк за вас работает... Или есть какие то иные правила?
маяк работает на своих частотах, я на общепринятых
Хорошо работает такой маяк, на 8 мГц проверил, правда частота на 20 килогерц ниже. За 20 км можно принять на трансивер с хорошей антенной, на Sметре ничего, на слух принимается. При том что антенна 2 метра провода. Через пару комнат ловил 3 гармонику на SDR приемник, на кусок провода. У меня трансивер есть только на 2м, не попадает его диапазон ни в одну из гармоник, частоту кварца бы на 20 КГц больше, поймал думаю бы. Усилитель к нему бы еще, для КВ маяк на 10 ватт это норма, для УКВ и ватта за глаза хватит.
Одно но получается... Не получится с ардуино задавать любую частоту. Максимум 16 мегагерц, следующая будет 8.. но чем ниже, тем больше возможных делителей.
Хорошо работает такой маяк, на 8 мГц проверил, правда частота на 20 килогерц ниже. За 20 км можно принять на трансивер с хорошей антенной, на Sметре ничего, на слух принимается. При том что антенна 2 метра провода. Через пару комнат ловил 3 гармонику на SDR приемник, на кусок провода. У меня трансивер есть только на 2м, не попадает его диапазон ни в одну из гармоник, частоту кварца бы на 20 КГц больше, поймал думаю бы. Усилитель к нему бы еще, для КВ маяк на 10 ватт это норма, для УКВ и ватта за глаза хватит.
Одно но получается... Не получится с ардуино задавать любую частоту. Максимум 16 мегагерц, следующая будет 8.. но чем ниже, тем больше возможных делителей.
у меня на нано от рободина нормальный кварц, 144 слышно на ура, а вот 430 уже нет
Задавать получится, я жеж всё это дело к SI модулю прикручивать далее буду, у него три выхода частоты, так что маячок на 144/430/1200 должен получится
С сишкой конечно получится. Но ардуинко перестанет быть генератором, она будет управлять сишкой.
У меня не слышно на двойке потому, что начальная частота трансивера 144 ровно, а частота моего генератора будет на 360 килогерц ниже. Следующая частота примерно 152, но я уже не слышу на трансивере выше 149. Так услышал бы.
На 430 можно было бы услышать, несколько укоротив импульс. Думаю получилось бы, если выход ардуино подключить к входу элементу ксор, к одному напрямую, к другому через 4 инвертора. А потом это все на умножитель. Но думаю не стоит такой огород городить.
На свой трансивер я ловил гармоники, кварц на 3.5 мгц примерно, гормоники в районе сороковой, с уровнем 5/9!! Чем понлавилось, очень чистый сигнал.
А, смотрю, понравилось :) Вот вам ещё, простой св-кв маячок.
01
/*
02
The 16 MHz clock is divided by 10 (that is, 1.6 MHz) and that is used to toggle pin 9 at that rate,
03
giving a frequency of 800 KHz, since one toggle turns the output on, and second toggle turns it off.
04
05
If you hold the Arduino near an AM radio tuned to around 800 KHz you should hear a hissing toggling on
06
and off (like Morse code) as the carrier is turned on and off for 0.5 / 0.3 second intervals.
07
*/
08
09
const
byte
ANTENNA = 9;
10
11
void
setup
()
12
{
13
// set up Timer 1
14
TCCR1A = bit (COM1A0);
// toggle OC1A on Compare Match
15
TCCR1B = bit (WGM12) | bit (CS10);
// CTC, no prescaler
16
OCR1A = 9;
// compare A register value to 10 (zero relative)
17
}
18
19
void
loop
()
20
{
21
pinMode (ANTENNA, OUTPUT);
22
delay (500);
23
pinMode (ANTENNA, INPUT);
24
delay (300);
25
}
26
27
/*
28
The OCR1A variable is related to the frequency.
29
The OCR1A variable is one less than the actual divisor.
30
OCR1A - Frequency
31
15 - 500 khz
32
14 - ~530 khz
33
13 - ~570 khz
34
12 - ~610 khz
35
11 - ~670 khz
36
10 - ~730 khz
37
9 - 800 khz
38
8 - ~890 khz
39
7 - 1000 khz
40
6 - ~1140 khz
41
5 - ~1330 khz
42
4 - 1600 khz
43
3 - 2000 khz
44
2 - ~2670 khz
45
1 - 4000 khz
46
0 - 8000 khz *would not recommend this setting
47
48
The formula is (16÷(OCR1A+1)÷2)×1000 = frequency in khz
49
*/
Сейчас на 8 мегагерц оставил работать, а после выходных попробую.
ua6em, а я всё хотел спросить. Вот ваш маяк, подключили вы его к своему ТХ. Как я понимаю, сами при этом работать не можете - ведь маяк за вас работает... Или есть какие то иные правила?
маяк работает на своих частотах, я на общепринятых
И что? Вы можете членораздельно людям объяснить что к чему? И не так, что бы было понятно только вам самому.
Каждый из радиолюбительских диапазонов разделен на несколько участков. Есть участки для работы маяков, есть для телеграфной связи, есть для телефонной связи, есть для передачи цифры. Потому пока маяк работает на участке, предназначенном для маяков, мы спокойно работаем совсем недалкео от частоты маяка, где уже можно устанавливать двухскоронние связи.
А тако поулчается, что этот маяк вообще работает за пределами радиолюибтельского участка...
И если Вы о другом... то маяк сам по себе передатчик. Он не использует основной трансивер.
ОК, допустим есть разделение по диапазонам. Но ведь маяк это передатчик. А передатчик должен быть за кем то зарегистрирован, кому то принадлежать. И если он принадлежит мне, то как я могу работать параллельно на другой частоте с этим же позывным? Вот на это я хотел получить объяснение. Я 100 лет не связан с КВ, поэтому не знаю сегодняшней ситуации, поэтому и вопросы.
ОК, допустим есть разделение по диапазонам. Но ведь маяк это передатчик. А передатчик должен быть за кем то зарегистрирован, кому то принадлежать. И если он принадлежит мне, то как я могу работать параллельно на другой частоте с этим же позывным? Вот на это я хотел получить объяснение. Я 100 лет не связан с КВ, поэтому не знаю сегодняшней ситуации, поэтому и вопросы.
маяки для временной экспериментальной работы регистрировать не надо, а регистрировать можно хоть сто передатчиков, сейчас эта процедура упрощена, можно зарегистрировать онлайн, работайте хоть на трёх диапазонах одновременно, если сможите )))
А позывной сигнал используется ваш, есть же свидетельство об образовании радиолюбительского сигнала, в соответствии с этим свидетельство и работаете, некоторые позывные выдают на ограниченный срок работы, к примеру сейчас выданы позывные для мемориала Победы, на майские праздники
Во блин, всё течёт, всё меняется! Могли и раньше, и на всех диапазонах.)) Примерно идея понятна. Спасибо.)
ua6em, кста, если убрать автоповтор, можно получить автоматический ключ. Набрал в сериале то, что хочешь передать, нажимаешь ентер да наливаешь себе, пока оно там само отстукиваеца.
а самопрослушивание? )))
1
#define toneFreq (800) //частота звука (выбирайте между 600 - 1000Гц)
2
static
uint8_t TXPin = 13;
// пин передаччика
3
int
tonePin = A4;
// выход звука на радиостанцию
4
5
void
TXOnOff(
const
bool
On) {
// передаччик вкл/выкл
6
digitalWrite(TXPin, On);
7
if
(On) {tone(tonePin, toneFreq);}
else
{ noTone(tonePin);}
8
}
Активный бузер весьма пригодица для самопрослушивания
Активный бузер весьма пригодица для самопрослушивания
выдернул с компьютера, там пассивный
еще не придумал, как прирулить регулировку скорости передачи, понятно, что переменный резистор на аналоговый пин, далее не весь код еще одолел, посматриваю
DOT_TIME = от 25 до 100 будет достаточно, резистора тут под руками нет, попытать )))
Может не надо? Я вот тут подумал, может не в кварце дело у меня.. На измерения аналога уйдет время Если оно еще будет выполняться в цикле, то вообще будет не хорошо, может повлиять на частоту. Потому либо после каждой передачи выход из оснвоного цикла.. Но с другой стороне, ничего нам не должно мешать только в то время, пока передается точка или тире, на следующей паузе можно немного мк и озадачить еще чем...
выдернул с компьютера, там пассивный
100р за 10 шт у китайцев. ссылку дать?
Может не надо? Я вот тут подумал, может не в кварце дело у меня.. На измерения аналога уйдет время Если оно еще будет выполняться в цикле, то вообще будет не хорошо, может повлиять на частоту. Потому либо после каждой передачи выход из оснвоного цикла.. Но с другой стороне, ничего нам не должно мешать только в то время, пока передается точка или тире, на следующей паузе можно немного мк и озадачить еще чем...
в кварце...тем более что в дуине у тебя и не кварц вовсе )))
Кварцы они в дуинах от рободына... у меня в WAVGAT такой же, и тоже частота ниже получается...
Я о вводе регулировки скорости в скетч от DetSimen, задумка есть куда применить его код и, это не Маяк
выдернул с компьютера, там пассивный
100р за 10 шт у китайцев. ссылку дать?
не, у меня этих системников )))
В генераторе для катушки Мишина как раз пассивный используется, у приятеля их есть, но это паяться надо, а тут прям с проводками и пецалками для подключения
Да, собрал твой скетч всё с библиотеками в одну папку, так понимать проще... кое-что поправить правда пришлось, чтобы компилировалось
Да! на таймерах скорость регулируется правильно, строго пропорционально от константы...
А, смотрю, понравилось :) Вот вам ещё, простой св-кв маячок.
01
/*
02
The 16 MHz clock is divided by 10 (that is, 1.6 MHz) and that is used to toggle pin 9 at that rate,
03
giving a frequency of 800 KHz, since one toggle turns the output on, and second toggle turns it off.
04
05
If you hold the Arduino near an AM radio tuned to around 800 KHz you should hear a hissing toggling on
06
and off (like Morse code) as the carrier is turned on and off for 0.5 / 0.3 second intervals.
07
*/
08
09
const
byte
ANTENNA = 9;
10
11
void
setup
()
12
{
13
// set up Timer 1
14
TCCR1A = bit (COM1A0);
// toggle OC1A on Compare Match
15
TCCR1B = bit (WGM12) | bit (CS10);
// CTC, no prescaler
16
OCR1A = 9;
// compare A register value to 10 (zero relative)
17
}
18
19
void
loop
()
20
{
21
pinMode (ANTENNA, OUTPUT);
22
delay (500);
23
pinMode (ANTENNA, INPUT);
24
delay (300);
25
}
26
27
/*
28
The OCR1A variable is related to the frequency.
29
The OCR1A variable is one less than the actual divisor.
30
OCR1A - Frequency
31
15 - 500 khz
32
14 - ~530 khz
33
13 - ~570 khz
34
12 - ~610 khz
35
11 - ~670 khz
36
10 - ~730 khz
37
9 - 800 khz
38
8 - ~890 khz
39
7 - 1000 khz
40
6 - ~1140 khz
41
5 - ~1330 khz
42
4 - 1600 khz
43
3 - 2000 khz
44
2 - ~2670 khz
45
1 - 4000 khz
46
0 - 8000 khz *would not recommend this setting
47
48
The formula is (16÷(OCR1A+1)÷2)×1000 = frequency in khz
49
*/
выставить 1 мегагерц поставить каскад умножения с катушечкой на 7 мегагерц м как раз в любительскои диапазоне
кое-что поправить правда пришлось, чтобы компилировалось
Абисни
Хто бы мог подумать, ага?
Хотя, нет. Я до понедельника сиравно в синей яме, боюсь, что на полноценный диалог меня не хватит. Лучше в понедельник
кое-что поправить правда пришлось, чтобы компилировалось
Абисни
Хто бы мог подумать, ага?
я точно так думал, когда ты предложил сделать на таймерах и я не отказался )))
да всё не помню, мелкие огрехи типа <> такие кавычки на "" такие и еще что-то по мелочи, теперь твой скетч смотрится так
странна, а у меня компилируеца и нигде таких "<>" кавычков нет.
странна, а у меня компилируеца и нигде таких "<>" кавычков нет.
и даже в файле Messages.cpp? )))
видимо у меня барабашка IDE изучает
зы я то в чистой IDE всё пробую, без библиотек
А. Понял, ты про #include <>. Да, есть, поправил
выставить 1 мегагерц поставить каскад умножения с катушечкой на 7 мегагерц м как раз в любительскои диапазоне
Делается проще - в саму Ардуину ставим кварц на 14 и получаем частоты кратные любительским диапазонам.
А. Понял, ты про #include <>. Да, есть, поправил
каоче, пофиг, главна, чтоб работало. Если спросишь, расскажу как другие операции, например, опрос даччиков или верчение моторами или реле встроить в эту карикатуру, ничего не сломав. Или ты сам мальчик башой, догадаешьса?
А. Понял, ты про #include <>. Да, есть, поправил
каоче, пофиг, главна, чтоб работало. Если спросишь, расскажу как другие операции, например, опрос даччиков или верчение моторами или реле встроить в эту карикатуру, ничего не сломав. Или ты сам мальчик башой, догадаешьса?
для начала может энкодер прикрутим?
Сам, это наврядли )))
для начала может энкодер прикрутим?
Нахуа тама энкодер? Если скорость менять - простой потанцометр справица.
для начала может энкодер прикрутим?
Нахуа тама энкодер? Если скорость менять - простой потанцометр справица.
да некошерно, энкодером же скорость можно наращивать кратно 5, с потенциометром, плавно
тебе рассказать, как из плавного интервала сделать дискретный с шагом 5?
А энкодер идея хорошоя, но шаг то может быть любой, хоть 1*10^-15, да и нажатием на кнопку (самого же энкодера) можно поменять будет. В ардуино если не ошибаюсь керамический резонатор. Лежит у меня плата от старого кенвуда, на 430, вот в нем вроде или ГУН, или образцовый генератор на 14 мегагерц. Еще лучше чем у обычного кварца дочность должна быть... Если на выходе логика, то можно внешнее тактирование делать. Но по идее мы должны фузы поменять, иначе все делей или мились будут работать медленнее.
Если это ГУН, то конечно им ничего не потактирвоать, или получится плата с плавно изменяемой частотой.
тебе рассказать, как из плавного интервала сделать дискретный с шагом 5?
подскажи, я не сталкивался с такой задачей
от скольки до скольки скорость меняется?
от скольки до скольки скорость меняется?
в твоих тугриках от 100 до 20 будет за глаза
Миллисекунд? С интервалом 5?
Миллисекунд? С интервалом 5?
да, я так понял процедуру инициализации таймеров эти данными надо делать?
вот матри. В диапаносе 20-100 интервалов по 5 укладываеца 15
(100-20)/5 - 1 = 15
для расчета лучше взять 16 интервалов.
читаем потенциометр (аналоговый порт), получаем значения от 0 до 1023. Теперь простым делением на 64 (сдвигом на 6) мы проецируем интервал 0-1023 на 0-15 (пусь это будет L), прикинь, да?
при 0 у нас задержка будет 100, а при 15 - 25 если написать так: 100-(5*L)
втуляешь полученное значение в таймер и радуешься. При выкрученном влево резисторе, задершка будет максимальна (скорость передачи самая ниская), при полностью вкрученном, задержка самая маинькая - 25, сотвецтвенно скорость передачи самая высокая. пропробуй.
Не, только все начинается. Теперь нужно вводить гистерезис, чтобы на крайних положениях не было дрожания скорости, которая может происходить слишком часто) Вот терь будет интереснее!
она и не будет дрожать (именно в крайних значениях). угадаешь почему?
а вот МЕЖДУ значениями - может дрожать. Решается доворотом чучуть потацометра.
Вопщем, сами чонить поделайте, у мня там уже мидихлориан в морозилке застыл меня ждать. Пора наполнить им кроффь. :) До понедельника.
она и не будет дрожать (именно в крайних значениях). угадаешь почему?
а вот МЕЖДУ значениями - может дрожать. Решается доворотом чучуть потацометра.
Ну это немногоо я костноязычен. Имел ввиду на краях значений, написал на крайних, изменив смысл. Не, ну без гистерезиса все равно не очень Потому нужны небольшие участки, гне изменения бы не происходили, как раз на границе участков значений. Так что, чтобы все было попроще, надо писать свою библиотеку, под аналоговой энкодер, гистререзис в которой задавался бы при подключении библиотеки.
Дубль получился.
она и не будет дрожать (именно в крайних значениях). угадаешь почему?
а вот МЕЖДУ значениями - может дрожать. Решается доворотом чучуть потацометра.
Ну это немногоо я костноязычен. Имел ввиду на краях значений, написал на крайних, изменив смысл. Не, ну без гистерезиса все равно не очень Потому нужны небольшие участки, гне изменения бы не происходили, как раз на границе участков значений. Так что, чтобы все было попроще, надо писать свою библиотеку, под аналоговой энкодер, гистререзис в которой задавался бы при подключении библиотеки.
ну так я это давно понял, когда только подумал про потенциометр, потому и сказал, что энкодер будет попроще
А, смотрю, понравилось :) Вот вам ещё, простой св-кв маячок.
01
/*
02
The 16 MHz clock is divided by 10 (that is, 1.6 MHz) and that is used to toggle pin 9 at that rate,
03
giving a frequency of 800 KHz, since one toggle turns the output on, and second toggle turns it off.
04
05
If you hold the Arduino near an AM radio tuned to around 800 KHz you should hear a hissing toggling on
06
and off (like Morse code) as the carrier is turned on and off for 0.5 / 0.3 second intervals.
07
*/
08
09
const
byte
ANTENNA = 9;
10
11
void
setup
()
12
{
13
// set up Timer 1
14
TCCR1A = bit (COM1A0);
// toggle OC1A on Compare Match
15
TCCR1B = bit (WGM12) | bit (CS10);
// CTC, no prescaler
16
OCR1A = 9;
// compare A register value to 10 (zero relative)
17
}
18
19
void
loop
()
20
{
21
pinMode (ANTENNA, OUTPUT);
22
delay (500);
23
pinMode (ANTENNA, INPUT);
24
delay (300);
25
}
26
27
/*
28
The OCR1A variable is related to the frequency.
29
The OCR1A variable is one less than the actual divisor.
30
OCR1A - Frequency
31
15 - 500 khz
32
14 - ~530 khz
33
13 - ~570 khz
34
12 - ~610 khz
35
11 - ~670 khz
36
10 - ~730 khz
37
9 - 800 khz
38
8 - ~890 khz
39
7 - 1000 khz
40
6 - ~1140 khz
41
5 - ~1330 khz
42
4 - 1600 khz
43
3 - 2000 khz
44
2 - ~2670 khz
45
1 - 4000 khz
46
0 - 8000 khz *would not recommend this setting
47
48
The formula is (16÷(OCR1A+1)÷2)×1000 = frequency in khz
49
*/
при загрузке таймеров этим кодом почему-то уровень сигнала поменьше, до S-5
госспади, проградуируй шкалу потанцометра на середину каждого диапаноса значений и забудь про дребезг. не будут с него значения по +-32 гулять
да как ты с такой математикой замуш то вышел?
Ну как это забудь...
1- случайно попал на границу между значениями
2- ручка потенциометра прокрутилась, и все значения сместились на пол значения
3-При передаче трансивера уровень, наведенный на аналоговый пин оказался достаточным, чтобы изменить его значение.
4- При передаче изменилось напряжение питания микроконтроллера, по причине просадки напряжения, изменив значение напряжения на нужную величину.
5- На не очень новых потенциометров при вращении возможен некоторый дребезг, потому необходимо производить накопление за некоторый, относительно короткий перид вращения, являющийся делением колличества материальных точек на одно положение аналогового энкодера, т.е. резистора, на время прохождение материальной точки. Т.е. делением бесконечно малой величины на бесконечно малую.
6- Вижу еще необходимость предсказать ожидаемую величину по ускорению поворота энкодера, т.к. оно прямо пропорционально рассктоянию, на которое мы хотим повернуть ручку. Пример реализации, комьютерная мышка.
Остальные проблемы думаю будут вытекать из этих, как раз можно решить за выходные.
как раз можно решить за выходные.
Пасха на носу ...
Но для хорошо выполненной программы пяток минут и, всё пучком )))
001
/*
002
Name: Morze.ino
003
Created: 21.04.2019 4:16:26
004
Author: DetSimen
005
*/
006
007
#include <EEPROM.h>
008
#include "Arduino.h"
009
#include "MorzeTable.h"
010
#include "TimerList.h"
011
#include "Messages.h"
012
013
#define toneFreq (800) //частота звука (выбирайте между 600 - 1000Гц)
014
static
uint8_t TXPin = 13;
// пин передаччика
015
int
tonePin = A4;
// выход звука на радиостанцию
016
int
mySpeedPin = A0;
// потенциометр скорости
017
int
mySpeed;
// переменная для потенциометра
018
019
extern
TTimerList TimerList;
// списой таймеров (до 10) паумолчанью
020
021
TMessageList MessageList(12);
// очереть на 12 сапщений
022
023
static
const
int
msg_ReadSerial = 0x100;
// сообщение "Читать Сериал"
024
static
const
int
msg_SendChar = 0x101;
// сообщение "Передать символ (букву)"
025
static
const
int
msg_SendNextBit = 0x102;
// сообщение "Передать следующий бит в букве"
026
027
static
/*const*/
uint32_t DOT_TIME = 35;
// основное время, длительность точки 75 мс, остальные производные
028
static
/*const*/
uint32_t DASH_TIME = 3 * DOT_TIME;
// длительность тире
029
030
static
const
uint16_t REPEAT_TIME = 5000;
// Задержка в мс между повторениями текста, по умолчанию 5 сек.
031
static
const
uint16_t SERIAL_TIMEOUT = 2000;
// если в течение 2000 мс не было данных с сериала, значит приняли всю строку
032
033
static
const
uint8_t MAX_STRING_LENGTH = 128;
// макс длина передаваемой строки
034
035
enum
class
enumTXState :
bool
{ Pause =
false
, Bit =
true
};
036
037
enumTXState TXState = enumTXState::Pause;
// что передаем в данный момент: или бит (точка/тире) или паузу
038
039
THandle hTXTimer = INVALID_HANDLE;
// таймер передаччика
040
THandle hSerialTimer = INVALID_HANDLE;
// таймер таймаута приема из Serial
041
THandle hRepeatTimer = INVALID_HANDLE;
// таймер повтора фразы
042
043
uint8_t TXCurrentMask = 0;
// маска текущего символа
044
uint8_t TXCurrentCode = 0;
// битовый код Морзе текущего символа
045
bool
TXBusy =
false
;
// идет передача бита или паузы
046
bool
TXStopped =
false
;
// передаччик остановлен нахрен. ничего не передаеца
047
048
049
String StringToTransmit;
// строка, которую будем слать
050
uint16_t TransmitCharIndex = 0;
// индекс текущего символа, в этой строке
051
052
053
void
TXOnOff(
const
bool
On) {
// передаччик вкл/выкл
054
digitalWrite(TXPin, On);
055
if
(On) {tone(tonePin, toneFreq);}
else
{ noTone(tonePin);}
056
}
057
058
void
tmrTXTimer(
void
) {
// здесь кончился таймер передачи бита/паузы
059
SendMessage(msg_TimerEnd, hTXTimer);
060
TimerList.Stop(hTXTimer);
// остановим этот таймер
061
}
062
063
void
tmrSerialTimer(
void
) {
// строку приняли до конца
064
SendMessage(msg_TimerEnd, hSerialTimer);
065
TimerList.Stop(hSerialTimer);
// таймер больше не нужен
066
}
067
068
void
tmrRepeat(
void
) {
// таймер повтора кончился, начинаем передавать сначала
069
TransmitCharIndex = 0;
070
TXStopped =
false
;
071
TimerList.Stop(hRepeatTimer);
072
}
073
074
void
sendBit(
const
bool
aBit) {
// передать один бит (точку == false или тире == true)
075
076
TXState = enumTXState::Bit;
// признак: передаем бит
077
078
TXOnOff(
true
);
// ключ на старт!
079
080
TXBusy =
true
;
// передаччик теперя занят
081
082
TimerList.setNewInterval(hTXTimer, aBit ? DASH_TIME : DOT_TIME);
// длительность таймера разная для точки и тире
083
TimerList.Reset(hTXTimer);
// перезапустим его сначала интервала
084
085
}
086
087
void
sendPause(
const
uint8_t kf = 1) {
// передаем паузу длиной в 1 точку по умолчанию
088
TXState = enumTXState::Pause;
089
090
TXBusy =
true
;
// передаччик занят
091
092
TimerList.setNewInterval(hTXTimer, kf*DOT_TIME);
// либо длительность паузы кратна точке в kf раз
093
TimerList.Reset(hTXTimer);
// перезапустим таймер сначала
094
}
095
096
;
void
setup
()
097
{
098
Serial
.begin(115200);
099
100
delay(1000);
// чтоб всё устаканилось к старту
101
102
pinMode(TXPin, OUTPUT);
103
104
TXOnOff(
false
);
// ключ выключен
105
106
// все таймеры создаюца по умолчанию остановленными
107
//
108
hTXTimer = TimerList.AddStopped(DOT_TIME, tmrTXTimer);
// таймер передаччика бит
109
hSerialTimer = TimerList.AddStopped(SERIAL_TIMEOUT, tmrSerialTimer);
// таймер таймаута чтения из Serial
110
hRepeatTimer = TimerList.AddStopped(REPEAT_TIME, tmrRepeat);
// таймер повтора передачи строки
111
112
StringToTransmit.reserve(MAX_STRING_LENGTH);
// хапнем сразу место под строку, чтоб не перераспределять потом
113
StringToTransmit =
"CQ DX UA6EM CQ DX UA6EM QSA? 73! 73! 73! K"
;
// строка для передачи по умолчанию
114
TransmitCharIndex = 0;
115
}
116
117
void
loop
()
118
{
119
if
(
Serial
.available()) {
// если в сериал чота припрыгало
120
SendMessage(msg_ReadSerial);
// пошлем команду прочесть сериал
121
TXStopped =
true
;
// передачу остановим
122
TransmitCharIndex = 0;
// и все индексы и маски обнулим,
123
TXCurrentCode = 0;
// так как после приема будем передавать уже новую строку
124
TXCurrentMask = 0;
125
}
126
// тут читаем потенциометр скорости
127
mySpeed = map(analogRead(mySpeedPin), 0,1023,0,15);
128
DOT_TIME = 100-mySpeed*5;
129
DASH_TIME = 3 * DOT_TIME;
130
131
if
((not TXBusy) and (not TXStopped)) {
// если передаччик не остановлен и не занят передачей бита
132
133
if
(TXCurrentMask > 0)
// если маска еще до конца не сдвинулась
134
{
135
SendMessage(msg_SendNextBit);
// передать следующий бит знака
136
}
137
else
138
{
139
SendMessage(msg_SendChar);
// знак кончился, начать передавать след. символ
140
}
141
}
142
143
144
if
( not MessageList.Available())
return
;
// если сапщений в очереди нет, выходим
145
146
TMessage msg = MessageList.GetMessage();
147
148
switch
(msg.Message)
149
{
150
151
case
msg_TimerEnd: {
152
if
(msg.LoParam == hSerialTimer) {
// кончился таймер приёма по сериал
153
TXStopped =
false
;
// можно стартовать передаччик, есличо
154
break
;
155
}
156
if
(msg.LoParam == hTXTimer) {
// кончился таймер передачи бита/паузы
157
TXBusy =
false
;
// можно передавать следующий
158
159
if
(TXState == enumTXState::Bit) {
// если передавали бит, передадим 1 паузу
160
TXOnOff(
false
);
// выключим ключ
161
TXCurrentMask >>= 1;
162
if
(TXCurrentMask>0) sendPause();
else
sendPause(3);
// а если знак кончился, то 3 паузы
163
}
164
165
break
;
166
}
167
168
break
;
169
}
170
171
case
msg_SendNextBit: {
// передаем след. бит (точка/тире)
172
sendBit(TXCurrentCode & TXCurrentMask);
173
break
;
174
}
175
176
case
msg_ReadSerial: {
// чтение из сериала
177
if
(!TimerList.isActive(hSerialTimer)) {
// если таймер таймаута остановлен
178
StringToTransmit =
""
;
// значить читаем новую строку
179
TransmitCharIndex = 0;
180
}
181
StringToTransmit +=
char
(
Serial
.read());
// берем символ из сериал и вклеиваем в строку
182
TimerList.Reset(hSerialTimer);
// перезапускаем таймер таймаута (помнишь? 2 секунды после ПОСЛЕДНЕГО символа)
183
break
;
184
}
185
186
case
msg_SendChar: {
// послать знак
187
if
(TransmitCharIndex < StringToTransmit.length()) {
// если строка еще не кончиилась
188
char
c = StringToTransmit[TransmitCharIndex++];
// взять символ
189
if
(c !=
' '
) {
// если не пробел, то
190
TXCurrentCode = getMorzeCode(c);
// по нему взять код Морзя см. MorzeTable.cpp
191
TXCurrentMask = getSymbolMask(getMorzeCode(c));
// и маску см. MorzeTable.cpp
192
}
193
else
sendPause(7);
// пробел между словами - передаем паузу в 7 точек
194
}
195
else
{
// если строка кончилась
196
TXStopped =
true
;
// остановим передачу
197
TransmitCharIndex = 0;
// вернем указатель на 0 символ строки
198
TimerList.Reset(hRepeatTimer);
// и запустим таймер для REPEAT
199
}
200
break
;
201
}
202
Serial
.print(
"Unknown message code: 0x"
);
Serial
.println(msg.Message, HEX);
203
break
;
204
}
205
206
}