Пометки для себя


#if (RX_BOARD_TYPE==8)           // openLRSmicroRX
    //## RFM22B Pinouts for openLRSmicroRX
    #define SDO_pin 12 //B4
    #define SDI_pin 11 //B3
    #define SCLK_pin 13 //B5
    #define IRQ_pin 2 //D2
    #define nSel_pin 4 //D4
    #define IRQ_interrupt 0 //D0

    #define  nIRQ_1 (PIND & 0x04)==0x04 //D2
    #define  nIRQ_0 (PIND & 0x04)==0x00 //D2

    #define  nSEL_on PORTD |= (1<<4)  //D4
    #define  nSEL_off PORTD &= 0xEF //D4

    #define  SCK_on PORTB |= _BV(5) //B5
    #define  SCK_off PORTB &=~_BV(5) //B5

    #define  SDI_on PORTB |= _BV(3)  //B3
    #define  SDI_off PORTB &=~_BV(3) //B3

    #define  SDO_1 (PINB & 0x10) == 0x10 //B4
    #define  SDO_0 (PINB & 0x10) == 0x00 //B4

// SAW filtre support
    #define SAW_FILT_ON  _spi_write(0x0e, 0x04);    // GPIO2=1
    #define SAW_FILT_OFF  _spi_write(0x0e, 0x00);    // GPIO2=0

    //#### pinouts ###
    #define GREEN_LED_pin A2
    #define RED_LED_pin A3

    #define Red_LED_ON   PORTC |= _BV(3);
    #define Red_LED_OFF  PORTC &= ~_BV(3);

    #define Green_LED_ON  PORTC |= _BV(2);
    #define Green_LED_OFF PORTC &= ~_BV(2);

    #define RSSI_MODE 1 //0=disable  1=enable
    #define RSSI_OUT 3 //D3

    #define Servo1_OUT 9 //Servo1 PPM
    #define Servo2_OUT A4 //Servo2 SDA
    //#define Servo3_OUT 3 //Servo3 RSSI
    #define Servo4_OUT A5 //Servo4 SCL
    #define Servo5_OUT 0 //Servo5 SBUS
    //#define Servo6_OUT 1 //Servo6
    #define Servo7_OUT 0 //Servo7 RXD
    #define Servo8_OUT 1 //Servo8 TXD
    //#define Servo9_OUT A4 //Servo9
    //#define Servo10_OUT A3 //Servo10

    #define Serial_PPM_OUT_HIGH PORTB |= _BV(1) //Serial PPM out on Servo 1
    #define Serial_PPM_OUT_LOW PORTB &= ~_BV(1) //Serial PPM out on Servo 1

    #define SBUS_OUT_HIGH PORTD &= ~_BV(1) // SBUS out
    #define SBUS_OUT_LOW PORTD  |= _BV(1)  // SBUS out

    #define SBUS_OUT_BIT _BV(1)            // SBUS out bit
    #define SBUS_OUT_PORT 1                // SBUS out port

     unsigned char offOutsMask[3] = { 0xE0, 0xCF, 0x1F };       // маски портов, при сбросе всех импульсов в 0

      volatile unsigned char *portAddr[PWM_OUT_NUM] = {                // адреса портов, поканально
        &PORTB, &PORTC, /*&PORTD, */&PORTC, &PORTD, &PORTD, &PORTD
      };

      unsigned char portMask[PWM_OUT_NUM] = {                      // маски портов поканально
         _BV(1), _BV(4), /*_BV(3), */_BV(5), _BV(1), _BV(0), _BV(1)
      };
      unsigned char diskrMask[6] = {                               // маски выходов
         _BV(1), _BV(4), /*_BV(3), */_BV(5), _BV(1), _BV(0), _BV(1)
      };

      unsigned char soundOut[] = { 1, 2, 7 };                     // номера каналов, куда выводится звук через D5, D6, D11
#define PPM_MODE_JUMPER  6        // проверка на режим PPM
#define SBUS_MODE_JUMPER 0        // режим SBUS

#endif
  • 1255
Comments
Podkovka

