Радиолюбительский Маяк на arduino nano

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

работает как часы, скорость не скачет и без гистерезиса )))

Дед чесслово не подглядывал, писал сам, а получилось как ты сказал )))
Тока не говори, что это подсознание сработало, после прочитанного...

Samid777
Offline
Зарегистрирован: 24.04.2019

Ну это само собой)) Ситуацию, в которой спорость бы перескавивала между соседними значениями еще нужно постараться создать, умудриться еще резистром попасть так. Разве что многооборотным выйдет. 

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

По уму так не делаеца. :(

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

DetSimen пишет:

По уму так не делаеца. :(

что не так?

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

Заводим соощение 

const int msg_ReadSensors = 0x105;

Заводим еще один таймер

THandle hSensorRead = INVALID_HANDLE;

в сетапе взводим его на 100 миллисекунд

hSensorRead = TimerList.Add(tmrSensorRead, 100);

Пишем функцию отклика на него

void tmrSensorRead(void){

  SendMessage(msg_ReadSensor);  // пхаем в очередь сообщение на чтение потанцометра

}

в лупе добавляем к switch

case msg_ReadSensor:{

uint8_t newdottime = .....  // тут все твои чтения и вычисления

if (newdottime != DOT_TIME){   // меняем ТОЛЬКО если значения РЕАЛЬНО ИЗМЕНИЛИСЬ

  DOT_TIME = newdottime;    

  DASH_TIME = 3*DOT_TIME;

}

break;

}

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

идея понятна, всё остальное тоже через таймер?

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

ua6em пишет:

идея понятна, всё остальное тоже через таймер?

Можно и НЕ через таймеры, НО через очередь. Крайне желательно. 

Green
Offline
Зарегистрирован: 01.10.2015

Не знаю как насчёт маяков, но мне как то с Великобританией приходилось работать на QRPP (менее 1 вт).) При том что дома обычная верёвка была.)

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

DetSimen пишет:

в сетапе взводим его на 100 миллисекунд

hSensorRead = TimerList.Add(tmrSensorRead, 100);

 не взлетело!

Взвод таймера ломает всю логику, не могу понять, код привести?

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

Green пишет:

Не знаю как насчёт маяков, но мне как то с Великобританией приходилось работать на QRPP (менее 1 вт).) При том что дома обычная верёвка была.)

 от нас скачёк на британию плохой, за пятном, а на 10-ке на 1 ватт во время прохода и американцы были

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

Я пока не рядом с компом. Пджди, вечером разберемся

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

Или пришли мне код внапочту

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

DetSimen пишет:
Я пока не рядом с компом. Пджди, вечером разберемся

ок

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

отослал

Green
Offline
Зарегистрирован: 01.10.2015

ua6em пишет:

 от нас скачёк на британию плохой, за пятном, а на 10-ке на 1 ватт во время прохода и американцы были

Вот как бы не на 7-ке было, но утверждать не буду.)
Относительно американцев, помнится только соорудили log yagi за первый час получислось 85 qso, в основном янки, некоторые оценивали 599+40db. Правда, 1КВ было на выходе.

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

прикрепи, пож-та, сам файл ino вложением.

 

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

Позно. Я уже набит мидихлорианами. Ночью паматрю. :-)

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

У нас тут хаашо, +3, иконы битлов, ладан, гашыш. :-)  Мяса жарица, стаканы звенят, сдвигаясь, мелодично, радуют слух и желудок. :-)  да и коть счастлив. 

Мышей жреть. Сосецких. :-)

Green
Offline
Зарегистрирован: 01.10.2015

+3 хаашо... Много ли человеку надо. У нас +23, а ветер холодный, понимаешь ли...)

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

Сегодня снег выпал, в понед. -8 в прогнозе. А вы говорите...

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

Аптамуш, не надо бездумно копировать, надо копировать вдумчива. В этой строке 

  hSensorRead = TimerList.Add(tmrSensorRead, 100); // таймер опроса потенциометра скорости опрашиваем раз в 0.1 секунды (на этой строке валится)

