Satura rādītājs:
- 1. darbība: DS1803 savienojumi
- 2. darbība: komandu baits
- 3. darbība: DS1803 vadība
- 4. darbība: iestatīšana
- 5. solis: programma
Video: DS1803 divkāršs digitālais potenciometrs ar Arduino: 5 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
Man patīk dalīties ar digitālā potmetra DS1803 lietošanu ar Arduino. Šajā IC ir divi digitālie potmetri, kurus var vadīt, izmantojot divu vadu saskarni, tāpēc es izmantoju wire.h bibliotēku.
Šis IC var aizstāt parasto analogo potmetru. Tādā veidā jūs varat kontrolēt, piemēram, pastiprinātāju vai barošanas avotu.
Šajā pamācībā es kontrolēju divu gaismas diodes spilgtumu, lai parādītu darbu.
Arduīno saskaita rotējošā kodētāja impulsus un ievieto vērtību mainīgajā katlā [0] un katlā [1]. Nospiežot kodētāja slēdzi, varat pārslēgties starp pot [0] un pot [1].
Katlu faktiskā vērtība tiek nolasīta no DS1803 un ievietota mainīgajos potValue [0] un potValue [1] un parādīta LCD.
1. darbība: DS1803 savienojumi
Šeit jūs varat redzēt DS1803 savienojumus. H ir potenciometra augstā puse, L apakšējā puse un W tīrītājs. SCL un SDA ir kopnes savienojumi.
Izmantojot savienojumu A0, A1 un A2, jūs varat piešķirt DS1803 savu adresi, tādējādi jūs varat kontrolēt vairāk ierīču, izmantojot vienu kopni. Savā piemērā es esmu norādījis DS1803 adresi 0, savienojot visas tapas ar zemi.
2. darbība: komandu baits
DS1803 darbības veidu var izmantot komandu baitos. Izvēloties "rakstīt potenciometru-0", tiek atlasīti abi potenciometri, un, ja vēlaties pielāgot tikai potenciometru-0, jums jānosūta tikai pirmais datu baits. "Rakstīšanas potenciometrs-1" regulē tikai potmetru-1. "Rakstīt abiem potenciometriem" dod abiem potenciometriem vienādu vērtību.
3. darbība: DS1803 vadība
Vadības baitam (3. attēls) ir ierīces identifikators, tas vienmēr paliek nemainīgs. Manā piemērā A0, A1 un A2 ir 0, jo mēs izvēlamies adresi, noliekot visas A tapas pie zemes. Pēdējais bits R/W tiks iestatīts uz 0 vai 1 ar komandu "Wire.beginTransmission" un "Wire.requestFrom" Arduino. 5. attēlā var redzēt visu telegrammu. Lasītā telegramma ir parādīta 4. attēlā.
4. darbība: iestatīšana
Šī shēma parāda, kā visu savienot. Nokia LCD ir pieejams ar dažādiem savienojumiem, pārliecinieties, vai esat pareizi pievienojis savu. Arī rotācijas kodētājs viņa dažādās versijās, dažiem ir kopīgs uz vidējās tapas, citiem nav. Esmu ievietojis nelielu filtru tīklu (470 omu rezistors ar 100nF vāciņu), lai filtrētu kodētāja A un B izejas signālus. Man ir vajadzīgs šis filtrs, jo izejā bija daudz trokšņa. Es savā programmā ievietoju arī atslēgšanās taimeri, lai atceltu troksni. Par pārējo es domāju, ka ķēde ir skaidra. LCD var pasūtīt, izmantojot Adafruit
5. solis: programma
Lai izmantotu 2 vadu kopni, es iekļauju Wire.h bibliotēku. Lai izmantotu LCD, es iekļauju Adafruit bibliotēku, kuru varat lejupielādēt vietnē https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library, kā arī Adafruit_GFX.h bibliotēka ir pieejama šeit https:// github. com/adafruit/Adafruit-GFX-Library.
#iekļaut
#iekļaut
#iekļaut
Adafruit_PCD8544 displejs = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Šeit jūs varat redzēt visus mainīgos. Kontrolējiet baitu un komandu baitu, kā aprakstīts iepriekš. DeBounceTime var pielāgot atkarībā no kodētāja radītā trokšņa.
baitu katls [2] = {1, 1}; baitu kontroleBīts = B0101000; // 7 biti, baitu komandaByte = B10101001; // pēdējie 2 biti ir potmetra izvēle. baits potValue [2]; int i = 0; int deBounceTime = 10; // Pielāgojiet šo vērtību atkarībā no trokšņa konst int kodētājs_A = 8; const int kodētājs_B = 9; const int pogaPin = 2; neparakstīts garš newDebounceTime = 0; neparakstīts ilgi oldTime; Būla nospiests = 0; Būla skaitlis = 1;
Iestatījumā es definēju pareizās tapas un ievietoju statisko tekstu LCD
void setup () {Wire.begin (); Sērijas sākums (9600); pinMode (kodētājs_A, IEEJA); pinMode (kodētājs_B, IEEJA); pinMode (buttonPin, INPUT); newDebounceTime = milis ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (BLACK); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
Ciklā es vispirms pārbaudu, vai intervāls ir lielāks par 500 ms, ja jā, LCD tiek atjaunināts. Ja nē, kodētāja poga ir pārbaudīta. Nospiežot pārslēgšanas buferi, tiek izsaukts. Pēc tam kodētājs tiek pārbaudīts. Ja ieeja 0 ir zema (ir konstatēta rotācija), es pārbaudu ievadi B, ja ievade B ir 0 I pieauguma katls , citi - samazinājumu. Pēc tam vērtība tiks nosūtīta uz DS1803, izmantojot wire.write.
void loop () {
intervāls ();
ja (digitalRead (buttonPin) == 1 && (nospiests == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {nospiests = 0;}
ja (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {ja (digitalRead (encoder_B) == 0) {pot ++; ja (pot > 25) {pot = 25;}} cits {pot -; ja (pot <1) {pot = 1;}} skaits = 1; newDebounceTime = milis ();
Wire.beginTransmission (controlByte); // sākt pārraidīt
Wire.write (commandByte); // potmetru izvēle Wire.write (pot [0] * 10); // nosūtīt potmetra datu 1. baitu Wire.write (pot [1] * 10); // nosūtīt potmetra datu 2. baitu Wire.endTransmission (); // pārtraukt pārraidi} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = milis (); }}
void toggleBuffer () {nospiests = 1; ja (i == 0) {i = 1;} cits {i = 0;}}
Vispirms es notīrīju apgabalu, kurā jāraksta mainīgie. Es to daru, lai šajā jomā uzzīmētu taisnstūri. Pēc tam es uzrakstu ekrānā mainīgos.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // lasīt pirmo potmetra baitu potValue [1] = Wire.read (); // lasīt otrā potmetra baitu displeju.fillRect (40, 0, 40, 45, WHITE); // notīrīt mainīgo ekrānu LCD displejā.setCursor (40, 10); display.print (potValue [0]); // LCD displejā ierakstīt 1. potmetra vērtību.setCursor (40, 22); display.print (potValue [1]); // LCD displejā ierakstīt 2. potmetra vērtību.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// intervāla taimeris datu ierakstīšanai LCD, ja ((milis () - oldTime)> 500) {writeToLCD (); oldTime = milis (); }}
Ieteicams:
LM3886 jaudas pastiprinātājs, divkāršs vai tilts (uzlabots): 11 soļi (ar attēliem)
LM3886 jaudas pastiprinātājs, divkāršs vai tilts (uzlabots): ja jums ir zināma pieredze elektronikā, ir viegli izveidot kompaktu divjaudas (vai tilta) pastiprinātāju. Nepieciešamas tikai dažas detaļas. Protams, ir vēl vieglāk izveidot mono pastiprinātāju. Būtiski jautājumi ir barošanas avots un dzesēšana. Ar
MCP41HVX1 digitālais potenciometrs Arduino: 10 soļi (ar attēliem)
MCP41HVX1 digitālais potenciometrs Arduino: MCP41HVX1 digitālo potenciometru (pazīstams arī kā DigiPots) saime ir ierīces, kas atdarina analoga potenciometra funkciju un tiek kontrolētas caur SPI. Lietojumprogrammas piemērs būtu stereo skaļuma regulēšanas pogas aizstāšana ar DigiPot, kas ir
Lēts divkāršs 30V/2A projekta barošanas avots: 7 soļi (ar attēliem)
Lēts divkāršs 30V/2A projekta barošanas avots: meklējot barošanas moduļus un LCD ekrānus, es saskāros ar dažiem no šiem lētajiem LCD 35 W barošanas moduļiem, kuru nominālā vērtība ir 0,5-30 V @3A (50 W ar radiatoru un 4A pārsprieguma strāvu). Tam ir sprieguma regulētājs un strāvas ierobežotājs. Ir arī
Potenciometrs un servo: kontrolēta kustība ar Arduino: 4 soļi
Potenciometrs un servo: kontrolēta kustība ar Arduino: vispirms jums ir jāsavāc attiecīgie materiāli, lai saliktu šo ķēdi
RGB LED, ko kontrolē Bluetooth vai potenciometrs: 5 soļi
RGB LED, ko kontrolē Bluetooth vai potenciometrs: Sveiki! Šodien es vēlējos dalīties ar jums savā Arduino projektā. Esmu padarījis RGB vadītu Arduino kontrolētu. Tam ir 3 režīmi un 2 saskarnes. Pirmais režīms ir manuāla vadība, otrs atdzist varavīksne un trešā krāsu slēdzene. Sākumā jūs kalibrējat potenciometru. Tad tu