Совсем голову сломал … Общение приемыша и передатчика есть, на выходе приемыша PPM отрабатывается. Но иногда проскакивает FiErr! и следом 2 или 4 сообщение $RL. Закономерности не поймал - может и в 0.5 сек пару раз проскочить, а может и пару секунд пусто. Ткните носом, где копать?

Podkovka

Есть подвижки, код практически рабочий, спасибо Евгению. Остается разобраться с SBUS

#if (RX_BOARD_TYPE==3)
    //## RFM22B Pinouts
    #define SDO_pin 12
    #define SDI_pin 11
    #define SCLK_pin 13
    #define IRQ_pin 2
    #define nSel_pin 4
    #define IRQ_interrupt 0

    #define  nIRQ_1 (PIND & 0x04)==0x04 //D2
    #define  nIRQ_0 (PIND & 0x04)==0x00 //D2

    #define  nSEL_on PORTD |= (1<<4) //D4
    #define  nSEL_off PORTD &= 0xEF //D4

    #define  SCK_on PORTB |= (1<<5) //B5
    #define  SCK_off PORTB &= 0xDF //B5
    #define  SDI_on PORTB |= (1<<3) //B3
    #define  SDI_off PORTB &= 0xF7 //B3

    #define  SDO_1 (PINB & 0x10) == 0x10 //B4
    #define  SDO_0 (PINB & 0x10) == 0x00 //B4

// SAW filtre support
    #define SAW_FILT_ON  _spi_write(0x0e, 0x04);    // GPIO2=1
    #define SAW_FILT_OFF  _spi_write(0x0e, 0x00);    // GPIO2=0

    //#### Other interface pinouts ###
    #define RED_LED_pin A3
    #define GREEN_LED_pin A2

    #define Red_LED_ON   PORTC |= _BV(3);
    #define Red_LED_OFF  PORTC &= ~_BV(3);

    #define Green_LED_ON  PORTC |= _BV(2);
    #define Green_LED_OFF PORTC &= ~_BV(2);

    #define RSSI_MODE 1 //0=disable  1=enable
    #define RSSI_OUT 3 // D3


    #define Servo1_OUT 8 //Servo1
    #define Servo2_OUT 7 //Servo2
    #define Servo3_OUT 6 //Servo3
    #define Servo4_OUT 5 //Servo4
    #define Servo5_OUT 9 //Servo5
    #define Servo6_OUT 10 //Servo6
    #define Servo7_OUT A0 //Servo7
    #define Servo8_OUT A1 //Servo8
    #define Servo9_OUT A4 //Servo9
    #define Servo10_OUT A5 //Servo10

    #define Serial_PPM_OUT_HIGH PORTB |= _BV(0) //Serial PPM out on Servo 1
    #define Serial_PPM_OUT_LOW PORTB &= ~_BV(0) //Serial PPM out on Servo 1


    #define SBUS_OUT_HIGH PORTD &= ~_BV(1) // SBUS out
    #define SBUS_OUT_LOW PORTD  |= _BV(1)  // SBUS out

    #define SBUS_OUT_BIT _BV(1)            // SBUS out bit
    #define SBUS_OUT_PORT 0                // SBUS out port

    volatile uint8_t *portAddr[] = {                          // адреса портов, поканально  (до 10-ти)
      &PORTB, &PORTD, &PORTD, &PORTD, &PORTB, &PORTB, &PORTC, &PORTC, &PORTC, &PORTC
    };

    unsigned char portMask[] = {                                       // маски портов поканально
       _BV(0), _BV(7), _BV(6), _BV(5), _BV(1), _BV(2), _BV(0), _BV(1), _BV(4), _BV(5)
    };

    unsigned char diskrMask[8] = {                                     // маски  дискр. выходов
       _BV(0), _BV(7), _BV(6), _BV(5), _BV(1), _BV(2), _BV(0), _BV(1)
    };

    unsigned char soundOut[] = { 4 , 3 };                    // номера каналов, куда выводится звук для D5, D6, D11

    unsigned char offOutsMask[3] = { 0xF8, 0xCC, 0x1F };      // маски портов, при сбросе всех импульсов в 0
#endif