Sisällysluettelo:
- Vaihe 1: DS1803: n liitännät
- Vaihe 2: Komento tavu
- Vaihe 3: DS1803: n ohjaus
- Vaihe 4: Asenna
- Vaihe 5: Ohjelma
Video: DS1803 Dual Digital -potentiometri Arduinolla: 5 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:03
Haluan jakaa DS1803 -digitaalisen potometrin käytön Arduinon kanssa. Tämä IC sisältää kaksi digitaalista potmetria, joita voidaan ohjata kaksijohtimisen rajapinnan kautta, tätä varten käytän wire.h -kirjastoa.
Tämä IC voi korvata normaalin analogisen potterimittarin. Tällä tavalla voit ohjata esimerkiksi vahvistinta tai virtalähdettä.
Tässä ohjeessa ohjaan kahden LEDin kirkkautta näyttääkseni työskentelyn.
Arduino laskee pyörivän anturin pulssit ja sijoittaa arvon muuttuvaan pottiin [0] ja pottiin [1]. Kun painat anturin kytkintä, voit vaihtaa potin [0] ja potin [1] välillä.
Ruukkujen todellinen arvo luetaan takaisin DS1803: sta ja sijoitetaan muuttujiin potValue [0] ja potValue [1] ja näytetään nestekidenäytöllä.
Vaihe 1: DS1803: n liitännät
Täältä näet DS1803: n liitännät. H on potentiometrin korkea puoli, L matala puoli ja W pyyhin. SCL ja SDA ovat väyläyhteyksiä.
Liitännöillä A0, A1 ja A2 voit antaa DS1803: lle oman osoitteen, jolloin voit ohjata useampia laitteita yhden väylän kautta. Esimerkissäni olen antanut DS1803 -osoitteen 0 yhdistämällä kaikki nastat maahan.
Vaihe 2: Komento tavu
DS1803: n toimintaa voidaan käyttää komentotavussa. Kun valitset "kirjoittaa potentiometri-0", molemmat potentiometrit valitaan, kun haluat säätää vain potentiometriä-0, sinun on lähetettävä vain ensimmäinen datatavu. "Kirjoita potentiometri-1" säädä vain potmetria-1. "Kirjoita molempiin potentiometreihin" antaa molemmille potentiometreille saman arvon.
Vaihe 3: DS1803: n ohjaus
Ohjaustavulla (kuva 3) on laitetunniste, joka pysyy aina samana. Esimerkissäni A0, A1 ja A2 ovat 0, koska valitsemme osoitteen asettamalla kaikki A-nastat maahan. Viimeinen bitti R/W asetetaan arvoon 0 tai 1 komennolla "Wire.beginTransmission" ja "Wire.requestFrom" Arduinossa. Kuvassa 5 näet koko sähkeen. Luettu sähke on esitetty kuvassa 4.
Vaihe 4: Asenna
Tämä piiri näyttää kuinka kaikki yhdistetään. Nokian LCD -näyttö on saatavana eri liitännöillä, varmista, että liität oikein. Myös pyörivän kooderin eri versiot, joillakin on yhteinen keskitapilla, toisilla ei. Olen laittanut pienen suodatinverkon (470 ohmin vastus 100nF: n korkilla) suodattamaan anturin A- ja B -lähtösignaalit. Tarvitsen tämän suodattimen, koska lähdössä oli paljon melua. Laitoin myös ohjelmaan katkaisuajastimen melun poistamiseksi. Muuten piiri on mielestäni selvä. Nestekidenäytön voi tilata Adafruitin kautta
Vaihe 5: Ohjelma
Käytän 2-johdinväylän käyttöä varten Wire.h-kirjastoa. LCD-näytön käyttämiseen kuuluu Adafruit-kirjasto, jonka voit ladata osoitteesta https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library, myös Adafruit_GFX.h-kirjasto on saatavilla täältä https:// github. fi/adafruit/Adafruit-GFX-kirjasto.
#sisältää
#sisältää
#sisältää
Adafruit_PCD8544 -näyttö = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Täältä näet kaikki muuttujat. Hallitse tavu ja komento tavu kuten edellä on kuvattu. DeBounceTime -aikaa voidaan säätää koodaajan kohinan mukaan.
tavupotti [2] = {1, 1}; tavukontrolliByte = B0101000; // 7 bittiä, tavukomentoByte = B10101001; // viimeiset 2 bittiä on potterimittarin valinta. tavu potValue [2]; int i = 0; int deBounceTime = 10; // Säädä tätä arvoa kohinakonstin mukaan int encoder_A = 8; const int kooderi_B = 9; const int -painikePin = 2; allekirjoittamaton pitkä newDebounceTime = 0; allekirjoittamaton pitkä oldTime; boolean -painettu = 0; boolean count = 1;
Asetuksissa määritän oikeat nastat ja asetan staattisen tekstin nestekidenäyttöön
void setup () {Wire.begin (); Sarja.alku (9600); pinMode (kooderi_A, TULO); pinMode (kooderi_B, TULO); pinMode (buttonPin, INPUT); newDebounceTime = millis ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (MUSTA); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
Silmukassa tarkistan ensin, onko väli yli 500 ms, jos kyllä, nestekidenäyttö päivittyy. Jos ei, lähettimen painike tarkistetaan. Jos painat toggleBufferia, soitetaan. Tämän jälkeen kooderi tarkistetaan. Jos tulo 0 on alhainen (kierto havaittu), tarkistan tulon B, jos tulo B on 0 I lisäyspotti , muut I vähentävät. Tämän jälkeen arvo lähetetään DS1803: lle wire.write -yhteyden kautta.
void loop () {
väli ();
if (digitalRead (buttonPin) == 1 && (painettu == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {painettu = 0;}
if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; if (pot > 25) {pot = 25;}} else {pot -; if (pot <1) {pot = 1;}} count = 1; newDebounceTime = millis ();
Wire.beginTransmission (controlByte); // aloita lähettäminen
Wire.write (commandByte); // potometrien valinta Wire.write (potti [0] * 10); // lähetä potttimittarin 1. tavu Wire.write (potti [1] * 10); // lähetä potttimittatiedon toinen tavu Wire.endTransmission (); // lopeta lähetys} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {painettu = 1; jos (i == 0) {i = 1;} muu {i = 0;}}
Ensin tyhjennän alueen, johon minun on kirjoitettava muuttujat. Teen tämän piirtääkseni suorakulmion tälle alueelle. Tämän jälkeen kirjoitan muuttujat näytölle.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // lue ensimmäinen potometrin tavu potValue [1] = Wire.read (); // lukee toisen potmetrin tavun näyttö.fillRect (40, 0, 40, 45, WHITE); // tyhjennä muuttuva näyttö nestekidenäytöstä. setCursor (40, 10); display.print (potValue [0]); // kirjoittaa 1. potmetrin arvo LCD -näyttöön. setCursor (40, 22); display.print (potValue [1]); // kirjoita toinen potmetrin arvo LCD -näyttöön. setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// intervalliajastin tietojen kirjoittamiseen nestekidenäyttöön, jos ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Suositeltava:
Moottorin nopeuden mittaus Arduinolla: 6 vaihetta
Moottorin nopeuden mittaus Arduinon avulla: Onko moottorin kierrosluvun mittaaminen vaikeaa? En usko. Tässä on yksi yksinkertainen ratkaisu: Vain yksi infrapuna -anturi ja Arduino sarjassasi voivat tehdä niin. Tässä viestissä annan yksinkertaisen opetusohjelman, jossa selitetään kuinka mitata minkä tahansa moottorin kierrosluku IR -anturia ja A
Kasvimonitorin rakentaminen Arduinolla: 7 vaihetta
Kasvimonitorin rakentaminen Arduinolla: Tässä opetusohjelmassa opimme tunnistamaan maaperän kosteuden kosteusanturin avulla ja vilkkumaan vihreän LED -valon, jos kaikki on kunnossa ja OLED -näyttö ja Visuino
Liitäntäkaasuanturi Arduinolla: 4 vaihetta
Liitäntäkaasuanturi Arduinolla: MQ-2 savuanturi on herkkä savulle ja seuraaville syttyville kaasuille: nestekaasu, butaani, propaani, metaani, alkoholi, vety. Anturin vastus vaihtelee kaasutyypin mukaan. Savuanturissa on sisäänrakennettu potentiometri
Hakkeroitu Digital Vernier Caliper Arduinolla: 7 vaihetta
Hakkeroitu digitaalinen vernier -paksuus Arduinon avulla: Entä sitten, jos teet joitain mittauksia Digital Vernier Caliper -laitteella ja että Arduino -koneesi tekee jonkin verran töitä näiden mittausten kanssa? Ehkä niiden tallentaminen, laskutoimitusten tekeminen tai näiden mittausten lisääminen palautesilmukkaan
Western Digital Dual-Option USB -kotelon avaaminen: 5 vaihetta
Western Digital Dual-Option USB -kotelon avaaminen: Western Digital Dual-Option USB -kotelot ovat käteviä laitteita tietojen siirtämiseen (suuritehoinen salaverkko) tai vain tietojen varmuuskopiointiin offline-tilassa. kapasiteetti on vähissä tai asema voi kuolla