, ,
. Arduino IDE arduino pro mini nrf24l01+ ( XN297, nrf24l01) , PPM . .
Eachine H8 mini Radiolink AT9. .
MSP430 , 3.3 , nrf24l01 3.3 , MPS430 - . 3V3, OUT, GND, .
, , = , .
IDE Energia ( Arduino IDE MSP430 TI) , . , . , .
nRF24_multipro.ino include’. atomic EEPROM.
atomic
#include <util/atomic.h>
void update_ppm()
ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
__disable_interrupt();
__enable_interrupt();
ATOMIC_BLOCK() , «» , , ATOMIC_BLOCK().
EEPROM
MSP430 EEPROM , FLASH MspFlash.
#include <EEPROM.h>
MspFlash (Sketch->Import Library…->MspFlash), FLASH
#define flash SEGMENT_D
void selectProtocol()
else
current_protocol = constrain(EEPROM.read(ee_PROTOCOL_ID),0,PROTO_END-1);
EEPROM.update(ee_PROTOCOL_ID, current_protocol);
Flash.write(flash+ee_PROTOCOL_ID, & current_protocol,1);
(, ).
void set_txid(bool renew) , . FLASH . FLASH 1, ( 1). (set_txid) selectProtocol, .
:
void set_txid(bool renew)
{
uint8_t i;
for(i=0; i<4; i++)
transmitterID[i] = EEPROM.read(ee_TXID0+i);
if(renew || (transmitterID[0]==0xFF && transmitterID[1]==0x0FF)) {
for(i=0; i<4; i++) {
transmitterID[i] = random() & 0xFF;
EEPROM.update(ee_TXID0+i, transmitterID[i]);
}
}
}
:
void set_txid(bool renew)
{
uint8_t i;
unsigned char p;
for(i=0; i<4; i++) {
Flash.read(flash+ee_TXID0+i,&p,1);
transmitterID[i] =p;
}
Flash.read(flash+ee_PROTOCOL_ID,&p,1);
current_protocol = constrain(p,0,PROTO_END-1);
Flash.erase(flash);
if(renew || (transmitterID[0]==0xFF && transmitterID[1]==0x0FF)) {
for(i=0; i<4; i++) {
transmitterID[i] = random(0xff) & 0xFF;
p = transmitterID[i];
Flash.write(flash+ee_TXID0+i, &p,1);
}
}else{
for(i=0; i<4; i++) {
p = transmitterID[i];
Flash.write(flash+ee_TXID0+i, &p,1);
}
}
}
, , , , . FLASH flash+ee_PROTOCOL_ID (0xFF), selectProtocol() , .
. SPI, «» .
#define PPM_pin 2
#define MOSI_pin 3
#define SCK_pin 4
#define CE_pin 5
#define MISO_pin A0
#define CS_pin A1
#define ledPin 13
#define PPM_pin P1_5
#define MOSI_pin P2_0
#define SCK_pin P2_1
#define CE_pin P2_2
#define MISO_pin P2_3
#define CS_pin P2_4
#define ledPin P1_4
#define MOSI_on PORTD |= _BV(3)
#define MOSI_off PORTD &= ~_BV(3)
#define SCK_on PORTD |= _BV(4)
#define SCK_off PORTD &= ~_BV(4)
#define CE_on PORTD |= _BV(5)
#define CE_off PORTD &= ~_BV(5)
#define CS_on PORTC |= _BV(1)
#define CS_off PORTC &= ~_BV(1)
#define MISO_on (PINC & _BV(0))
#define MOSI_on P2OUT |= _BV(0)
#define MOSI_off P2OUT &= ~_BV(0)
#define SCK_on P2OUT |= _BV(1)
#define SCK_off P2OUT &= ~_BV(1)
#define CE_on P2OUT |= _BV(2)
#define CE_off P2OUT &= ~_BV(2)
#define CS_on P2OUT |= _BV(4)
#define CS_off P2OUT &= ~_BV(4)
#define MISO_on (P2IN & _BV(3))
ATMEL PORTx MSP430 PxOUT. - PINx PxIN . , _BV(x) IDE Energia , :
#define _BV(val) 1<<val
void setup()
randomSeed((analogRead(A4) & 0x1F) | (analogRead(A5) << 5));
randomSeed((analogRead(A0) & 0x1F) | (analogRead(A1) << 5));
MSP430 A0, A1, A2, …, A7 P1_0, P1_1,P1_2, ..., P1_7.
attachInterrupt(PPM_pin - 2, ISR_ppm, CHANGE);
attachInterrupt(PPM_pin , ISR_ppm, CHANGE);
Arduino Uno, Nano, Mini, . mega328 2 (2, 3) attachInterrupt , MSP430.
attachInterrupt().
void setup()
TCCR1A = 0;
TCCR1B = 0;
TCCR1B |= (1 << CS11);
TACTL = TASSEL_2 + ID_3 + MC_2 + TACLR;
PPM. 2 ( 16 8).
void ISR_ppm()
counterPPM = TCNT1;
TCNT1 = 0;
counterPPM = TAR;
TAR = 0;
TCNT1 TAR .
random()
, random() Energia , , nRF24_multipro.ino Bayang.ino
random() & 0xFF;
random(0xFF);
random() % 0x42;
random(0x41);
???
MJX.ino void MJX_bind() mjx_init2;
.
, , , , .
, , SPI , .