2020年5月8日金曜日

AnalogDiscovery2でLogic Analizer (SPI)

AnalogDiscovery2のロジアナ機能で手始めにSPIの信号を測定しました。

ArduinoとMCP4922を使ってノコギリ波を出力し、AD2のScopeで出力波形、LogicでSPI信号を測定しました。

ブレッドボード配線

Arduinoのスケッチ <MCP4922_Test.ino>


#include <SPI.h>

#define PIN_CS     10     // MCP4922のCSピン
#define PIN_LDAC   9      // MCP4922のラッチピン

SPISettings MCP4922Settings(1000000, MSBFIRST, SPI_MODE0);
uint16_t cnt = 0;

// MCP4922に出力
// parameter: v: 出力値(0 .. 4095)
void MCP4922Write(int16_t v)
{
  SPI.beginTransaction(MCP4922Settings);
  digitalWrite(PIN_LDAC, HIGH) ;
  digitalWrite(PIN_CS, LOW) ;
  SPI.transfer((v >> 8)| 0x30) ;
  SPI.transfer(v & 0xff) ;
  digitalWrite(PIN_CS, HIGH) ;
  digitalWrite(PIN_LDAC, LOW) ;
  SPI.endTransaction();
}

void setup() {
  // MCP4922出力の初期化
  pinMode(PIN_CS, OUTPUT);
  digitalWrite(PIN_CS, HIGH); // Initial High
  pinMode(PIN_LDAC, OUTPUT);
  SPI.begin();
}

void loop() {
  MCP4922Write(cnt & 0x0FFF);
  cnt++;
}

出力波形

SPI信号

SPI信号はデータの2バイト目:h00でトリガをかけています。Measurements機能でFrequencyを測定すると約27.7kHzになっています。MCP4922をArduino Unoで使うと出力波形のサンプリングレートはこのあたりが上限になります。(SPI CLock: 1MHzの場合)

0 件のコメント:

コメントを投稿