1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Arduino Micro/MKR1000 SPI通信

Last updated at Posted at 2019-12-15

Arduino Micro/MKR1000 でSPI 通信を行った時のメモです。特にピンアサインを見つけるまでに時間がかかってしまいました。

Arduino MICRO

スイッチサイエンスのページArduino Micro 5V 16MHzにあるピン配置を見ると、

image.png

と記載があります。SPI 通信に必要なピンは青で囲った4つのピン(SCK,MISO,MOSI,SS)なのです、これらのピンの使い方はわかりませんでした

Arduino IDE v1.8.8 を使っています。

SPI 信号ピン

image.png

こちらのピンを使うと、それぞれの信号を出すことができます。SS はどこのGPIO を使ても良いのですが、とりあえず、D13 を使いました。

image.png

SPI プログラム

以下のようなプログラムでSPIで書き込むことができます。

spiexample.ino
# define SSPIN 13
// SS PIN の制御
void set_ss_pin(int val) {
// digitalWrite(13,val); // Digital Writeだと遅いので、ポートに直接書き込みました
   if(val ==HIGH) PORTC |= B10000000;
   else PORTC &= ~B10000000;
}

// SPI に1バイトのデータを書き込みます
void data_write(char addr,unsigned char data){
   set_ss_pin(LOW);
   SPI.transfer(addr);
   SPI.transfer(data);    
   set_ss_pin(HIGH);  
}

setup()
{
   pinMode(SSPIN,OUTPUT);
   set_ss_pin(HIGH);
   SPI.setBitOrder(MSBFIRST);
   SPI.setClockDivider(SPI_CLOCK_DIV8);
   SPI.setDataMode(SPI_MODE0);
   SPI.begin();
}

MKR1000 SPI ピン

MKR1000 はピンの記載の通りで動作します。SS はGPIO6(PA20) を使いました。

image.png

MKR1000 SPI プログラム

spiexample.ino
writeSingle( unsigned char adrs, unsigned char data )
{
// digitalWrite(SSPin, HIGH);  // Digital Writeだと遅いので、ポートに直接書き込みました
   REG_PORT_OUTCLR0 = PORT_PA20;
   SPI.transfer(adrs);
   SPI.transfer(data);
   REG_PORT_OUTSET0 = PORT_PA20;
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?