Самодельный передатчик (часть 2)
Краткий отчёт о приёмнике и передатчике на модулях nRF24L01+
- Что хотелось: при включении передатчика он должен просмотреть эфир и найти 3 свободных канала, и в составе пакета данных передать их в приёмник
Получилось: как раз не получилось: свободные каналы определить не удалось, поэтому передача идёт на 4-х каналах по очереди в течении периода
посылки передатчика. Причём если каналов меньше 6 , то передача только на 3 и менее каналах.
В результате алгорить такой: при прошивке приёмника и передатчика нужно задать одинаковые частоты(каналы) и Code_1 Code_2 , где коды осуществляют
привязку приёмника к передатчику. С изменением адреса самой nRF пробовать не стал, так как там есть нюансы.
В результате передатчик анализирует входные импульсы, по первому фронту импульса начинает отсчёт длительности каналов и запоминает их. После в паузе данные копируются в буфер, из котрого и передаются в nRF. Передача осуществляется на 4-х каналах по очереди в моменты приёма входных импульсов
от кодера и соответствуют 1, 3, 5 и 7 импульсу. Передаются 32 байта, хотя используются только 22. Максимум 8 каналов, хотя можно и увеличить…
Приёмник принимает данные, проверяет совпадение Code_1 и Code_2, после чего выводит канальные импульсы. Для записи FileSafe нужно замкнуть и разомкнуть
на корпус соответствующую ножку ( в проекте PD2 ). Если нужного сигнала некоторое время нет, то приёмник начинает последовательно переключаться на другие каналы.
Если сигнала нет около 1,5 сек, то включается FileSafe. При появлении сигнала всё продолжает работать в обычном режиме. Общая задержка от приёма
посылки кодера передатчиком до вывода канальных импульсов составляет около 45 мс.
Вполне возможно сделать вход передатчика не PPM, а цифровой или универсальный. Но я не потяну… т.к. надо сопрягать с кодером.
Все ножки МК можно переназначить, кроме MOSI , MISO , SCK и RESET.
Схемы, проекты с прошивками и исходниками, примеры плат прилагаются
Проверка на дальность ( но сквозь дом ) показала идентичность с аппаратурой Hobby King .
На открытой местности не пробовал.
Рассмотрю все предложения и замечания!
вопросик про алгоритм
а бинд чисто выбором каналов?
если другой передатчик будет охватывать один из каналов то будет идти управление от другого передатчика?
насколько я понимаю в системах передачи данных при использовании канального кодирования передают буффер кусочками на все используемые каналы а затем на приемнике все это склеивают в последовательность и проверяют контрольную сумму
у вас просто дубляж по всем каналам одинаковых данных?
а бинд чисто выбором каналов? Не только, ещё и двумя байтами данных - Code_1 и Code_2
если другой передатчик будет охватывать один из каналов то будет идти управление от другого передатчика?
Если приёмник не сможет правильно принять данные, то он перейдёт на другой канал. Время работы на одной частоте около 1,5 мс.
насколько я понимаю в системах передачи данных при использовании канального кодирования передают буфер кусочками на все используемые каналы а затем на приёмнике все это склеивают в последовательность и проверяют контрольную сумму
у вас просто дубляж по всем каналам одинаковых данных? Да , просто дубляж.
а передаваемые данные проверяются на предмет правильности передачи? например контрольная сумма переданного буффера или это обеспечивает радиочип аппаратно?
простите что заваливаю вопросами, очень уж интересная разработка.
я планировал нарисовать тоже нечто похожее, но ряд озвучиваемых вопросов пока не определился как решать
Да, используется контрольная сумма в два байта - аппаратно.
hello Denn
you can post video your Project nrf24l01 , control servo or esc brushless ?
it can work 1km? atmega8 use crytal 8mhz ?
it is suitable for all TX have output PPM ?
I not have video.
Hobby King fine work more 800 m. I hope also 800 - 1000 m.
Crystal is 8 MHz.
Yes, only PPM.
hi Denn
i hope you can post video here. i want to see it work . I think that project great .
thank you
Cheers
радиомодули заказаны, как приедут обязательно поэксперементирую с вашей прошивкой
hello Denn
i did circuit same you, but it do not work, have not signal from Pin atmega8 of RX.(
Are LED bright or no?
Led off, i use ppm from TX flysky 9ch .
if you can post a video , or some picture i think i will see it work how
thanks
TX and RX work max 8 channels
yes,i know it is work 8ch
but problem is have not signal output from RX
Test a IRQ signal on RX nRF
Видео работы комплекта на nRF24L01+ 91 МБ
video.yandex.ru/users/denl-2013/view/1/
Я правильно понял - в приёмнике простая дешёвенькая NRF-ка за 2 бакса, а в передатчике что-то серьёзное?
Я правильно понял - в приёмнике простая дешёвенькая NRF-ка за 2 бакса, а в передатчике что-то серьёзное?
похоже на обычный nrf24l01+pa+lna 3.1
ru.aliexpress.com/item/…/731945644.html (вродебы от18 баксов на ебее)
Всем доброго дня.
Начал писать ПО кодера для автомобильной аппы (3 канала), камень ATMega32, LCD 5110, модули TX RX от хоббикинга 6-ти канального. приёмник 3 канала.
В чем собственно просьба помощи, расскажите пожалуйста как программно сформировать PPM сигнал и настроить таймеры, еще какими должны быть выходными данными с каждого канала для последующего формирования РРМ.
Спасибо.
есть под ардуино
//this programm will put out a PPM signal
//////////////////////CONFIGURATION///////////////////////////////
#define chanel_number 8 //set the number of chanels
#define default_servo_value 1500 //set the default servo value
#define PPM_FrLen 22500 //set the PPM frame length in microseconds (1ms = 1000Вµs)
#define PPM_PulseLen 300 //set the pulse length
#define onState 1 //set polarity of the pulses: 1 is positive, 0 is negative
#define sigPin 10 //set PPM signal output pin on the arduino
//////////////////////////////////////////////////////////////////
/*this array holds the servo values for the ppm signal
change theese values in your code (usually servo values move between 1000 and 2000)*/
int ppm[chanel_number];
void setup(){
//initiallize default ppm values
for(int i=0; i<chanel_number; i++){
ppm[i]= default_servo_value;
}
pinMode(sigPin, OUTPUT);
digitalWrite(sigPin, !onState); //set the PPM signal pin to the default state (off)
cli();
TCCR1A = 0; // set entire TCCR1 register to 0
TCCR1B = 0;
OCR1A = 100; // compare match register, change this
TCCR1B |= (1 << WGM12); // turn on CTC mode
TCCR1B |= (1 << CS11); // 8 prescaler: 0,5 microseconds at 16mhz
TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt
sei();
}
void loop(){
//put main code here
static int val = 1;
ppm[0] = ppm[0] + val;
if(ppm[0] >= 2000){ val = -1; }
if(ppm[0] <= 1000){ val = 1; }
delay(10);
}
ISR(TIMER1_COMPA_vect){ //leave this alone
static boolean state = true;
TCNT1 = 0;
if(state) { //start pulse
digitalWrite(sigPin, onState);
OCR1A = PPM_PulseLen * 2;
state = false;
}
else{ //end pulse and calculate when to start the next pulse
static byte cur_chan_numb;
static unsigned int calc_rest;
digitalWrite(sigPin, !onState);
state = true;
if(cur_chan_numb >= chanel_number){
cur_chan_numb = 0;
calc_rest = calc_rest + PPM_PulseLen;//
OCR1A = (PPM_FrLen - calc_rest) * 2;
calc_rest = 0;
}
else{
OCR1A = (ppm[cur_chan_numb] - PPM_PulseLen) * 2;
calc_rest = calc_rest + ppm[cur_chan_numb];
cur_chan_numb++;
}
}
}
похоже на обычный nrf24l01+pa+lna 3.1
ru.aliexpress.com/item/…/731945644.html (вродебы от18 баксов на ебее)
Именно оно.
Hi Denn
here is layout TX RX ,i use eagle .😉