Search This Blog

Monday, May 14, 2018

MCP3008 - Analog to Digital Converter with SPI Interface

MCP3008 က Microchip က ထုတ်တဲ့ 8-channel, 10-bit analog to digital converter ဖြစ်ပါတယ်။


Figure. MCP3008 ၏ pin များ။


သူ့ကို single ended analog input အနေနဲ့ ရှစ်ခု သုံးလို့ ရပြီး၊ differential input pair အနေနဲ့ ဆို လေးစုံ သုံးလို့ ရပါတယ်။ Power supply ဗို့ 2.7 V ကနေ 5 V အထိ သုံးလို့ ရပြီး၊ အပူချိန် -40 °C ကနေ +85 °C အထိ ခံနိုင် ပါတယ်။ SPI interface ဖြစ်ပြီး mode 0 ဒါမှ မဟုတ် mode 3 နဲ့ သုံးနိုင် ပါတယ်။


Figure. MCP3008 အတွက် SPI mode 0 တွင် ဆက်သွယ်ပုံ နမူနာ။





Figure. MCP3008 ၏ control bit များ။


MCP3008 နဲ့ Arduino Uno ဘုတ် တစ်ခု ဆက်သွယ်ပုံ schematic နမူနာ တစ်ခု ကို အောက်က ပုံ မှာ တွေ့နိုင် ပါတယ်။


Figure. Arduino Uno နှင့် MCP3008 ဆက်သွယ်ပုံ နမူနာ။


Analog input channel 0 ကို ဖတ်ကြည့်တဲ့ နမူနာ ပရိုဂရမ် တစ်ခု ကို အောက်က စာရင်း မှာ တွေ့နိုင် ပါတယ်။
#include < SPI.h >
const int CS_Pin = 10;// set pin 10 as the chip select

SPISettings settingsA(2000000, MSBFIRST, SPI_MODE0); 
// set up the speed, data order and data mode
//SPI pin configuration: pin 11 as MOSI (SDI), 
//  pin 12 as MISO (SDO) , pin 13 as clock (SPC)

int x;
float K=0.00488758553; 
// (5/1023) V per digit for +5V full scale 
//  using 10 bit digital output

void setup() {
  Serial.begin(9600);
  pinMode (CS_Pin, OUTPUT);  
  digitalWrite(CS_Pin, HIGH);
  SPI.begin();
  SPI.beginTransaction(settingsA);
}

void loop() {
  delay(1000);
  digitalWrite(CS_Pin, LOW);//Enable SPI
  SPI.transfer(0x01);//Send start bit
  x = SPI.transfer(0x80)<<8 | SPI.transfer(0); //read channel 0
  digitalWrite(CS_Pin, HIGH);//Disable SPI
  x&=0x03FF;//mask out invalid bits
  Serial.println("x=" + String(x)+"   \t Voltage=" + String(K*x)+" V");
}



Figure. Arduino ၏ Serial Monitor အထွက်။