Агуулгын хүснэгт:

DS1803 Arduino -той хос дижитал потенциометр: 5 алхам
DS1803 Arduino -той хос дижитал потенциометр: 5 алхам

Видео: DS1803 Arduino -той хос дижитал потенциометр: 5 алхам

Видео: DS1803 Arduino -той хос дижитал потенциометр: 5 алхам
Видео: Цифровые потенциометры и модуль на AD5245 2024, Долдугаар сарын
Anonim
DS1803 Arduino -той хос дижитал потенциометр
DS1803 Arduino -той хос дижитал потенциометр

Би DS1803 дижитал петрметрийн хэрэглээг Arduino -той хуваалцах дуртай. Энэхүү IC нь хоёр утастай интерфейсээр удирдах боломжтой хоёр дижитал потметрийг агуулдаг бөгөөд үүний тулд би утсыг ашигладаг.h номын сан.

Энэхүү IC нь ердийн аналог потметрийг орлох боломжтой. Ийм байдлаар та жишээ нь өсгөгч эсвэл цахилгаан хангамжийг хянах боломжтой болно.

Энэхүү зааварчилгаанд би хоёр LED -ийн гэрлийг хянаж, ажиллаж байгааг нь харуулдаг.

Arduino нь эргэдэг кодлогчын импульсийг тоолж, утгыг хувьсах тогоо [0] ба тогоонд [1] байрлуулдаг. Та кодлогч дээрх унтраалгыг дарахад та тогоо [0] ба тогоо [1] хооронд шилжиж болно.

Савны бодит үнэ цэнийг DS1803 -аас буцааж уншиж, potValue [0] ба potValue [1] хувьсагчид байрлуулж, LCD дэлгэц дээр харуулна.

Алхам 1: DS1803 -ийн холболтууд

DS1803 -ийн холболтууд
DS1803 -ийн холболтууд

Эндээс та DS1803 -ийн холболтыг харж болно. H нь потенциометрийн дээд тал, L доод тал, W арчигч. SCL ба SDA нь автобусны холболт юм.

A0, A1, A2 холболттой бол та DS1803 -д өөрийн хаягийг өгөх боломжтой бөгөөд ингэснээр та нэг автобусаар илүү олон төхөөрөмжийг удирдах боломжтой болно. Миний жишээн дээр би бүх тээглүүрийг газарт холбосноор DS1803 хаяг 0 -ийг өгсөн болно.

Алхам 2: Командын байт

Командын байт
Командын байт

DS1803 -ийн ажиллах аргыг командын байтад ашиглаж болно. "Потенциометр бичих-0" гэж сонгоход потенциометр хоёуланг нь сонгоно, хэрэв та зөвхөн потенциометр-0-ийг тохируулахыг хүсвэл зөвхөн эхний өгөгдлийн байтыг илгээх шаардлагатай болно. "Потенциометр бичих-1" зөвхөн потметр-1-ийг тохируулна уу. "Аль аль потенциометр рүү бичих" нь хоёуланд нь ижил утгыг өгдөг.

Алхам 3: DS1803 -ийн хяналт

DS1803 -ийн хяналт
DS1803 -ийн хяналт

Хяналтын байт (зураг 3) нь төхөөрөмжийн таниулбартай бөгөөд энэ нь үргэлж ижил хэвээр байна. Миний жишээн дээр A0, A1 ба A2 нь 0 байна, учир нь бид бүх А-зүүг газардуулж хаягийг сонгоно. Сүүлийн битийн R/W -ийг Arduino дээрх "Wire.beginTransmission" ба "Wire.requestFrom" командын дагуу 0 эсвэл 1 болгож тохируулна. 5 -р зурагт та телеграмыг бүхэлд нь харж болно. Уншсан телеграмыг 4 -р зурагт үзүүлэв.

Алхам 4: Тохируулах

Тохируулах
Тохируулах

Энэ хэлхээ нь бүх зүйлийг хэрхэн холбохыг харуулж байна. Nokia LCD нь өөр өөр холболттой байдаг тул та зөв холбосон эсэхээ шалгаарай. Мөн түүний өөр өөр хувилбартай эргэлддэг кодлогч, зарим нь дунд зүү дээр нийтлэг байдаг, бусад нь байдаггүй. Би кодлогчын A ба B гаралтын дохиог шүүхийн тулд бага хэмжээний шүүлтүүр сүлжээ (100nF таг бүхий 470 Ом эсэргүүцэл) тавьсан. Гаралт нь маш их дуу чимээтэй байсан тул надад энэ шүүлтүүр хэрэгтэй байна. Би ч гэсэн дуу чимээг цуцлахын тулд хөтөлбөрөө хасах таймер оруулсан. Бусад тохиолдолд хэлхээ нь тодорхой байна гэж бодож байна. LCD -ийг Adafruit https://www.adafruit.com/product/338 хаягаар захиалах боломжтой.

Алхам 5: Хөтөлбөр

2 утастай автобусыг ашиглахын тулд би Wire.h номын санг багтаасан болно. LCD ашиглахын тулд би https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library дээрээс татаж авах боломжтой Adafruit номын санг багтаасан бөгөөд Adafruit_GFX.h номын санг эндээс авах боломжтой https:// github. com/adafruit/Adafruit-GFX-Номын сан.

#оруулах

#оруулах

#оруулах

Adafruit_PCD8544 дэлгэц = Adafruit_PCD8544 (7, 6, 5, 4, 3);

Энд та бүх хувьсагчийг харж болно. Өмнө тайлбарласны дагуу байт ба командын байтыг хянах. DeBounceTime -ийг кодлогч дээрх дуу чимээнээс хамааран тохируулж болно.

байт сав [2] = {1, 1}; байт controlByte = B0101000; // 7 бит, байтын тушаалByte = B10101001; // сүүлийн 2 бит бол потметрийн сонголт юм. байт potValue [2]; int i = 0; int deBounceTime = 10; // Энэ утгыг дуу чимээ хамаарч тохируулна const int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; гарын үсэг зураагүй урт newDebounceTime = 0; гарын үсэг зураагүй урт хуучин цаг; логик дарагдсан = 0; логик тоо = 1;

Тохиргоонд би зөв зүүг тодорхойлж, статик текстийг LCD дээр байрлуулна

void setup () {Wire.begin (); Цуваа эхлэх (9600); pinMode (encoder_A, INPUT); pinMode (encoder_B, INPUT); pinMode (buttonPin, INPUT); newDebounceTime = millis ();

display.begin ();

display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (ХАР); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();

}

Гогцоонд эхлээд интервал 500 мс -ээс их эсэхийг шалгаарай, хэрэв тийм бол LCD шинэчлэгддэг. Үгүй бол кодлогч дээрх товчлуурыг шалгана. Хэрэв toggleBuffer дарагдсан бол дуудлага хийгээрэй. Үүний дараа кодлогчийг шалгана. Хэрэв 0 оролт бага байвал (эргэлт илэрсэн) Би В оролтыг шалгана, Хэрэв В оролт 0 бол би тогоо , бусад нь буурна. Үүний дараа утсыг DS1803 руу tel.write -ээр илгээх болно.

void loop () {

интервал ();

if (digitalRead (buttonPin) == 1 && (дарагдсан == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {pressed = 0;}

if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; if (pot > 25) {pot = 25;}} өөр {pot -; if (pot <1) {pot = 1;}} count = 1; newDebounceTime = millis ();

Утас.beginTransmission (controlByte); // дамжуулж эхлэх

Wire.write (commandByte); // potmeters -ийн сонголт Wire.write (тогоо [0] * 10); // potmeter өгөгдлийн 1 байт Wire.write илгээх (тогоо [1] * 10); // potmeter өгөгдлийн 2 -р байтыг илгээх Wire.endTransmission (); // дамжуулалтыг зогсоох} өөр тохиолдолд (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}

void toggleBuffer () {дарагдсан = 1; хэрэв (i == 0) {i = 1;} өөр {i = 0;}}

Эхлээд би янз бүрийн зүйлийг бичих ёстой хэсгийг цэвэрлэв. Би энэ хэсэгт тэгш өнцөгт зурахын тулд үүнийг хийдэг. Үүний дараа би хувьсагчдыг дэлгэц дээр бичдэг.

void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // эхний potmeter байт potValue [1] = Wire.read () -ийг уншина уу; // хоёр дахь потметрийн байтын дэлгэцийг уншина уу.fillRect (40, 0, 40, 45, ЦАГААН); // LCD дэлгэц дээрх хувьсах дэлгэцийг цэвэрлэх.setCursor (40, 10); display.print (potValue [0]); // 1 -р потметрийн утгыг LCD дэлгэц дээр бичнэ. setCursor (40, 22); display.print (potValue [1]); // LCD дэлгэц дээр 2 -р потметрийн утгыг бичнэ. setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }

void interval () {// интервал таймер нь LCD дээр өгөгдөл бичих бол ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}

Зөвлөмж болгож буй: