Go Down

Topic: shield compatibility (Read 1 time) previous topic - next topic

jnj59

Arduino 101 documentation says the board "has some features in common with both UNO (connectors, available peripherals)..."

However, seeing that DC current per IO pin is 4 ma, I'm wondering if I need to worry about shields being compatible with this board.

I this a valid concern?


jnj59

Looks like the 4 mA is for Curie only. The schematics show use of voltage level shifter. http://www.ti.com/product/LSF0108.

So perhaps my original question is not of concern. LSF0108 has drive current of 64 mA max.

Zeph

#2
Dec 30, 2015, 07:33 pm Last Edit: Dec 30, 2015, 07:42 pm by Zeph
I am not fully understanding the LF0108 datasheet, but I see that 64mA is the limit for the "pass transistor".  Given that the LF0108 is bidirectional without direction control, and used on both analog and digital pins, I'm thinking that it may be more like an analog switch with level translation, than like a buffer chip that amplifies the current capacity.

So the LF0108 might only be able to handle 64 mA if the device it's translating handles 65 mA.

I hope I'm wrong, but if the Arduino 101 could really output 64 mA on each pin, I'm thinking that they'd be advertising this as a substantial new feature.

Awaiting the authoratative answer...

Zeph

These LF0108 chips look pretty interesting tho - 8 channel bidirectional voltage translator with 64 mA pass through.  It seems like one could make a cheap adapter shield with 3 of them, that allows any 3.3v Arduino to accept 5V shields.

facchinm

The 4mA limit was extracted from a prerelease version of the Curie datasheet, and of course didn't consider the final board design.
Using LSF0108 doesn't increase the output current (due to its pass transistor nature) but the final revision of the chip is able to output 20mA from one single pin, so I'm updating the documentation accordingly.

By the way, @jnj59, a low current on IO pins would not interfere with existing shields; if a shield is designed correctly, it sources its power from the POWER section (5V, 3.3V) and only uses some nanoAmps for IO operations ;)

sivaiots14

Apart from Amp details, how the shield and Curie will communicate? How many serial ports are available to connect with external boards say GSM shield? I saw software serial in the 101 examples, can you confirm?

facchinm

Yes, there is one HW Serial (called Serial1, on pins 0/1) and you can use CurieSoftwareSerial library. The Serial object instead is a USB/CDC virtual serial so, unlike UNO, writing on the USB serial will not interfere with the operations on pins 0 and 1

sivaiots14

What is the baudrate to be used for this serial port? as per Curiesoftwareserial , it is 115200, can someone confirm, whether I can change it to 9600

facchinm

From the sources (here)

CurieSoftwareSerial library is a work in progress
Currently only 38400 and 57600 bps is the supported baud rate for RX
RX is only fully functional on pins 2, 4, 7, 8, 10, 11, 12.

I would wait for the next core release before starting using it for important projects

sivaiots14

Thanks for the input.
I could use softwareserial to use my GSM modem SIM900
Find screenshot

Le085

Hi!

I join this discussion because I'm wondering if the Ethernet 2 shield is compatible with this board.
 
It would be great if somebody can make a list of the shields that have been tested with this board!

sivaiots14

I tested SIM900A module (not shield) and works fine. I used the pins 4,5 as softserials at 57600 baudrate.
It worked fine, I could do both CALL feature and GPRS post features.

Not tested Ethernet shield yet.

Planning to integrate it with ESP826 for using that Wifi shield which is the missing piece in 101. Let me know if anyone done this already

Le085

Thanks for your reply. I'm interested in the ESP8266 module too!

Do you think that's better to try with the simple ESP8266  module without level shifter or the Adafruit Huzzah with integrated level shifter?


Le085

#13
Jan 15, 2016, 04:34 pm Last Edit: Jan 15, 2016, 04:45 pm by Le085
Hust got the Genuino 101 and testing with the Ethernet 2 Shield and ESP8266 (Adafruit Huzzah version).

I started with the ethernet 2 shield and I got compilation errors for the SPI:

Code: [Select]

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp: In member function 'void W5500Class::init()':

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:40:19: error: no matching function for call to 'SPIClass::begin(int)'

   SPI.begin(SPI_CS);

                   ^

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:40:19: note: candidate is:

In file included from C:\Users\user\Documents\Arduino\libraries\Ethernet2\src/utility/w5500.h:19:0,

                 from C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:18:

C:\Users\user\AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.4\libraries\SPI/SPI.h:92:8: note: void SPIClass::begin()

   void begin();

        ^

C:\Users\user\AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.4\libraries\SPI/SPI.h:92:8: note:   candidate expects 0 arguments, 1 provided

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:45:32: error: no matching function for call to 'SPIClass::setClockDivider(int, int)'

   SPI.setClockDivider(SPI_CS, 2); // 42 Mhz, ok

                                ^

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:45:32: note: candidate is:

In file included from C:\Users\user\Documents\Arduino\libraries\Ethernet2\src/utility/w5500.h:19:0,

                 from C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:18:

C:\Users\user\AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.4\libraries\SPI/SPI.h:248:8: note: void SPIClass::setClockDivider(uint8_t)

   void setClockDivider(uint8_t clockDiv);

        ^

C:\Users\user\AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.4\libraries\SPI/SPI.h:248:8: note:   candidate expects 1 argument, 2 provided

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:46:36: error: no matching function for call to 'SPIClass::setDataMode(int, int)'

   SPI.setDataMode(SPI_CS, SPI_MODE0);

                                    ^

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:46:36: note: candidate is:

In file included from C:\Users\user\Documents\Arduino\libraries\Ethernet2\src/utility/w5500.h:19:0,

                 from C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:18:

C:\Users\user\AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.4\libraries\SPI/SPI.h:245:8: note: void SPIClass::setDataMode(uint8_t)

   void setDataMode(uint8_t dataMode);

        ^

C:\Users\user\AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.4\libraries\SPI/SPI.h:245:8: note:   candidate expects 1 argument, 2 provided

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp: In static member function 'static uint8_t W5500Class::write(uint16_t, uint8_t, uint8_t)':

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:136:36: error: 'SPI_CONTINUE' was not declared in this scope

   SPI.transfer(SPI_CS, _addr >> 8, SPI_CONTINUE);

                                    ^

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:139:29: error: invalid conversion from 'int' to 'void*' [-fpermissive]

   SPI.transfer(SPI_CS, _data);

                             ^

In file included from C:\Users\user\Documents\Arduino\libraries\Ethernet2\src/utility/w5500.h:19:0,

                 from C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:18:

