Обсуждаем приемники, передатчики, радиомикрофоны, жучки, генераторы, ВЧ-усилители, антенны и прочее радиохозяйство
Ответить

Re: Радиоуправление. Переходим на МК.

Чт ноя 17, 2016 19:49:43

Пойдёт)) Главное герметичность.. что бы через втулки вода не затекала...))
А где контейнеры? и как мы будем рыбок кормить?)) Ещё надо глянуть механику...
:tea:

Re: Радиоуправление. Переходим на МК.

Пт ноя 18, 2016 21:30:23

Продолжаю осваивать радиоуправление.

Заказ деталей для сборки радиомодулей по статье с данного сайта в процессе. А вот готовые наборы приемников и передатчиков на 433 МГц с Али, уже приехали.

Дабы не затягивать, хочу потренироваться на них, понять суть передачи данных.

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

Прочитав статьи, и немного покрутив приемник с передатчиком, думаю как это сделать грамотно: передатчик очень хорошо принимает шумы, а из-за распространенности устройств на этой частоте, нужно как то выходить из данной ситуации.

Мои мысли: N мс подача высокого уровня на вход данный передатчика, далее передачи по битам нужной команды управления, и передача команды (тоже определенный набор бит) завершения сеанса.

Скажите, правильно ли я рассуждаю?

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 13:44:43

Если хотите подробно всё разобрать, то нужен осциллограф или другое устройство для записи сигнала...
divisоr писал(а):хочу реализовать протокол передачи и получения данных.

Да всё уже придумано до нас)) Посмотрите как сделано в заводских модулях... Алгоритм у всех стандартный.

1- передатчик передаёт преамбулу. Можно N мс подача высокого уровня на вход данный передатчика, но лучше стандартную преамбулу - 101010101... , при этом приёмник работает лучше и дальность связи больше))

2- после преамбулы передатчик передаёт адрес приёмника. Например 11110000... Приёмник принимает преамбулу и адрес 101010101.11110000.... Если адрес совпадает, то приёмник дальше принимает команду. Если адрес не совпадает, то приёмник ничего не делает... )) При этом все приёмники и передатчики могут работать на одной частоте 433... и никто никому не мешает))

Заводские модули не передают "завершения сеанса", т.к. это не имеет смысла. Вместо этого передатчик и приёмник договариваются заранее, сколько передатчик будет передавать бит, соответственно столько и приёмник будет принимать бит.

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 17:53:04

roman.com, я согласен, есть много готовых решений, но я хочу понять сам принцип, поэтому и делаю с "нуля".

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

Может ввести такие условные команды?

Для передатчика:
sendHighLvl - установка нужного бита (пин микроконтроллера, соединенный с пином Data передатчика) в 1;
sendLowLvl - установка нужного бита в 0;
delay - пауза на N мс.

Как Вы считаете, есть смысл использовать микросекунды (_delay_us), или интервал 1 мс будет подходящим?

Делаю на ATmega8 с F_CPU 8000000UL.

Тогда 101010101 будет передаваться алгоритмом:

Код:
//
for (int i = 0; i < 4; i++ ) {
//
sendHighLvl();
//
delay(1);
//
sendLowLvl();
//
delay(1);
}
//
sendHighLvl();
//
delay(1);


Правильный ход мыслей? :roll:

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 18:42:16

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

Преамбула 10101010 - величина постоянная. Тогда какой смысл использовать для преамбулы переменные?

Тогда 101010101 будет передаваться алгоритмом:

for (x=0;x<4;x++) {
PORTB.1=1; // выход Data TX
delay_ms(1);
PORTB.1=0; // выход Data TX
delay_ms(1);
};

Пауза delay_ms(1); зависи от скорости передачи. Импульс 1 мс - частота 500 Герц. Для сверхрегенератора пойдёт)) Но можно и меньше... например delay_us(497); тогда частота будет точно 1 кГц - стандартная частота например для всяких китайских радиоуправляемых игрушек))
Последний раз редактировалось roman.com Сб ноя 19, 2016 21:42:01, всего редактировалось 1 раз.

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 19:04:17

roman.com, я много чего не понимаю в радиоуправлении, а в статьях приводят уже готовый вариант.

Как например делается согласование (синхронизация)?

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

Идет пакет с преамбулой: 10101010.

Микроконтроллер приемника должен висеть в цикле, тогда?

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

Код:
//
while (PORTB.1 != 1) do {}
//
delay_ms(1);

//
for (x=0; x<3; x++) {
//
if (PORTB.1 != 0) return 0;
//
delay_ms(1);
//
if (PORTB.1 != 1) return 0;
//
delay_ms(1);
}

//
if (PORTB.1 != 0) return 0;
//
delay_ms(1);

//
return 1;


И эту проверку в цикле главного кода:
Код:
//
while (!checkPreambula()) do {}


Или нет?

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 20:42:52

roman.com писал(а):А где контейнеры? и как мы будем рыбок кормить?)) Ещё надо глянуть механику...

