Სარჩევი:

DS1803 Dual Digital Potentiometer With Arduino: 5 ნაბიჯი
DS1803 Dual Digital Potentiometer With Arduino: 5 ნაბიჯი

ვიდეო: DS1803 Dual Digital Potentiometer With Arduino: 5 ნაბიჯი

ვიდეო: DS1803 Dual Digital Potentiometer With Arduino: 5 ნაბიჯი
ვიდეო: Mailbag! DS1803 Digital Pot and Other Silicon 2024, ნოემბერი
Anonim
DS1803 Dual Digital Potentiometer With Arduino
DS1803 Dual Digital Potentiometer With Arduino

მე მომწონს DS1803 ციფრული ჭურჭლის გამოყენების გაზიარება არდუინოსთან. ეს IC შეიცავს ორ ციფრულ ჭურჭელს, რომელთა კონტროლი შესაძლებელია ორი მავთულის ინტერფეისზე, ამისათვის მე ვიყენებ wire.h ბიბლიოთეკას.

ამ IC- ს შეუძლია შეცვალოს ჩვეულებრივი ანალოგური ქოთმეტრი. ამ გზით თქვენ შეგიძლიათ აკონტროლოთ მაგალითად გამაძლიერებელი ან კვების წყარო.

ამ ინსტრუქციურად მე ვაკონტროლებ ორი LED- ის სიკაშკაშეს, რომ ნახოთ მუშაობა.

