nRF24 / RF24

OSI Layer 2 driver for nRF24L01 on Arduino & Raspberry Pi/Linux Devices
https://nrf24.github.io/RF24
GNU General Public License v2.0
2.22k stars 1.02k forks source link

Does the library work with Digispark? #226

Closed gitgrimbo closed 8 years ago

gitgrimbo commented 8 years ago

Hi, I get compilation errors when I select a Digispark board from Arduino IDE (v1.6.7) and try to compile rf24ping85. Is the Digispark supported? It is based on the Attiny85 so I hoped it would be.

digispark_board

I am trying to follow the 3-pin approach.

I set the CE and CS pins to be equal, as mentioned in this comment.

// CE and CSN are configurable, specified values for ATtiny85 as connected above
#define CE_PIN 3
//#define CSN_PIN 4
#define CSN_PIN 3 // uncomment for ATtiny85 3 pins solution

This is the compilation output. From what very little I know, my guess is the Digispark is not treated like a regular Attiny85.

Thanks.

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h: In member function 'void SPISettings::init_AlwaysInline(uint32_t, uint8_t, uint8_t)':

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:146:16: error: 'SPE' was not declared in this scope

     spcr = _BV(SPE) | _BV(MSTR) | ((bitOrder == LSBFIRST) ? _BV(DORD) : 0) |

                ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:146:27: error: 'MSTR' was not declared in this scope

     spcr = _BV(SPE) | _BV(MSTR) | ((bitOrder == LSBFIRST) ? _BV(DORD) : 0) |

                           ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:146:65: error: 'DORD' was not declared in this scope

     spcr = _BV(SPE) | _BV(MSTR) | ((bitOrder == LSBFIRST) ? _BV(DORD) : 0) |

                                                                 ^

In file included from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:0:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h: In static member function 'static void SPIClass::beginTransaction(SPISettings)':

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:203:5: error: 'SPCR' was not declared in this scope

     SPCR = settings.spcr;

     ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:204:5: error: 'SPSR' was not declared in this scope

     SPSR = settings.spsr;

     ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h: In static member function 'static uint8_t SPIClass::transfer(uint8_t)':

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:209:5: error: 'SPDR' was not declared in this scope

     SPDR = data;

     ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:217:14: error: 'SPSR' was not declared in this scope

     while (!(SPSR & _BV(SPIF))) ; // wait

              ^

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:217:25: error: 'SPIF' was not declared in this scope

     while (!(SPSR & _BV(SPIF))) ; // wait

                         ^