Эти части есть. Редуктор от самописца с привинченным двигателем от магнитофона, бункер в проекте с заготовкой материалов. НО пока нет управления нет развития дальше, и не будет этот проект не один.

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 21:23:15

MASIK писал(а):НО пока нет управления нет развития дальше...

А почему у нас ещё нет управления?))
divisоr писал(а):Как например делается согласование (синхронизация)?

Вот...)) Один из самых сложных и интересных вопросов... Синхронизация по преамбуле 10101010...
Последний раз редактировалось roman.com Вс ноя 20, 2016 19:09:30, всего редактировалось 1 раз.

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 21:50:06

roman.com, хорошо, тогда с 11111111, код синхронизации для приемника:

Код:
//
while (PORTB.1 != 1) do {}

//
timeStart = millis();

while (PORTB.1 == 1) do {}

//
timeEnd = millis();

//
if (timeEnd - timeStart < 8) return 0; else return 1;

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 22:07:15

Синхронизация с 11111111 не работает в шумах... только при хорошем сигнале (без шумов).

timeStart = millis(); что это ...
Последний раз редактировалось roman.com Сб ноя 19, 2016 22:21:03, всего редактировалось 1 раз.

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 22:25:57

roman.com, правильно ли я Вас понял, что нужно не 11111111, а половину отправлять - 1111?

Добавлено after 6 minutes 21 second:
roman.com писал(а):timeStart = millis(); что это ...



Инициализация переменной - количество секунд, когда с модуля приемника получена 1.

Потом, замер времени, когда приемник получил 0.

И если, разница < 8 мс, то это не наш пакет 11111111.

Или синхронизацию не так нужно делать?
Последний раз редактировалось divisоr Сб ноя 19, 2016 22:30:12, всего редактировалось 1 раз.

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 22:29:19

лучше наверно писать алгоритм, а в программе можно реализовать по разному.. кому как удобней писать))
8 выборок через каждые 1 мс... "1" > "1" > "1" > "1" > "1" > "1" > "1" > "1" = 11111111
Последний раз редактировалось roman.com Вс ноя 20, 2016 19:10:43, всего редактировалось 2 раз(а).

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 22:36:39

roman.com, я из Вашего кода понял, что вы замеряете, весь ли интервал времени (246 мкс) был 1, или это шум, так?

А delay разве не нужно?

Код:
//
if (PINB.0==1) {

//delay_us(1)?

//
d++;


Добавлено after 2 minutes 43 seconds:
замер времени, когда приемник получил 0... ? Зачем нам измерять время... ? Я обычно делаю по выборкам... 8 выборок через каждые 1 мс... "1" > "1" > "1" > "1" > "1" > "1" > "1" > "1" = 11111111


Можно. Как альтернативный вариант, для упрощения кода...

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 22:39:44

Можно так: 8 выборок через каждые 1 мс... "1" > "1" > "1" > "1" > "1" > "1" > "1" > "1" = 11111111
delay_ms(1)
if (PINB.0==1) {
d++;
};
Последний раз редактировалось roman.com Вс ноя 20, 2016 19:11:12, всего редактировалось 3 раз(а).

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 22:45:19

Завтра буду тестировать тогда :)

У Вас нет литературы на такую тему? А то, я только статьи с готовыми примерами видел...

Добавлено after 3 minutes 40 seconds:
Забыл спросить, Вы под какую частоту микроконтроллер настроили?

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 22:47:39

mega8 кварц 4 МHz
Последний раз редактировалось roman.com Вс ноя 20, 2016 19:12:14, всего редактировалось 4 раз(а).

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 22:57:23

DCLK это опорная частота что-ли? :roll:

Re: Радиоуправление. Переходим на МК.

Сб ноя 19, 2016 23:14:51

Да, DCLK это частота тактового генератора... тоже самое что CLK в SPI.

Re: Радиоуправление. Переходим на МК.

Вт ноя 22, 2016 00:28:17

И что у нас тут...
MASIK писал(а):в лучшем случае можно применить динамическую индикацию, выйдет 3 индикатора. Тут вопрос, а хватит память мк.

хватит )) ещё много осталось свободной памяти )) Динамическая индикация:
PCM-256-nRF24L01+ рабочий.rar
(28.85 KiB) Скачиваний: 238

А вообще... нужен нормальный LCD. У нас много информации...

Ещё в тему)) Радиомодуль. Дальность до 500 метров (проверено).
1.jpg
(49.27 KiB) Скачиваний: 466

Как пишут на разных сайтах... дальность можно увеличить примерно в два раза, используя вот такую антенну (пока не проверял):
3.jpg
(46.56 KiB) Скачиваний: 474

4.jpg
(42.77 KiB) Скачиваний: 313

Re: Радиоуправление. Переходим на МК.

Вт ноя 22, 2016 22:18:44

Так что можно рисовать печатку или немного подождать.
roman.com писал(а):А вообще... нужен нормальный LCD. У нас много информации...

Можно.
Ответить