არდუინო ითვლის მბრუნავი კოდირების იმპულსებს და ათავსებს მნიშვნელობას ცვლად ქოთანში [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" მხოლოდ მორგება potmeter-1. "დაწერეთ ორივე პოტენომეტრზე" ორივე პოტენომეტრს აძლევს ერთსა და იმავე მნიშვნელობას.

ნაბიჯი 3: კონტროლი DS1803

კონტროლი DS1803
კონტროლი DS1803

საკონტროლო ბაიტს (სურათი 3) აქვს მოწყობილობის იდენტიფიკატორი, ის ყოველთვის უცვლელი რჩება. ჩემს მაგალითში A0, A1 და A2 არის 0, რადგან ჩვენ ვირჩევთ მისამართს ყველა A- ქინძისთავის დასაყენებლად. ბოლო ბიტ R/W იქნება მითითებული 0 ან 1 ბრძანებით "Wire.beginTransmission" და "Wire.requestFrom" არდუინოში. ფიგურაში 5 შეგიძლიათ ნახოთ მთელი დეპეშა. წაკითხული დეპეშა ნაჩვენებია ფიგურაში 4.

ნაბიჯი 4: დაყენება

Აწყობა
Აწყობა

ეს წრე გვიჩვენებს, თუ როგორ უნდა დააკავშიროთ ყველაფერი. Nokia LCD ხელმისაწვდომია სხვადასხვა კავშირებით, დარწმუნდით, რომ თქვენ სწორად დააკავშირებთ. ასევე მბრუნავი კოდირების მისი სხვადასხვა ვერსიები, ზოგიერთი აქვს საერთო შუა pin სხვები არა. მე დავამატე პატარა ფილტრის ქსელი (470 Ohm რეზისტორი 100nF თავსახურით), რათა გამფილტრავდეს A და B გამომავალი სიგნალები. მე მჭირდება ეს ფილტრი, რადგან გამომავალს ჰქონდა ბევრი ხმაური. მე ასევე ჩავდე დებონუსის ტაიმერი ჩემს პროგრამაში, რომ ხმაური გავაუქმო. დანარჩენი მგონი წრე ნათელია. LCD– ის შეკვეთა შესაძლებელია Adafruit– ის საშუალებით

ნაბიჯი 5: პროგრამა

2 მავთულის ავტობუსის გამოსაყენებლად, მე შევიტან Wire.h ბიბლიოთეკას. LCD– ის გამოსაყენებლად შევიტან Adafruit ბიბლიოთეკას, რომელიც შეგიძლიათ გადმოწეროთ https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library ასევე 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 ბიტი, ბაიტი commandByte = B10101001; // ბოლო 2 ბიტი არის potmeter შერჩევა. ბაიტი potValue [2]; int i = 0; int deBounceTime = 10; // დაარეგულირეთ ეს მნიშვნელობა დამოკიდებულია ხმაურის const int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; ხელმოუწერელი გრძელი newDebounceTime = 0; ხელმოუწერელი long oldTime; ბული დაჭერილი = 0; ლოგიკური რაოდენობა = 1;

კონფიგურაციაში მე განვსაზღვრავ მარჯვენა ქინძისთავებს და სტატიკურ ტექსტს ვდებ LCD- ზე

void setup () {Wire.begin (); სერიული.დაწყება (9600); pinMode (encoder_A, INPUT); pinMode (encoder_B, INPUT); pinMode (buttonPin, INPUT); newDebounceTime = მილი ();

ჩვენება.დაწყება ();

ჩვენება. 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 ="); ჩვენება. ჩვენება ();

}

მარყუჟში მე პირველად ვამოწმებ არის თუ არა ინტერვალი 500ms- ზე მეტი, თუ კი LCD განახლდება. თუ არა, კოდირების ღილაკი შემოწმებულია. თუ დააჭირეთ toggleBuffer დარეკეთ. ამის შემდეგ კოდირების შემოწმება ხდება. თუ შესასვლელი 0 დაბალია (ბრუნვა გამოვლენილია) მე ვამოწმებ შეყვანას B, თუ შეყვანა B არის 0 I გაზრდის ქოთანი , სხვები მე ვამცირებ. ამის შემდეგ მნიშვნელობა გაიგზავნება DS1803- ზე wire.write- ის საშუალებით.

ბათილი მარყუჟი () {

ინტერვალი ();

if (digitalRead (buttonPin) == 1 && (დაჭერილი == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {დაჭერილი = 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;}} რაოდენობა = 1; newDebounceTime = მილი ();

Wire.beginTransmission (controlByte); // დაიწყეთ გადაცემა

Wire.write (commandByte); // potmeters შერჩევა Wire.write (ქოთანი [0] * 10); // გაგზავნეთ potmeter მონაცემების 1 ბაიტი Wire.write (pot [1] * 10); // გაგზავნეთ potmeter მონაცემების მე -2 ბაიტი Wire.endTransmission (); // შეწყვიტოს გადაცემა} სხვაგან თუ (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = მილი (); }}

void toggleBuffer () {დაჭერილი = 1; თუ (i == 0) {i = 1;} სხვა {i = 0;}}

ჯერ ვასუფთავებ იმ ადგილს, სადაც უნდა ვწერო ცვლადები. მე ამას ვაკეთებ ამ სფეროში მართკუთხედის დასახატად. ამის შემდეგ ვწერ ცვლადებს ეკრანზე.

void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // პირველი potmeter byte potValue [1] = Wire.read () წაკითხვა; // მეორე potmeter byte display.fillRect (40, 0, 40, 45, WHITE) წაკითხვა; // ცვლადი ცვლადი ეკრანი LCD ეკრანზე. setCursor (40, 10); display.print (potValue [0]); // ჩაწერეთ პირველი potmeter მნიშვნელობა LCD display.setCursor (40, 22); ჩვენება. ბეჭდვა (potValue [1]); // ჩაწერეთ მეორე potmeter მნიშვნელობა LCD display.setCursor (60, (10 + i * 12)); ჩვენება. ბეჭდვა ("<"); ჩვენება. ჩვენება (); }

void interval () {// ინტერვალის ქრონომეტრი მონაცემების LCD- ზე დასაწერად if ((millis () - oldTime)> 500) {writeToLCD (); oldTime = მილი (); }}

გირჩევთ: