این مثال چگونگی کنترل یک دستگاه آنالوگ AD5171 پتانسیومتر دیجیتال را نشان می دهد که از طریق پروتل سریال I2C سنکرون ارتباط برقرار
می کند. با استفاده از کتابخانه I2c Wire آردینو ، پتانسیومتر دیجیتال در 64 مرحله از مقاومت، نور یک LED را گام به گام محو خواهد شد.
پروتکل I2C شامل استفاده از دو سیم برای ارسال و دریافت داده است: یک پین کلاک سریال (SCL) که پالس های آردینو در یک فاصله منظم باشد و دیگر یک پین سریال داده (SDA) ، که داده ها بین دو دستگاه فرستاده می شود. همانطور که پالس کلاک از پایین به بالا(شناخته شده به عنوان لبه بالا رونده کلاک) تغییر می کند، یک بیت از اطلاعات شامل آدرس یک دستگاه به خصوص و یک درخواست برای داده، از آردینو به دستگاه I2C بر روی خط SDA منتقل می شود. وقتی که پین کلاک از بالا به پایین (لبه پایین رونده کلاک) تغییر می کند. بر روی انتقال دستگاه نامیده می شود. داده های آن بر روی خط یکسان به آردینو دیگر برمی گردند. زیرا پروتکل I2C به هر دستگاه فعال اجازه داشتن یک آدرس منحصربه فرد را می دهد و مانند دو دستگاه maste و slave به برقراری به نوبت ارتباط بر روی یک خط تنها میسر می سازد، ممکن است آردینو شما با دستگاه های زیادی (به نوبت) ارتباط برقرار کند درحالی که تنها از دو پین از میکروکنترلر شما استفاده می شود.
سخت افزار موردنیاز
برد آردینو
پتانسیومتر دیجیتال AD5771
LED
(1) مقاومت 220 اهم
(2) مقاومت 4.7 کیلواهم
بِردبُرد
سیم
مدار
پین های 3 ، 6 و 7 از AD5171 را به زمین ، و پین های 2 و 8 به +5V متصل کنید. پین 4 ،پین کلاک پتانسیومتر دیجیتال (SCL) را به پین 5 آنالوگ روی آردینو ، و پین 5، خط(Line) داده (SDA) ، به پین 4 آنالوگ (آدرینو) متصل کنید. به هر دو خطوط SCL و SDA ، مقاومت بالاکش
(pull up) اضافه ، و هر دو خطوط را به +5V متصل کنید.
وقتی پین 6 آردینو ، ADO ، به زمین متصل است ؛ آدرس آن 44 است. برای افزودن یک پتانسیومتر دیگر به درگاه یکسان SDA ، پین ADO پتانسیومتر دوم را به +5V متصل کنید؛ آدرس آن به 45 تغییر می کند. شما تنها می توانید از دو پتانسیومتر بطور هم زمان استفاده کنید.
شماتیک
کد:
#include <Wire.h>
void setup()
{
Wire.begin(); // I2C پیوستن به درگاه
//(آدرس اختیاری برای مستر)
}
byte val = 0;
void loop()
{
Wire.beginTransmission(44); // انتقال به دستگاه #44 (0x2c)
// آدرس دستگاه در دیتاشیت مشخص است
Wire.write(byte(0x00)); // بایت دستورالعمل را ارسال می کند
Wire.write(val); // بایت مقدار پتانسیومتر را ارسال می کند
Wire.endTransmission(); // توقف انتقال
val++; // افزایش مقدار
if(val == 64) // اگر به شصت و چهارمین موقعیت رسید (max)
{
val = 0; // شروع از کمترین مقدار
}
delay(500);
}
لینک سایت:Arduino - DigitalPotentiometer