рд╣рдо MSR430 рдХреЗ рд▓рд┐рдП arduino рдХреЛрдб рдХреЛ nRF24_multipro, рдЦрд┐рд▓реМрдирд╛ рдорд▓реНрдЯреАрдХреЛрдкрд░реНрд╕ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред


рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреЛрдб рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣рд╛рдВ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо Arduino IDE рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ arduino pro mini рдФрд░ nrf24l01 + рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдЦрд┐рд▓реМрдирд╛ рдорд▓реНрдЯреАрдХреЛрдЯрд░ (XN297 рд░реЗрдбрд┐рдпреЛ рдЪрд┐рдкреНрд╕, nrf24l01 рдХреНрд▓реЛрди) рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА PPM рдЖрдЙрдЯрдкреБрдЯ рд╡рд╛рд▓реЗ рдирд┐рдпрдВрддреНрд░рдг рдЙрдкрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рд▓рд┐рдВрдХ рдкрд░ рд╕рдорд░реНрдерд┐рдд рдорд▓реНрдЯреАрдХреНрд░реЙрдкреНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдореИрдВрдиреЗ рд░реЗрдбрд┐рдУрд▓рд┐рдВрдХ рдПрдЯреА 9 рдЙрдкрдХрд░рдг рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдЪ 8 рдорд┐рдиреА рдХреЙрдкреНрдЯрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рд╡рд┐рд╡рд░рдг рдорд╛рдВрдЧрддрд╛ рд╣реВрдВред

MSP430 рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ 3.3 рд╡реЛрд▓реНрдЯ рдХреА рдЖрдкреВрд░реНрддрд┐ рд╡реЛрд▓реНрдЯреЗрдЬ рд╣реИ, рдЖрдкреВрд░реНрддрд┐ рд╡реЛрд▓реНрдЯреЗрдЬ nrf24l01 рднреА 3.3 рд╡реЛрд▓реНрдЯ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдХрд┐рд╕реА рддрд░рд╣ MPS430 рдкрд╕рдВрдж рд╣реИред рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдЕрдВрджрд░ 3V3, OUT, GND рд╕рдВрдкрд░реНрдХ рд╣реИрдВ, рдЬрд┐рдирд╕реЗ рд╣рдо рдЬреБрдбрд╝реЗрдВрдЧреЗред

рдпрджрд┐ рдЙрдкрдХрд░рдг рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдХреЛрдЪрд┐рдВрдЧ рдХрдиреЗрдХреНрдЯрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рд╡реЛрд▓реНрдЯреЗрдЬ = рдмреИрдЯрд░реА рд╡реЛрд▓реНрдЯреЗрдЬ, рдЗрд╕рд▓рд┐рдП рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рдПрдХ рд╡реЛрд▓реНрдЯреЗрдЬ рд╕реНрдЯреЗрдмрд▓рд╛рдЗрдЬрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред


рдХреЛрдб рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддреЗ рд╣реИрдВ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, IDE Energia (MSP430 рдХреЗ рд▓рд┐рдП Arduino IDE рдХреНрд▓реЛрди рдФрд░ TI рд╕реЗ рдЕрдиреНрдп рдЪрд┐рдкреНрд╕) рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рддреБрд░рдВрдд рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рджреЗрдЦреЗрдВред рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдФрд░ рдкрд╣рд▓реА рдЪреАрдЬ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЙрдирдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ


рд╣рдо nRF24_multipro.ino рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ''рдУрд╡ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░рдорд╛рдгреБ рдФрд░ EEPROM рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред

рдкрд░рдорд╛рдгреБ


рд╣рдо рд▓рд╛рдЗрди рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ
#include <util/atomic.h>
рдФрд░ function void рдореЗрдВ update_ppm () рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ
ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЗ рдмрдЬрд╛рдп рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ
__disable_interrupt();
рдФрд░
__enable_interrupt();

ATOMIC_BLOCK () рдлрд╝рдВрдХреНрд╢рди рдЗрдВрдЯрд░рдкреНрдЯ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЗрд╕рдХреЗ "рдмреЙрдбреА" рдореЗрдВ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░, рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрдВрдЯрд░рдкреНрдЯ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдЙрд╕ рдмрд╛рдзрд╛ рдзреНрд╡рдЬ рдХреЗ рдорд╛рди рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ ATOMIC_BLOCK () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред

EEPROM


MSP430 рдореЗрдВ EEPROM рдореЗрдореЛрд░реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлреНрд▓реЗрд╢ рдореЗрдореЛрд░реА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ MspFlash рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд▓рд╛рдЗрди рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ
#include <EEPROM.h>
рдФрд░ MspFlash рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛрдбрд╝реЗрдВ (рд╕реНрдХреЗрдЪ-> рдЗрдВрдкреЛрд░реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА ... -> MspFlash), рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдХреЗ рдХрд┐рд╕ рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ рд╣рдо рдбреЗрдЯрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗ
#define flash SEGMENT_D
рд╢реВрдиреНрдп selectProtocol () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдмрджрд▓реЗрдВ
else 
	current_protocol = constrain(EEPROM.read(ee_PROTOCOL_ID),0,PROTO_END-1);      
// update eeprom 
EEPROM.update(ee_PROTOCOL_ID, current_protocol);
рдкрд░
// update eeprom 
Flash.write(flash+ee_PROTOCOL_ID, & current_protocol,1);
рд╣рдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдХреНрдпреЛрдВ, рдиреАрдЪреЗ рдкрдврд╝реЗрдВ) рдХреЗ рдкрдврд╝рдиреЗ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред
рд╢реВрдиреНрдп рд╕реЗрдЯ_рдЯреИрдХреНрд╕рд┐рдб (рдмреВрд▓ рд░рд┐рдиреНрдпреВ) рдореЗрдВ, рдЖрдкрдХреЛ рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ рд╢реВрдиреНрдп рдмрд┐рдЯреНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред 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); 
        }  	
	}
}
рдпрд╣рд╛рдВ рд╣рдо рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рдЦрдВрдб рдХреЛ рдорд┐рдЯрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдирдпрд╛ рдорд╛рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдо рдкреБрд░рд╛рдиреЗ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреЗ рд╣реИрдВред рдкрддрд╛ рдлрд╝реНрд▓реИрд╢ + ee_PROTOCOL_ID рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА рдХрд╛ FLASH рдмрд╛рдЗрдЯ рд╕рд╛рдлрд╝ рд░рд╣рддрд╛ рд╣реИ (0xFF), рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рд╕реЗрд▓реЗрдХреНрдЯрдкреНрд░реЛрдХреЛрд▓ () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд╣реАрдВ рдкрдврд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддреБрд░рдВрдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ


рдкрд╣рд▓реЗ, рдЪрд▓реЛ рдкрд┐рди рд╕реЗ рдирд┐рдкрдЯреЗрдВред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, SPI рдХреЗ рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ "рдЪрд┐рдХреЛрдЯреА" рдкреИрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд┐рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВ
#define PPM_pin   2  // PPM in
//SPI Comm.pins with nRF24L01
#define MOSI_pin  3  // MOSI - D3
#define SCK_pin   4  // SCK  - D4
#define CE_pin    5  // CE   - D5
#define MISO_pin  A0 // MISO - A0
#define CS_pin    A1 // CS   - A1
#define ledPin    13 // LED  - D13
#define PPM_pin   P1_5  // PPM in
//SPI Comm.pins with nRF24L01
#define MOSI_pin  P2_0  // MOSI 
#define SCK_pin   P2_1  // SCK  
#define CE_pin    P2_2  // CE 
#define MISO_pin  P2_3 // MISO 
#define CS_pin    P2_4 // CS   
#define ledPin    P1_4 // LED  
#define MOSI_on PORTD |= _BV(3)  // PD3
#define MOSI_off PORTD &= ~_BV(3)// PD3
#define SCK_on PORTD |= _BV(4)   // PD4
#define SCK_off PORTD &= ~_BV(4) // PD4
#define CE_on PORTD |= _BV(5)    // PD5
#define CE_off PORTD &= ~_BV(5)  // PD5
#define CS_on PORTC |= _BV(1)    // PC1
#define CS_off PORTC &= ~_BV(1)  // PC1
// SPI input
#define  MISO_on (PINC & _BV(0)) // PC0
#define MOSI_on P2OUT |= _BV(0)// P2_0
#define MOSI_off P2OUT &= ~_BV(0)// P2_0
#define SCK_on P2OUT |= _BV(1)// P2_1
#define SCK_off P2OUT &= ~_BV(1)// P2_1
#define CE_on P2OUT |= _BV(2)// P2_2
#define CE_off P2OUT &= ~_BV(2)// P2_2
#define CS_on P2OUT |= _BV(4)// P2_4
#define CS_off P2OUT &= ~_BV(4) // P2_4
// SPI input
#define  MISO_on (P2IN & _BV(3)) // P2_3

