Самодельный передатчик (часть 2)
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 .😉
hi minhthien1988
could you post the eagle files?
hello Denn
i can not understand why it do not work .
project Nrf24l01 , led only flash, it can stop then turn off . have you a shematic complete ? where is pin 32 atmega8 of RX connect ?
pin 32 atmega8 of RX is input for filesafe. it connect to ground and disconnect for write filesafe.
pin 32 atmega8 of RX is input for filesafe. it connect to ground and disconnect for write filesafe.
ok Denn , add a few question to i can clear .
If i use tx create PPM is 2 channel ( tx of car ) , Circuit can work with 2 signal output ? Or only work with PPM 8 channel
And Pin IRQ my nrf24l01 name is CRQ , Is it difference ?
You can post few picture file Layout of TX ,RX by file PDF ? what are you use software to draw ?
thank a lot .
Cheer
If TX have 2 channels PPM, TX nRF will send 32 bytes with 8 channels, but 3…8 channels is wrong. TX will transmit only 1 frequency - F1. I not know about IRQ and CRQ.
thanks Denn
mean is if i want use any channel ,i have to change code to suitable amount channel : Không chắc chắn:
EX , 2 channel is change code TX ,RX for 2 channel
No, code not change.
Вопрос к MSV: Сергей, а в вашей прошивке в2 можно в течение периода всего цикла ( 20 - 22 мс ) несколько раз передавать данные с интервалом 1-2 мс ?
Если речь о nRF24L01, то там сам модуль настроен на передачу до 8 повторов при неполучении подтверждений. Суммарное время передачи + время ожидания подтверждения в этих 9-ти попытках получается чуть меньше 20мс.
Нет, я имел ввиду как у меня, без retransmit-ов. И на разной частоте.
Денис, какой у тебя модуль? И зачем так часто передавать? Частоту можно менять каждые 20мс…
Ну а в принципе если используются прерывания от модуля, то можно по ним передачу включать. Правда есть вероятность что PPM будет подергиваться, но он при работе с цифровыми модулями особо и не нужен…
Просто я подумал, что 4 канала на передачу более помехоустойчивые, чем один 😃 А если частоту менять через 20 мс может быть начнутся подёргивания, если канал занят. На передачу использую модуль с усилителем, на приём стандартный nRF24L01+ . Про прерывания понял, буду иметь ввиду. Спасибо!
Привет форумчанам! Большое спасибо за разработанный вами кодер.
Valera69 спасибо за идею самодельных джойстиков. 2 года назад я собрал передатчик и приёмник используя не из самодельного только трансиверы Xemix DP-1203 868мгц. Из кодера сигнал PPM подается на модуль из ATmega48 и DP1203. В приёмнике стоит также DP1203 и ATmega8A.
В DP1203 данные идут с МК в последовательном виде в отличии от SPI в nRF24L01. Правда по каналам я не скакал. В передатчике анализировал пачку PPM из кодера и одновременно гнал в эфир данные по предыдущей пачке. В приёмнике был режим FailSafe. 2 модуля DP1203 мне тогда приятель подарил. Потом я на Corony перешел. Больно дорого обходились бы приёмники для последующих моделей (DP1203 стоила 1500р). Недавно попробовал работать с nRF24L01 и СС1101. На ebay они не дорогие.
Гениально!
Корпус кисточкой что ли выкрашен?