attiny_SPI_test.ino 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include <Mirf.h>
  2. #include <nRF24L01.h>
  3. #include <MirfSpiDriver.h>
  4. #define _U_SPI_PORT PORTB
  5. #define MOSI 0
  6. #define MISO 1
  7. #define SCK 2
  8. #define SS 3
  9. class SoftSpi : public MirfSpiDriver{
  10. public:
  11. virtual uint8_t transfer(uint8_t data);
  12. virtual void begin();
  13. virtual void end();
  14. };
  15. uint8_t SoftSpi::transfer(uint8_t data){
  16. unsigned char bit = 0;
  17. uint8_t ret=0;
  18. for(bit = 0; bit < 8; bit++) // Loop through 8 bits
  19. {
  20. if(data & 0x80) digitalWrite(MOSI,HIGH); // If bit(7) of "data" is high
  21. else digitalWrite(MOSI,LOW); // if bit(7) of "data" is low
  22. digitalWrite(SCK,HIGH); // Serial Clock Rising Edge
  23. data <<= 1; // Shift "data" to the left by one bit
  24. if(digitalRead(MISO)==HIGH) ret |= 0x01; // If bit of slave data is high
  25. else ret &= ~0x01; // if bit of slave data is low
  26. ret <<=1;
  27. digitalWrite(SCK,LOW); // Serial Clock Falling Edge
  28. }
  29. return ret; // Returns shifted data in value
  30. }
  31. void SoftSpi::begin(){
  32. }
  33. void SoftSpi::end(){
  34. }
  35. SoftSpi MirfSoftwareSpi;
  36. void setup() {
  37. pinMode(MOSI,OUTPUT);
  38. pinMode(MISO,INPUT);
  39. pinMode(SCK,OUTPUT);
  40. pinMode(SS,OUTPUT);
  41. // Setup
  42. Mirf.spi = &MirfSoftwareSpi;
  43. Mirf.csnPin = 5;
  44. Mirf.init();
  45. Mirf.setRADDR((byte *)"clie1");
  46. Mirf.payload = sizeof(unsigned long);
  47. Mirf.config();
  48. // Read and print RF_SETUP
  49. byte rf_setup = 0;
  50. Mirf.readRegister( RF_SETUP, &rf_setup, sizeof(rf_setup) );
  51. }
  52. void loop() {
  53. // uint8_t i = 0;
  54. // for(i=0; i < 240; i++){
  55. // digitalWrite(SS,LOW);
  56. // transfer(i);
  57. // digitalWrite(SS,HIGH);
  58. // delay(20);
  59. // }
  60. }