In file included from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:0:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h: In static member function 'static uint16_t SPIClass::transfer16(uint16_t)':

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:223:11: error: 'SPCR' was not declared in this scope

     if (!(SPCR & _BV(DORD))) {

           ^

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:223:22: error: 'DORD' was not declared in this scope

     if (!(SPCR & _BV(DORD))) {

                      ^

In file included from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:0:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:224:7: error: 'SPDR' was not declared in this scope

       SPDR = in.msb;

       ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:226:16: error: 'SPSR' was not declared in this scope

       while (!(SPSR & _BV(SPIF))) ;

                ^

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:226:27: error: 'SPIF' was not declared in this scope

       while (!(SPSR & _BV(SPIF))) ;

                           ^

In file included from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:0:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:230:16: error: 'SPSR' was not declared in this scope

       while (!(SPSR & _BV(SPIF))) ;

                ^

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:230:27: error: 'SPIF' was not declared in this scope

       while (!(SPSR & _BV(SPIF))) ;

                           ^

In file included from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:0:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:233:7: error: 'SPDR' was not declared in this scope

       SPDR = in.lsb;

       ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:235:16: error: 'SPSR' was not declared in this scope

       while (!(SPSR & _BV(SPIF))) ;

                ^

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:235:27: error: 'SPIF' was not declared in this scope

       while (!(SPSR & _BV(SPIF))) ;

                           ^

In file included from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:0:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:239:16: error: 'SPSR' was not declared in this scope

       while (!(SPSR & _BV(SPIF))) ;

                ^

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:239:27: error: 'SPIF' was not declared in this scope

       while (!(SPSR & _BV(SPIF))) ;

                           ^

In file included from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:0:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h: In static member function 'static void SPIClass::transfer(void*, size_t)':

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:247:5: error: 'SPDR' was not declared in this scope

     SPDR = *p;

     ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:250:16: error: 'SPSR' was not declared in this scope

       while (!(SPSR & _BV(SPIF))) ;

                ^

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:250:27: error: 'SPIF' was not declared in this scope

       while (!(SPSR & _BV(SPIF))) ;

                           ^

In file included from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:0:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:255:14: error: 'SPSR' was not declared in this scope

     while (!(SPSR & _BV(SPIF))) ;

              ^

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:255:25: error: 'SPIF' was not declared in this scope

     while (!(SPSR & _BV(SPIF))) ;

                         ^

In file included from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:0:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h: In static member function 'static void SPIClass::setBitOrder(uint8_t)':

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:292:31: error: 'SPCR' was not declared in this scope

     if (bitOrder == LSBFIRST) SPCR |= _BV(DORD);

                               ^

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:292:43: error: 'DORD' was not declared in this scope

     if (bitOrder == LSBFIRST) SPCR |= _BV(DORD);

                                           ^

In file included from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:0:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:293:10: error: 'SPCR' was not declared in this scope

     else SPCR &= ~(_BV(DORD));

          ^

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:293:24: error: 'DORD' was not declared in this scope

     else SPCR &= ~(_BV(DORD));

                        ^

In file included from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:0:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h: In static member function 'static void SPIClass::setDataMode(uint8_t)':

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:298:5: error: 'SPCR' was not declared in this scope

     SPCR = (SPCR & ~SPI_MODE_MASK) | dataMode;

     ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h: In static member function 'static void SPIClass::setClockDivider(uint8_t)':

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:303:5: error: 'SPCR' was not declared in this scope

     SPCR = (SPCR & ~SPI_CLOCK_MASK) | (clockDiv & SPI_CLOCK_MASK);

     ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:304:5: error: 'SPSR' was not declared in this scope

     SPSR = (SPSR & ~SPI_2XCLOCK_MASK) | ((clockDiv >> 2) & SPI_2XCLOCK_MASK);

     ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h: In static member function 'static void SPIClass::attachInterrupt()':

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:309:42: error: 'SPCR' was not declared in this scope

   inline static void attachInterrupt() { SPCR |= _BV(SPIE); }

                                          ^

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:309:54: error: 'SPIE' was not declared in this scope

   inline static void attachInterrupt() { SPCR |= _BV(SPIE); }

                                                      ^

In file included from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:0:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h: In static member function 'static void SPIClass::detachInterrupt()':

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:310:42: error: 'SPCR' was not declared in this scope

   inline static void detachInterrupt() { SPCR &= ~_BV(SPIE); }

                                          ^

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:310:55: error: 'SPIE' was not declared in this scope

   inline static void detachInterrupt() { SPCR &= ~_BV(SPIE); }

                                                       ^

In file included from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/pins_arduino.h:31:0,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:13,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp: In static member function 'static void SPIClass::begin()':

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:32:37: error: 'SS' was not declared in this scope

     uint8_t port = digitalPinToPort(SS);

                                     ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:32:20: note: in expansion of macro 'digitalPinToPort'

     uint8_t port = digitalPinToPort(SS);

                    ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:33:39: error: 'SS' was not declared in this scope

     uint8_t bit = digitalPinToBitMask(SS);

                                       ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:33:19: note: in expansion of macro 'digitalPinToBitMask'

     uint8_t bit = digitalPinToBitMask(SS);

                   ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:39:20: error: 'SS' was not declared in this scope

       digitalWrite(SS, HIGH);

                    ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:45:13: error: 'SS' was not declared in this scope

     pinMode(SS, OUTPUT);

             ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:50:5: error: 'SPCR' was not declared in this scope

     SPCR |= _BV(MSTR);

     ^

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:50:17: error: 'MSTR' was not declared in this scope

     SPCR |= _BV(MSTR);

                 ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:51:17: error: 'SPE' was not declared in this scope

     SPCR |= _BV(SPE);

                 ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:59:13: error: 'SCK' was not declared in this scope

     pinMode(SCK, OUTPUT);

             ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:60:13: error: 'MOSI' was not declared in this scope

     pinMode(MOSI, OUTPUT);

             ^

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp: In static member function 'static void SPIClass::end()':

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:74:5: error: 'SPCR' was not declared in this scope

     SPCR &= ~_BV(SPE);

     ^

In file included from c:\apps\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\apps\arduino\hardware\tools\avr\avr\include\avr\interrupt.h:38,

Multiple libraries were found for "RF24.h"
 Used: C:\Users\grimbo\Documents\Arduino\libraries\RF24
                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/WProgram.h:8,

 Not used: C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\RF24
                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny/Arduino.h:4,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.h:17,

                 from C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:14:

C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\SPI\SPI.cpp:74:18: error: 'SPE' was not declared in this scope

     SPCR &= ~_BV(SPE);

                  ^

exit status 1
Error compiling.
Avamander commented 8 years ago

Your digistump installation is broken. The SPI library is broken it seems and it's not caused by RF24. Open the blink example and include SPI library, initalize it in setup() and see if it compiles.

You also have duplicate installation of RF24. Delete C:\Users\grimbo\AppData\Local\Arduino15\packages\digistump\ hardware\avr\1.6.7\libraries\RF24 and C:\Users\grimbo\Documents\Arduino\libraries\RF24 and redownload the library and place it to C:\Users\grimbo\Documents\ Arduino\libraries.

gitgrimbo commented 8 years ago

Thanks for your quick reply. I can get the errors down to the following (I have done a fresh install of Arduino IDE 1.6.7 and removed most of the digispark-added libraries), but it still looks like the #defines and #includes that should be part of compilation for Digispark (as an Attiny85) are not run (these #defines would cause <SPI.h> to be #included).

In file included from C:\Users\grimbo\Documents\Arduino\libraries\RF24/RF24.h:18:0,

                 from C:\Users\grimbo\Documents\Arduino\rf24ping85\rf24ping85.ino:58:

C:\Users\grimbo\Documents\Arduino\libraries\RF24/RF24_config.h:77:19: fatal error: SPI.h: No such file or directory

   #include <SPI.h>

                   ^

compilation terminated.

exit status 1
Error compiling.

If I add the following to C:\Users\grimbo\Documents\Arduino\libraries\RF24\RF24_config.h

#define __AVR_ATtiny85__

then the sketch compiles. But this doesn't feel right to me. I feel like this ought to be picked up automatically at compile time based on my chosen board (Digispark).

Apologies if this isn't very clear, I'm very new to Arduino/Digispark.

Avamander commented 8 years ago

The boards do not identify themselves right. It's digispark dev's fault (or just a weird design feature). I'll try to create a version of RF24 for you to test. The digispark devs have created bunch of clones of popular libraries to support digispark even of RF24 that's why you had the duplicate.

You're also using the digispark IDE I assume? You can use this instruction to use standard proper Arduino IDE that is updated http://www.visualmicro.com/forums/YaBB.pl?num=1416119668/4 reply number (#)9.

Avamander commented 8 years ago

Try this https://github.com/Avamander/RF24/archive/master.zip, does it compile without any modification?

gitgrimbo commented 8 years ago

Same error I'm afraid.

I'm using the standard Adruino IDE (v1.6.7) with these instructions for adding Digispark support - https://digistump.com/wiki/digispark/tutorials/connecting.

Basically you add http://digistump.com/package_digistump_index.json as an Additional Boards Manager URL and it pulls in the board config and the examples/libraries.

wmarkow commented 8 years ago

Digispark doesn't contain a valid SPI implementation as ATTiny85 doesn't embedd SPI interface; it embedds USI instead. Including SPI into your project will not work. There is Atmel's application note on how to implement SPI over USI.

Avamander commented 8 years ago

The library would work if I'd know the board tag (as it does not identify itself as AVR_ATtiny85) it would be a easy fix. I'll try one more thing.

gitgrimbo commented 8 years ago

I've tried searching for 'digis' (case insensitive, to try and find any references to digispark/digistump) in various files/folders with no real success. In what files do existing boards/chipsets do their 'platform defines'? (apologies if my terminology is confusing)

Avamander commented 8 years ago

https://github.com/Avamander/RF24/archive/master.zip does it work now?

gitgrimbo commented 8 years ago

Nope, sorry.

If I add the following to my sketch (rf24ping85.ino) it compiles, but I guess that's pretty obvious.

#define AVR_DIGISPARK__

Board is still selected as:

wmarkow commented 8 years ago

I don't know how did you managed to compile it. It doesn't compile for me even if I include the

#define __AVR_ATtiny85__

in the RF24_config.h

I'm using Eclipse C++ with this arduino-eclipse-plugin which binds to arduino IDE 1.6.5. Digispark does define the AVR_ATtiny85 and the correct files are included: first arduino-1.6.5/hardware/tools/avr/avr/include/avr/io.h then arduino-1.6.5/hardware/tools/avr/avr/include/avr/iotn85.h then arduino-1.6.5/hardware/tools/avr/avr/include/avr/iotnx5.h

In these file there is no definitions of standard SPI registers (like DORD for example) as AtTiny85 doesn't have a hardware SPI; it has USI instead. I think it will not work even if you get the code compiled: the SPI registers will be mapped to some memory addresses that will probably make no sense for AtTiny85 and the compiled program may not work.

Digispark SPI implementation have almost the same files as generic Arduino library. I do not know why Digispark included a library that will not work :) There is also the ATTinyCore library but it looks like it doesn't support SPI for AtTiny85.

What you need is - I think - an SPI implementation over USI hardware interface. Take a look at Atmel's AVR319. You can check out these projects:

The best solution would be to port SPI over USI implementation into Digispark's SPI library so it would be compatible with standard Arduino API.

I was interested in running RF24 in Digispark so I have made some investigations in that. I do not have the Digispark boards yet - I'm still waiting for the shipment :)

Avamander commented 8 years ago

RF24 definetly has ATTiny85 support it's just the digispark boards have been configured for the IDE so that the compiler preprocessor doesn't use the right #include-s. Someone could ask what's the compiler preprocessor tag from digispark themselves or find it out somehow. (Let me know if you're going to ask them somehow) I have no idea where one could find it.

Until that (is asked from digispark) use https://github.com/TMRh20/RF24/ latest release and add #define __AVR_ATtiny85__ when you're using the board. If it doesn't work then your RF24 is either outdated or installation broken.

wmarkow commented 8 years ago

@Avamander, now I know. My Eclipse took the RF24 library from Digispark distribution instead of TMRh20's. I have throw away that Digispark's RF24 library and used the correct one :) Now I managed to compile it; it compile however in Eclipse I don't have to define AVR_ATtiny85. There is SPI implementation at the end of RF24.cpp file (TMRh20's); this implementation uses the USI interface which is embedded in ATTiny85. I can't test it now since I don't have (yet) any Digispark boards.

@Avamander - thanks for clarifications.

w-mo commented 8 years ago

additionally to deleting the RF24 libary from the digispark subfolder I had to copy the spi.h from RF24/utility/ATTiny to /RF24 . I also renamed it to SPI.h but I don't know if it did anything.

This thread helped me a lot! Also it was the only source I found for my problem, so I guess this is reference now.

Avamander commented 8 years ago

Please don't replace the SPI library, use the #define instead to ensure hassle free compatibility.

w-mo commented 8 years ago

@Avamander I didn't replace anything.