Инфа по трансиверу TR24

Тема в разделе "WASM.ELECTRONICS", создана пользователем a9d, 3 фев 2010.

  1. alexsneg

    alexsneg New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2011
    Сообщения:
    12
    Ага, есть у меня пара. Аттракцион а ну ка запаяй!
     
  2. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Покупаешь фен и все. Никакого аттракциона.
     
  3. chubik

    chubik New Member

    Публикаций:
    0
    Регистрация:
    27 фев 2012
    Сообщения:
    1
    Здравствуйте! Пытаюсь связать два модуля TR24F - безрезультатно. Написал код(привожу ниже). По SPI регистры параметрируются, но как-то через раз, читаются отлично. Прерывание при отсылке на передатчике происходит, значит пакет с данными прошел, а вот на приемнике глухо. Регистры 0, 9-16 на стороне приемника и передатчика учтены и поставлены правильно. Помогите найти ошибку.
    Пишу на CVAVR под Atmega8


    Код (Text):
    1. Код:
    2. #define RDY PORTC.4 //27 out
    3. #define SCK PORTC.2 //25 out
    4. #define DAT PORTC.0 // 23 in/out
    5. #define INDAT PINC.0// 23
    6. #define DAT_DDR DDRC.0 // 23
    7. #define EN PORTC.5 //28 out
    8. #define PSB PORTD.1 //3 out
    9. #define INT PIND.2 // 4 in
    10. //#define DRSSI PIND.6
    11.  
    12. flash unsigned char regs[25]={
    13. 0xA8,// 0x28 T/R Channel index
    14. 0x03,// Crystal Frequency and RF Power
    15. 0x78,// Data Function Control
    16. 0x87,// RSSI Function Control
    17. 0x20,// RSSI Value
    18. 0x0F,// Data format control
    19. 0x30,// Multi Burst Packet Repeat Control
    20. 0x21,// Power Ramp Control
    21. 0x03,// Addres Length
    22. 0x02,// Destination Addres 0x34
    23. 0x02,// Destination Addres 0x22
    24. 0x02,// Destination Addres 0x55
    25. 0x00,// Destination Addres
    26. 0x00,// Destination Addres
    27. 0x01,// Device Addres
    28. 0x01,// Device Addres
    29. 0x01,// Device Addres
    30. 0x00,// Device Addres
    31. 0x00,// Device Addres
    32. 0x00,// Reserved
    33. 0x00,// PLL Pre-Turn-On Time
    34. 0xB4,// PLL Lock Time
    35. 0x00,// Reserved
    36. 0x22,// Option
    37. 0x04 // RX Turn On Time
    38. } ;
    39.  
    40.  
    41. void spi_access_mode(void)
    42. {
    43. DAT=1;
    44. PSB=1;
    45. EN=1;
    46. RDY=0;
    47. SCK=0;
    48. #asm("nop")
    49. };
    50.  
    51. void active_mode(void)
    52. {
    53. DAT=1;
    54. PSB=1;
    55. EN=0;
    56. SCK=0;
    57. RDY=1;
    58. #asm("nop")
    59.  
    60. };
    61.  
    62. // Output eight-bit value using selected bit-bang pins
    63. void spi_bitbang_out(char value)
    64. {
    65. char x;
    66. for(x=8;x>0;x--){
    67. if(value & 0x80)DAT=1;
    68. else DAT=0;
    69. #asm("nop")
    70. SCK=1;
    71. value<<=1;
    72. #asm("nop")
    73. SCK=0;
    74. #asm("nop")
    75. }
    76. } ;
    77.  
    78. // Input eight-bit value using selected bit-bang pins
    79. char spi_bitbang_in()
    80. {
    81. unsigned char x=0;
    82. unsigned char y;
    83. x=0;
    84. for(y=8;y>0;y--){
    85. SCK=1;
    86. #asm("nop")
    87. x<<=1;
    88. if(INDAT==1){x|=0b00000001;}
    89. SCK=0;
    90. #asm("nop")
    91.  
    92. } // Store next bit
    93. return(x);
    94. }
    95.  
    96. void spi_write_regs(unsigned char addres,unsigned char data)
    97. {
    98. spi_access_mode();
    99. DAT_DDR=1;
    100. spi_bitbang_out(addres|0x80); // Send address
    101. spi_bitbang_out(data); // Send data
    102. EN=0;
    103. } ;
    104.  
    105. unsigned char spi_read_reg(unsigned char addres)
    106. { unsigned char data;
    107. spi_access_mode();
    108. DAT_DDR=1;
    109. spi_bitbang_out(addres); // Send address
    110. DAT_DDR=0;
    111. data=spi_bitbang_in(); //read data
    112. EN=0;
    113. return(data);
    114. };
    115.  
    116.  
    117. void tr24f_init(void)
    118. {unsigned char y;
    119. for(y=0;y<24;y++)
    120. spi_write_regs(y,regs[y]);
    121. };
    122.  
    123. unsigned char *fifo_read(unsigned char data_length)
    124. {unsigned char *data, y;
    125. active_mode();
    126. DAT_DDR=0;
    127. for(y=data_length;y>0;y--)
    128. data[y]=spi_bitbang_in();
    129. return(data);
    130. };
    131.  
    132. void fifo_write(unsigned char *data,unsigned char data_length)
    133. {
    134. unsigned char y;
    135. active_mode();
    136. DAT_DDR=1;
    137. delay_us(20);
    138. spi_bitbang_out(regs[0x09]);
    139. spi_bitbang_out(regs[0x0A]);
    140. spi_bitbang_out(regs[0x0B]);
    141. for(y=data_length;y>0;y--)
    142. spi_bitbang_out(data[y]);
    143. spi_bitbang_out(1);
    144. spi_bitbang_out(1);
    145. spi_bitbang_out(1);
    146. RDY=0;
    147. };