C:\Users\user\AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.4\libraries\SPI/SPI.h:177:15: error:   initializing argument 1 of 'void SPIClass::transfer(void*, size_t)' [-fpermissive]

   inline void transfer(void *buf, size_t count) {

               ^

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp: In static member function 'static uint16_t W5500Class::write(uint16_t, uint8_t, const uint8_t*, uint16_t)':

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:166:36: error: 'SPI_CONTINUE' was not declared in this scope

   SPI.transfer(SPI_CS, _addr >> 8, SPI_CONTINUE);

                                    ^

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:172:30: error: invalid conversion from 'int' to 'void*' [-fpermissive]

  SPI.transfer(SPI_CS, _buf[i]);

                              ^

In file included from C:\Users\user\Documents\Arduino\libraries\Ethernet2\src/utility/w5500.h:19:0,

                 from C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:18:

C:\Users\user\AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.4\libraries\SPI/SPI.h:177:15: error:   initializing argument 1 of 'void SPIClass::transfer(void*, size_t)' [-fpermissive]

   inline void transfer(void *buf, size_t count) {

               ^

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp: In static member function 'static uint8_t W5500Class::read(uint16_t, uint8_t)':

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:196:38: error: 'SPI_CONTINUE' was not declared in this scope

     SPI.transfer(SPI_CS, _addr >> 8, SPI_CONTINUE);

                                      ^

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:199:43: error: invalid conversion from 'int' to 'void*' [-fpermissive]

     uint8_t _data = SPI.transfer(SPI_CS, 0);

                                           ^

In file included from C:\Users\user\Documents\Arduino\libraries\Ethernet2\src/utility/w5500.h:19:0,

                 from C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:18:

C:\Users\user\AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.4\libraries\SPI/SPI.h:177:15: error:   initializing argument 1 of 'void SPIClass::transfer(void*, size_t)' [-fpermissive]

   inline void transfer(void *buf, size_t count) {

               ^

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:199:43: error: void value not ignored as it ought to be

     uint8_t _data = SPI.transfer(SPI_CS, 0);

                                           ^

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp: In static member function 'static uint16_t W5500Class::read(uint16_t, uint8_t, uint8_t*, uint16_t)':

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:227:38: error: 'SPI_CONTINUE' was not declared in this scope

     SPI.transfer(SPI_CS, _addr >> 8, SPI_CONTINUE);

                                      ^

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:233:42: error: invalid conversion from 'int' to 'void*' [-fpermissive]

     _buf[_len-1] = SPI.transfer(SPI_CS, 0);

                                          ^

In file included from C:\Users\user\Documents\Arduino\libraries\Ethernet2\src/utility/w5500.h:19:0,

                 from C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:18:

C:\Users\user\AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.4\libraries\SPI/SPI.h:177:15: error:   initializing argument 1 of 'void SPIClass::transfer(void*, size_t)' [-fpermissive]

   inline void transfer(void *buf, size_t count) {

               ^

C:\Users\user\Documents\Arduino\libraries\Ethernet2\src\utility\w5500.cpp:233:18: error: void value not ignored as it ought to be

     _buf[_len-1] = SPI.transfer(SPI_CS, 0);

                  ^

exit status 1
Error compiling.


Le085

So, I discovered that since there is no definition of the Arduino 101 in the W5500.cpp file of the ethernet2 library ( should be....  defined(_VARIANT_ARDUINO_101_X_) ... ) the init function call SPI functions that are not recognized by the installed SPI library. I tried to add the arduino 101 definition, but then I'm stuck with other errors on the   initSS()  setSS() and resetSS() definition...

I could imagine that this should be related to the ports for the SPI interface and I tried to ad te Arduino 101 definition to the same initialization for the Arduino Zero ( ARDUINO_ARCH_SAMD) since they share the same interface for SPI, but it didn't work:
Code: [Select]
  inline static void initSS()    { PORT->Group[g_APinDescription[10].ulPort].PINCFG[g_APinDescription[10].ulPin].reg&=~(uint8_t)(PORT_PINCFG_INEN) ;
   PORT->Group[g_APinDescription[10].ulPort].DIRSET.reg = (uint32_t)(1<<g_APinDescription[10].ulPin) ;
   PORT->Group[g_APinDescription[10].ulPort].PINCFG[g_APinDescription[10].ulPin].reg=(uint8_t)(PORT_PINCFG_PULLEN) ;
                                   PORT->Group[g_APinDescription[10].ulPort].OUTSET.reg = (1ul << g_APinDescription[10].ulPin) ; };
  inline static void setSS()     { PORT->Group[g_APinDescription[10].ulPort].OUTCLR.reg = (1ul << g_APinDescription[10].ulPin) ; };
  inline static void resetSS()   { PORT->Group[g_APinDescription[10].ulPort].OUTSET.reg = (1ul << g_APinDescription[10].ulPin) ; };


PORT is not defined for the Arduino 101 environment.

My knowledge ends here and I think that I cannot go further with the Ethernet shield.
Hope better luck with the ESP8266.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy