Talaan ng mga Nilalaman:
- Hakbang 1: Mga koneksyon ng DS1803
- Hakbang 2: Command Byte
- Hakbang 3: Pagkontrol sa DS1803
- Hakbang 4: Mag-set up
- Hakbang 5: Ang Programa
Video: DS1803 Dual Digital Potentiometer Sa Arduino: 5 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:14
Gusto kong ibahagi ang paggamit ng isang DS1803 digital potmeter sa isang Arduino. Naglalaman ang IC na ito ng dalawang digital potmeters na maaaring makontrol sa isang dalawang interface ng kawad, para dito ginagamit ko ang wire.h library.
Maaaring palitan ng IC na ito ang isang normal na analog potmeter. Sa ganitong paraan nagagawa mong makontrol halimbawa ang isang amplifier o power supply.
Sa itinuturo na ito kinokontrol ko ang ningning ng dalawang LED upang maipakita ang gumagana.
Binibilang ng arduino ang mga pulso ng isang rotary encoder at inilalagay ang halaga sa variable pot [0] at pot [1]. Kapag naitulak mo ang switch sa encoder, maaari kang lumipat sa pagitan ng palayok [0] at palayok [1].
Ang aktwal na halaga ng mga kaldero ay binabasa muli mula sa DS1803 at inilagay sa variable potValue [0] at potValue [1] at ipinapakita sa isang LCD.
Hakbang 1: Mga koneksyon ng DS1803
Makikita mo rito ang mga koneksyon ng DS1803. Ang H ay ang mataas na bahagi ng potensyomiter, L ang mababang bahagi at W ang wiper. Ang SCL at SDA ang mga koneksyon sa bus.
Sa koneksyon A0, A1 at A2 maaari mong ibigay sa DS1803 ang sariling adress, sa ganitong paraan maaari mong makontrol ang mas maraming mga aparato sa pamamagitan ng isang bus. Sa aking halimbawa ay binigyan ko ang DS1803 adres 0 sa pamamagitan ng pagkonekta sa lahat ng mga pin sa lupa.
Hakbang 2: Command Byte
Ang paraan ng pagpapatakbo ng DS1803 ay maaaring magamit sa byte ng utos. Kapag pinili mo ang "isulat ang potentiometer-0" ang parehong potentiometers ay napili, kapag nais mo lamang ayusin ang potentiometer-0, kailangan mo lamang ipadala ang unang byte ng data. Ang "isulat ang potentiometer-1" ayusin lamang ang potmeter-1. Ang "Sumulat sa parehong mga potensyal" ay nagbibigay sa parehong mga potensyal sa parehong halaga.
Hakbang 3: Pagkontrol sa DS1803
Ang control byte (figure 3) ay may isang pagkakakilanlan ng aparato, mananatili itong laging pareho. Sa aking halimbawang A0, A1 at A2 ay 0 dahil pipiliin namin ang mga adre sa pamamagitan ng paglalagay ng lupa sa lahat ng mga A-pin. Ang huling bit R / W ay itatakda sa 0 o 1 sa pamamagitan ng utos na "Wire.beginTransmission" at "Wire.requestFrom" sa Arduino. Sa pigura 5 maaari mong makita ang buong telegram. Ang binasang telegram ay ipinapakita sa larawan 4.
Hakbang 4: Mag-set up
Ipinapakita ng circuit na ito kung paano ikonekta ang lahat. Magagamit ang Nokia LCD na may iba't ibang mga koneksyon, siguraduhin na ikinonekta mo ang tama. Gayundin ang rotary encoder ang kanyang iba't ibang mga bersyon, ang ilan ay may karaniwan sa gitnang pin na iba hindi. Naglagay ako ng isang maliit na network ng filter (470 Ohm risistor na may cap na 100nF) upang salain ang mga signal ng output ng A at B ng encoder. Kailangan ko ng filter na ito dahil ang output ay mayroong maraming ingay. Naglagay din ako ng isang debounce timer sa aking programa upang kanselahin ang ilang ingay. Para sa natitirang palagay ko malinaw ang circuit. Maaaring mag-order ang LCD sa pamamagitan ng Adafruit
Hakbang 5: Ang Programa
Para sa paggamit ng 2-wire bus isinasama ko ang Wire.h library. Upang magamit ang LCD isinasama ko ang Adafruit library na maaari mong i-download mula sa https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library din ang Adafruit_GFX.h library ay magagamit dito https:// github. com / adafruit / Adafruit-GFX-Library.
# isama
# isama
# isama
Adafruit_PCD8544 display = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Makikita mo rito ang lahat ng mga variable. Kontrolin ang byte at command byte tulad ng inilarawan dati. Maaaring ayusin ang deBounceTime depende sa ingay sa iyong encoder.
byte pot [2] = {1, 1}; byte controlByte = B0101000; // 7 bits, byte commandByte = B10101001; // huling 2 piraso ay pagpipilian ng potmeter. byte potValue [2]; int i = 0; int deBounceTime = 10; // Ayusin ang halagang ito depende sa ingay const int encoder_A = 8; Const int encoder_B = 9; Const int buttonPin = 2; unsigned mahabang bagongDebounceTime = 0; unsigned matagal na ang datingTime; pinindot ang boolean = 0; bilang ng boolean = 1;
Sa pag-setup tinutukoy ko ang mga tamang pin at ilagay ang static na teksto sa LCD
void setup () {Wire.begin (); Serial.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 (BLACK); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
Sa loop ko muna suriin kung ang agwat ay higit sa 500ms, kung oo na-update ang LCD. Kung hindi ang pindutan sa encoder ay naka-check. Kung pinindot ang toggleBuffer tumawag. Pagkatapos nito ay naka-check ang encoder. Kung ang input 0 ay mababa (nakita ang pag-ikot) Sinusuri ko ang input B, kung ang input B ay 0 I increment pot , ang iba ay nababawasan ako. Pagkatapos nito, ipapadala ang halaga sa DS1803 sa pamamagitan ng wire.write.
void loop () {
agwat ();
kung (digitalRead (buttonPin) == 1 && (pinindot == 0)) {toggleBuffer ();} kung (digitalRead (buttonPin) == 0) {pinindot = 0;}
kung (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; kung (palayok > 25) {pot = 25;}} iba pa {pot -; kung (palayok <1) {palayok = 1;}} bilangin = 1; newDebounceTime = millis ();
Wire.beginTransmission (controlByte); // simulang magpadala
Wire.write (commandByte); // pagpili ng potmeters Wire.write (palayok [0] * 10); // send 1st byte of potmeter data Wire.write (palayok [1] * 10); // send 2nd byte of potmeter data Wire.endTransmission (); // stop transmitting} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {pinindot = 1; kung (i == 0) {i = 1;} iba pa {i = 0;}}
Una kong linisin ang lugar kung saan kailangan kong magsulat ng mga varibles. Ginagawa ko ito upang gumuhit ng isang rektanggulo sa lugar na ito. Pagkatapos nito isulat ko ang mga variable sa screen.
walang bisa ang magsulatToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // read first potmeter byte potValue [1] = Wire.read (); // basahin ang pangalawang potmeter byte display.fillRect (40, 0, 40, 45, WHITE); // clear variable screen sa LCD display.setCursor (40, 10); display.print (potValue [0]); // isulat ang unang halaga ng potmeter sa LCD display.setCursor (40, 22); display.print (potValue [1]); // isulat ang ika-2 na halaga ng potmeter sa LCD display.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// interval timer upang magsulat ng data sa LCD kung ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Inirerekumendang:
Kontrolin ng Arduino ang Bilis at Direksyon ng Motor ng DC Paggamit ng isang Potentiometer, OLED Display & Buttons: 6 na Hakbang
Arduino Control DC Bilis at Direksyon ng Motor Gamit ang isang Potentiometer, OLED Display & Buttons: Sa tutorial na ito matututunan natin kung paano gumamit ng isang driver ng L298N DC MOTOR CONTROL at isang potentiometer upang makontrol ang isang bilis at direksyon ng motor ng DC na may dalawang mga pindutan at ipakita ang halagang potensyomiter sa OLED Display. Manood ng isang video ng demonstrasyon
MCP41HVX1 Digital Potentiometer para sa Arduino: 10 Hakbang (na may Mga Larawan)
Ang MCP41HVX1 Digital Potentiometer para sa Arduino: Ang pamilya ng MCP41HVX1 ng mga digital potentiometers (aka DigiPots) ay mga aparato na ginagaya ang pagpapaandar ng isang analog potentiometer at kinokontrol sa pamamagitan ng SPI. Ang isang halimbawang application ay papalitan ang volume knob sa iyong stereo ng isang DigiPot na
Murang Dual Dual 30V / 2A Project Power Supply: 7 Hakbang (na may Mga Larawan)
Murang Dobleng 30V / 2A Project Power Supply: Kapag naghahanap ng mga module ng supply ng kuryente at mga LCD screen, natagpuan ko ang isang pares ng mga murang LCD 35W power supply module na na-rate sa 0.5-30V @ 3A (50W na may heatsink at 4A surge kasalukuyang). Mayroon itong pagsasaayos ng Boltahe at kasalukuyang limiter. Mayroon ding
Fading / Controlling Led / brightness Paggamit ng Potentiometer (Variable Resistor) at Arduino Uno: 3 Mga Hakbang
Fading / Controlling Led / brightness Paggamit ng Potentiometer (Variable Resistor) at Arduino Uno: Ang Arduino analog input pin ay konektado sa output ng potentiometer. Kaya ang Arduino ADC (analog sa digital converter) na analog pin ay binabasa ang output boltahe ng potensyomiter. Ang pag-ikot ng potentiometer knob ay nag-iiba-iba ang output ng boltahe at Arduino
Paano Buksan ang isang Western Digital Dual-Option na USB Enclosure: 5 Hakbang
Paano Magbukas ng isang Western Digital Dual-Option USB Enclosure: Ang Western Digital Dual-Option na mga enclosure ng USB ay madaling gamiting aparato para sa pagdala ng data (mataas na throughput sneakernet) o para lamang sa paggawa ng mga offline na pag-backup ng iyong data. Sa kalaunan ay maaari mong mapagtanto na tumatakbo ka mababa sa kapasidad, o baka mamatay ang iyong drive