ATMEL MK рдореЗрдВ, MSP430 PxOUT рдореЗрдВ PORTx рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЗрдирдкреБрдЯ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП, рдХреНрд░рдорд╢рдГ PINx рдФрд░ PxIN рд░рдЬрд┐рд╕реНрдЯрд░ред рд╡реИрд╕реЗ, рдПрдирд░реНрдЬрд┐рдпрд╛ рдЖрдИрдбреАрдИ рдореЗрдВ рдХреЛрдИ _BV (x) рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЬреЛрдбрд╝реЗрдВ:
#define _BV(val) 1<<val
рдлрд╝рдВрдХреНрд╢рди рд╢реВрдиреНрдп рд╕реЗрдЯрдЕрдк () рдореЗрдВ рд╣рдо рдПрдирд╛рд▓реЙрдЧ рдЗрдирдкреБрдЯ рдХреЗ рдкрд┐рди рдорд╛рдиреЛрдВ рдХреЛ рдореБрдлреНрдд рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ
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);
рдореЗрдЧрд╛ 328 рдкрд░ Arduino Uno, Nano, Mini, рдЖрджрд┐ рдореЗрдВ, рдПрдХ рд░реБрдХрд╛рд╡рдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 2 рдкрд┐рди (2, 3) рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдФрд░ рд╕рдВрд▓рдЧреНрдирдХ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ, рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╣реИ рд░реБрдХрд╛рд╡рдЯ рд╕рдВрдЦреНрдпрд╛, MSP430 рдХреЗ рд░реВрдк рдореЗрдВ рдкрд┐рди рдирд╣реАрдВред рд╕рдВрд▓рдЧреНрдирдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА () ред

рдШрдбрд╝реА


рд╢реВрдиреНрдп рд╕реЗрдЯрдЕрдк рдореЗрдВ рдмрджрд▓реЗрдВ ()
TCCR1A = 0;  //reset timer1
TCCR1B = 0;
TCCR1B |= (1 << CS11);  //set timer1 to increment every 1 us @ 8MHz, 0.5 us @16MHz
рдкрд░
TACTL = TASSEL_2 + ID_3 + MC_2 + TACLR; //16000000 / 8
рдкреАрдкреАрдПрдо рдореЗрдВ рдкрд▓реНрд╕ рдЕрд╡рдзрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд╛рдЗрдорд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдордиреЗ рдЗрд╕реЗ 2 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ (16 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА рдШрдбрд╝реА рдЖрд╡реГрддреНрддрд┐ рдФрд░ 8 рдХреЗ рдПрдХ рд╡рд┐рднрдХреНрдд) рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдЧрд┐рдирддреА рдореЛрдб рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ред
рд╢реВрдиреНрдп рдлрд╝рдВрдХреНрд╢рди ISR_ppm () рдореЗрдВ рд╣рдо рдмрджрд▓рддреЗ рд╣реИрдВ
counterPPM = TCNT1;
TCNT1 = 0;
рдкрд░
counterPPM = TAR;
TAR = 0;
рд░рдЬрд┐рд╕реНрдЯрд░ TCNT1 рдФрд░ TAR рдЯрд╛рдЗрдорд░ рдХрд╛рдЙрдВрдЯрд░ рд╣реИрдВред

рдпрд╛рджреГрдЪреНрдЫрд┐рдХ ()


рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпреЛрдВ, рд▓реЗрдХрд┐рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдирд░реНрдЬрд┐рдпрд╛ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рд┐рдВрдЧрд▓-рдмрд╛рдЗрдЯ рдирдВрдмрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо nRF24_multipro.ino рдФрд░ Bayang.ino рдХреЛ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ
random() & 0xFF; 
рдкрд░
random(0xFF);
рдФрд░
random() % 0x42;
рдкрд░
random(0x41);

???


рдФрд░ рдЕрдВрдд рдореЗрдВ, MJX.ino рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╢реВрдиреНрдп MJX_bind () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо mjx_init2 рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдХреЛрд╖реНрдардХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ;
рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рдлрд▓ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрд░реЛрдд рдХреЛрдб
рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб

рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рджреВрд╕рд░реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛, рдХреИрд╕реЗ рдФрд░ рдХреНрдпреЛрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрдиреЗрдХреНрдЯреЗрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕рдордЭреЗрдВ, рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдФрд░, рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди, рдЕрдХреНрд╕рд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди рд▓реЙрдЧ рдореЗрдВ рджреЗрдЦреЗрдВред
рдареАрдХ рд╣реИ, рдЕрдЧрд░ рдЖрдк рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ SPI рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдХреЗрд╡рд▓ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИред

Source: https://habr.com/ru/post/hi392609/


All Articles