در این آموزش شما چگونگی کنترل پتانسیومتر دیجیتال AD5206 را با استفاده از واسط وسایل جانبی (SPI) خواهید آموخت.
برای توضیح SPI آموزش SPI EEPROM را ببنید.
پتانسیومترهای دیجیتال وقتی مفید هستند که شما به تغییر مقاومت در یک مدار بصورت الکترونیکی احتیاج دارید نه به وسیله دست. برنامه های کاربردی به عنوان مثال عبارتند از LED کاهنده نور، اصلاح سیگنال های صوتی و تولید تن. در این مثال ما از یک پتانسیومتر شش کاناله برای کنترل روشنایی شش LED استفاده کردیم. مرحله ای که ما می خواهیم برای اجرای ارتباط SPI پوشش دهیم می تواند برای استفاده از اکثر دیگر دستگاههای SPI اصلاح شود.
سخت افزار مورد نیاز
پتانسیومتر دیجیتال AD5206
ماژول میکروکنترلر آدرینو
6 دیود نوری (LED)
6 مقاومت 220 اهم
معرفی پتانسیومتر دیجیتال AD5206
AD5206 یک پتانسیومتر دیجیتال 6 کاناله است. این بدان معنی است که دارای 6 مقاومت(پتانسیومتر) متغیر برای کنترل الکترونیکی اختصاصی ساخته شده است. برای هر شش مقاومت متغیر داخلی ،سه پین بروی تراشه وجود داردو آنها می توانند واسط باشند همانند استفاده شما از یک پتانسیومتر مکانیکی
پین های اختصاصی مقاومت متغیر دارای برچسب Ax و Bx و Wx هستند به عنوان مثال A1 , B1 و W1 .برای نمونه در این آموزش ما می خواهیم از هر مقاومت متغیر همانند یک تقسیم کننده ی ولتاژ توسط خمیدگی یک طرف پین(پین B) بالا، و خمیدگی سمت دیگر پین (پین A) پایین استفاده کنیم و ولتاژ متغیر خروجی از پین مرکزی(Wiper) بگیریم. دراین مورد ، AD5206 یک ماکزیمم مقاومت از 10 کیلو را فراهم می کند. در 255 مرحله تحویل داده می شود.(255 حداکثر، 0 حداقل)
مدار:
تصویر از Fritzing .برای مثال های بیشتر ،به صفحه پروژه Fritzng نگاه کنید.
شماتیک
کد:
// SPI قراردان کتابخانه :
#include <SPI.h>
// برای پتانسیومتر دیجیتال slave تنظیم پین 10 به عنوان:
const int slaveSelectPin = 10;
void setup() {
// به عنوان خروجی slaveSelectPin تنظیم :
pinMode (slaveSelectPin, OUTPUT);
// initialize SPI:
SPI.begin();
}
void loop() {
// رفتن به شش کانال پتانسیومتر دیجیتال:
for (int channel = 0; channel < 6; channel++) {
// تغییر مقاومت این کانال از مین تا ماکس:
for (int level = 0; level < 255; level++) {
digitalPotWrite(channel, level);
delay(10);
}
// انتظار تا یک ثانیه در بالا :
delay(100);
// تغییر مقاومت این کانال از ماکس تا مین :
for (int level = 0; level < 255; level++) {
digitalPotWrite(channel, 255 - level);
delay(10);
}
}
}
int digitalPotWrite(int address, int value) {
// برای انتخاب چیپ low روی SS قرارگیری پین :
digitalWrite(slaveSelectPin,LOW);
// send in the address and value via SPI:
SPI.transfer(address);
SPI.transfer(value);
// برای انتخاب دوباره چیپ high روی SS قرارگیری پین :
digitalWrite(slaveSelectPin,HIGH);
}
لینک سایت:Arduino - SPIDigitalPot