LoginSignup
1
1

More than 5 years have passed since last update.

STM32F103 + Arduino 開発環境で SPI A/Dコンバータ MCP3008 をつなぐ

Last updated at Posted at 2019-01-26

SPI の基準環境を作る必要があったので、使い慣れた MCP3008 で作ってみました。

環境

  • RobotDyn STM32 MINI (Blue Pill 互換)
  • Microchip MCP3008
  • Arduino 1.85 + STM32Duino

接続

信号 MCP3008 STM32F103
CS 10PIN /CS PA4
SCK 13PIN CLK PA5
MISO 12PIN DOUT PA6
MOSI 11PIN DIN PA7

IMG_20190127_002451.jpg
IMG_20190127_002207.jpg

テストなので適当な抵抗で分圧すればいいのですが、面白くないのでタッチセンサを作ってみました。
CH0 2.2MΩでプルダウンをし、更に虫ピンを接続して空中に立てています(ブレッドボード上の11b)。
虫ピンに触ると人体のノイズを取得するということになります。

スケッチ

ハードウェアSPIをつなぎます。
シリアルモニタで値を見ます。
PA9,PA10に繋いだUSBシリアルに出力しています。


#include <SPI.h>
#define SPI_CS_PIN PA4
int counter=0;
byte data;

void setup() {
  Serial1.begin(9600);
  SPI.begin(); 
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode(SPI_MODE0);
  SPI.setClockDivider(SPI_CLOCK_DIV16);
  pinMode(SPI_CS_PIN, OUTPUT);
}

void loop() {
  digitalWrite(SPI_CS_PIN, LOW);
  SPI.transfer(0b00000001); 
  byte data1 = SPI.transfer(0x80);  // ch 0
  byte data2 = SPI.transfer(0x00);
  digitalWrite(SPI_CS_PIN, HIGH);
  unsigned int CH0 = ((data1 & 0x03) << 8) + data2;

  Serial1.println(CH0);

  delay(1000);
}

実行結果

image.png

虫ピンに触ったのがうまく検出できました。乾燥している冬だったのでうまくいったのかも知れません。湿度の高い夏などでもうまく行くかどうかは?

おまけ

nRF52840につなぐ場合は、標準では以下のようになります。

SPIデバイス側 信号名 Define定義 MDBT50Q DB(nRF52840)側
CLK SDC_SDK_PIN ARDUINO_13_PIN P1.15
DI SDC_MOSI_PIN ARDUINO_11_PIN P1.13
DO SDC_MISO_PIN ARDUINO_12_PIN P1.14
CS SDC_CS_PIN ARDUINO_10_PIN P1.12
VCC 適当なVCC
GND GND
1
1
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
1