поменяй местами функцию и интервал местами, от так 

  hSensorRead = TimerList.Add(100, tmrSensorRead); 

и сё. 

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

И не стыдно тебе по таким пустякам гонять старого, бальнова человека?  :) 

Лучше б рассолу прислалъ....

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

DetSimen пишет:

И не стыдно тебе по таким пустякам гонять старого, бальнова человека?  :) 

Лучше б рассолу прислалъ....

так я сам не новый )))
я жеж тебе верил, как себе, что ты в своих текстах не можешь неправильно написать, нет подумать о возрасте - после 50 человеку свойственно переставлять местами...даже из реплик на этом сайте можно сразу сказать кому и за сколько )))
Насчет рассола, ты жеж знаешь, он у нас позиционируется как как лучший рассол всех времён и народов, так сказать ЭТАЛОН РАССОЛА на планете земля, а с тех пор как в USA на рассол бум, он здесь идёт на вес золота )))

PS я то думал, что таймера переменными пересеклись, фуф, отлегло...

ЗЗЫ выяснился дефект фикции - на самой малой скорости пропускает знаки (((

нашёл!!!

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

выяснилось - будет, но значительно меньше...видимо из-за асинхронности таймеров...

а если зацепиться за loop этих артефактов нет совсем, на любых скоростях

Все твердят, точки бифуркации, точки бифуркации...на них видимо скетч и напарывается во временных отрезках...
как там у тебя с этим с библиотекой таймеров, как обходишь, как выставляются приоритеты???

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

sadman41 пишет:

Сегодня снег выпал, в понед. -8 в прогнозе. А вы говорите...

 а у нас вчера в тени +30 было

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

всё таки точки буфуркации в таймерах видимо имеют место быть...
Вот так значительно лучше
 

1hSensorRead = TimerList.Add(113,tmrSensorRead); // таймер опроса потенциометра скорости опрашиваем раз в 0.113 секунды (на этой строке уже не валится)
2uint8_t newdottime = 101 - map(analogRead(mySpeedPin), 0,1023,0,15)*5; // тут все чтения и вычисления

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

DetSimen пишет:

Ой.  Забыл про саафтара.  Подтверждаю, понужал меня не спать изо всех сил. 

Судя по аватару, это и есть автор.

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

Выставь пока таймер опроса потанцометра на 103 мс. все остальное завтра. 

А вапще, третий таймер можно выкинуть, а SendMessage для аналогово чтения влепить в конец функции sendPause. 

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

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

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

С этим я разбираюсь. 

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

DetSimen пишет:

С этим я разбираюсь. 

вот это я тебя озадачил )))

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

Запусти у себя 

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

потом интервалы поменяй на вот так 

и последи.  Тама все интервалы пересекаюца, не будет ли пропусков где. 

У мня нет. 

 

Котъ озадачен и негодуэ.

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

Се, я пойду с трудящимися солидарничать. Ищите мня после 12-го. 

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

DetSimen пишет:

Се, я пойду с трудящимися солидарничать. Ищите мня после 12-го. 

ни чё се, а я до компа только добрался )))

test1
 

test-2
 

 

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

ну дак у тебя тоже в бифуркациях не пропускает. Тогда я не понимаю. 

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

DetSimen пишет:

ну дак у тебя тоже в бифуркациях не пропускает. Тогда я не понимаю. 

если функция опроса датчика скорости стоит в loop тоже не пропускает )))
Особенно сказывается когда выставляешь минимальную скорость, может это подскажет что-то

как вариант - потеря истинного указателя на символ для передачи, он забегает вперёд???

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

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

Ну тогда сделай как я в #127 говорил про третий таймер

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

DetSimen пишет:

Ну тогда сделай как я в #127 говорил про третий таймер

съедает, иногда паузы между знаками иногда буквы

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

Ну не знаю тогда. Седня чота думается плохо

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

DetSimen пишет:

Ну не знаю тогда. Седня чота думается плохо

так оно и понятно, шашлычок в маринаде подходит небось

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

У нас -3, мы с котяном дома. 

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

DetSimen пишет:

У нас -3, мы с котяном дома. 

у нас +21, я пока дома, лежу на гвоздях

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

Короче, это надо у аксакалов спрашивать.  Если оне снизойдут, канеш.  Вапще не удивлюсь, если в моих таймерах и очередях всякая хня понаписана. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Вы про реализацию изменеия скорости передачи на потенциометре? 

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

qwone пишет:

Вы про реализацию изменеия скорости передачи на потенциометре? 

Нет

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

DetSimen пишет:

qwone пишет:

Вы про реализацию изменеия скорости передачи на потенциометре? 

Нет

 у меня большое подозрение, что два раза уменьшается указатель на элемент строки при прерывании таймером, чтение значения с потенциометра и установка значения скорости при вынесении процедуры в loop отрабатывает безукоризненно!!!
так как иногда пропускает и пробел тоже
Если буква строки взята в отработку, то выдаёт её код азбукой морзе правильно, не усекает

с другой стороны, фунция имеет рандомный глюк, вот прямо имитирует работу оператора, захочешь такую написать - замаешься )))

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

Вынеси в loop. Я сиравно пью до 12-го. 

и попробуй не map() а 

1uint8_t newdottime = 100 - 5*(analogRead(mySpeedPin)>>6); // тут все твои чтения и вычисления

 

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

DetSimen пишет:

Вынеси в loop. Я сиравно пью до 12-го. 

и попробуй не map() а 

1uint8_t newdottime = 100 - 5*(analogRead(mySpeedPin)>>6); // тут все твои чтения и вычисления

поигрался с опциями компилятора, вот так при получасовом тесте на минимальной скорости глюков не заметил

ЗЫ рано обрадовался, начал лыгать на больших скоростях

PPS изменил выкинув map 5 минут полёт нормальный пытаю на других скоростях, неужели в ней была вся проблема? (Нет, поигравшись со скоростями нашёл такое положение, что чётко во втором CQ всегда пропускает С и эта скорость равна 30 открыл-закрыл монитор порта и глюк исчез, чудеса)))
 

 

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

нууу, у мня идей больше неть.  бери, значить, другой код маяка. 

вот эту строчку проверь внимательно, нет ли ашыбок

006 #pragma GCC otimize ("-Os") //где х - 0, 1, 2, 3, fast, g, s - уровень оптимизации

ты и default потерял в 219 строчке.  

конец перепишы вот так

01case msg_ReadSensor: {
02    uint8_t newdottime = 100 - 5*(analogRead(mySpeedPin)>>6); // тут все твои чтения и вычисления
03    if (newdottime != DOT_TIME) {   // меняем ТОЛЬКО если значения РЕАЛЬНО ИЗМЕНИЛИСЬ
04        DOT_TIME = newdottime;
05        DASH_TIME = 3 * DOT_TIME;
06        Serial.print("Скорость = ");
07        Serial.println(newdottime);
08    }
09    break;
10}
11default:
12 Serial.print("Unknown message code: 0x"); Serial.println(msg.Message, HEX);
13 break;
14}

 

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

DetSimen пишет:

нууу, у мня идей больше неть.  бери, значить, другой код маяка. 

Не!!! "Русские не сдаются"!!!
Я тут явную связь выявил, стоит открыть-закрыть монитор порта и скетч начинает работать правильно...
Надо смотреть обработку сериала, он правда что делает, при открытии монитора порта - резетит но с открытым последовательным... потом закрываю и всё работает как надо...

уменьшил скорость порта до 9600, пытаю, пока работает как надо, теперь надо строку вводимую в мониторе порта сохранить в еепром и забирать оттуда, если было сохранение, попробую сам прикрутить