Tartalomjegyzék:

DS1803 kettős digitális potenciométer Arduino -val: 5 lépés
DS1803 kettős digitális potenciométer Arduino -val: 5 lépés

Videó: DS1803 kettős digitális potenciométer Arduino -val: 5 lépés

Videó: DS1803 kettős digitális potenciométer Arduino -val: 5 lépés
Videó: ESP32 Tutorial 23 - Reading Voltage of potentiometer using ESP32 | SunFounder's ESP32 IoT kit 2024, November
Anonim
DS1803 kettős digitális potenciométer Arduino -val
DS1803 kettős digitális potenciométer Arduino -val

Szeretem megosztani a DS1803 digitális potméter használatát egy Arduino -val. Ez az IC két digitális potmétert tartalmaz, amelyek kétvezetékes interfészen keresztül vezérelhetők, ehhez a wire.h könyvtárat használom.

Ez az IC helyettesítheti a normál analóg potmétert. Ily módon vezérelheti például az erősítőt vagy a tápegységet.

Ebben az utasításban két LED fényerejét szabályozom, hogy megmutassam a működést.

Az arduino megszámolja egy forgó jeladó impulzusát, és az értéket a pot [0] és pot [1] változóba helyezi. Ha megnyomja a kódoló kapcsolóját, válthat a [0] és az [1] edény között.

Az edények tényleges értéke visszaolvasásra kerül a DS1803 -ból, és a potValue [0] és potValue [1] változókba kerül, és megjelenik egy LCD -n.

1. lépés: A DS1803 csatlakoztatása

A DS1803 csatlakozói
A DS1803 csatlakozói

Itt láthatja a DS1803 csatlakozásait. H a potenciométer magas oldala, L az alsó és W az ablaktörlő. Az SCL és az SDA a buszcsatlakozások.

Az A0, A1 és A2 csatlakozással megadhatja a DS1803 saját címét, így több eszközt vezérelhet egy buszon keresztül. Példámban a DS1803 címet 0 -nak adom meg úgy, hogy az összes csapot a földhöz csatlakoztatom.

2. lépés: Parancsbájt

Parancsbájt
Parancsbájt

A DS1803 működési módja használható a parancsbájtban. Ha az "írási potenciométer-0" lehetőséget választja, mindkét potenciométer ki van választva, ha csak a 0-as potenciométert szeretné beállítani, akkor csak az első adatbájtot kell elküldenie. Az "írási potenciométer-1" csak a potmétert-1 állítja be. Az "írás mindkét potenciométerre" mindkét potenciométer azonos értékét adja.

3. lépés: A DS1803 vezérlése

A DS1803 vezérlése
A DS1803 vezérlése

A vezérlőbájt (3. ábra) rendelkezik eszközazonosítóval, ez mindig ugyanaz marad. Példámban az A0, A1 és A2 0, mert a címet úgy választjuk ki, hogy az összes A-tűt földeljük. Az utolsó bit R/W értékét 0 vagy 1 értékre állítja a "Wire.beginTransmission" és a "Wire.requestFrom" parancs az Arduino -ban. Az 5. ábrán a teljes távirat látható. Az olvasott távirat a 4. ábrán látható.

4. lépés: Állítsa be

Beállít
Beállít

Ez az áramkör megmutatja, hogyan kell mindent csatlakoztatni. A Nokia LCD különböző csatlakozással érhető el, győződjön meg arról, hogy megfelelően csatlakoztatta. Szintén a forgó kódoló különböző változatai, egyeseknél a közös a középső tüskén, mások nem. Feltettem egy kis szűrőhálózatot (470 ohmos ellenállás 100nF sapkával) a kódoló A és B kimeneti jeleinek szűrésére. Szükségem van erre a szűrőre, mert a kimenetben sok zaj volt. A programba egy visszakapcsolási időzítőt is beiktattam, hogy megszüntessem a zajt. A többiben azt gondolom, hogy az áramkör tiszta. Az LCD az Adafruit -on keresztül rendelhető meg:

5. lépés: A program

A 2 vezetékes busz használatához a Wire.h könyvtárat tartalmazom. Az LCD használatához tartalmazza az Adafruit könyvtárat, amelyet letölthet a https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library oldalról, valamint az Adafruit_GFX.h könyvtár is elérhető itt: https:// github. com/adafruit/Adafruit-GFX-Library.

#befoglalni

#befoglalni

#befoglalni

Adafruit_PCD8544 kijelző = Adafruit_PCD8544 (7, 6, 5, 4, 3);

Itt láthatja az összes változót. A bájt és a parancsbájt vezérlése az előzőekben leírtak szerint. A deBounceTime beállítható a kódoló zajától függően.

byte pot [2] = {1, 1}; byte controlByte = B0101000; // 7 bit, byte commandByte = B10101001; // az utolsó 2 bit a potméter kiválasztása. bájt potValue [2]; int i = 0; int deBounceTime = 10; // Állítsa be ezt az értéket a zajkonfigurációtól függően int encoder_A = 8; const int kódoló_B = 9; const int gombPin = 2; unsigned long newDebounceTime = 0; előjel nélküli hosszú oldTime; logikai préselés = 0; logikai szám = 1;

A beállításban megadom a megfelelő csapokat, és a statikus szöveget az LCD -re helyezem

void setup () {Wire.begin (); Sorozat.kezdet (9600); pinMode (kódoló_A, BEMENET); pinMode (kódoló_B, BEMENET); pinMode (buttonPin, INPUT); newDebounceTime = millis ();

display.begin ();

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

}

A ciklusban először ellenőrzöm, hogy az intervallum meghaladja -e az 500 ms -ot, ha igen, az LCD frissül. Ha nem, a jeladó gombja be van jelölve. Ha megnyomja a toggleBuffer hívást. Ezt követően a kódolót ellenőrzik. Ha a 0 bemenet alacsony (forgás észlelve), akkor a B bemenetet ellenőrzöm, ha a B bemenet 0 I növekményes pot , a többi I csökken. Ezt követően az érték elküldésre kerül a DS1803 -ra a wire.write -on keresztül.

void loop () {

intervallum();

if (digitalRead (buttonPin) == 1 && (press == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {press = 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); // indítsa el az átvitelt

Wire.write (commandByte); // potméterek kiválasztása Wire.write (pot [0] * 10); // potméter adatok 1. bájtjának küldése Wire.write (pot [1] * 10); // potméter adatok 2. bájtjának küldése Wire.endTransmission (); // állítsa le az átvitelt} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}

void toggleBuffer () {lenyomva = 1; ha (i == 0) {i = 1;} más {i = 0;}}

Először kitisztítom azt a területet, ahová írnom kell a változókat. Ezzel téglalapot rajzolok erre a területre. Ezt követően a képernyőre írom a változókat.

void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // első potméter bájt olvasása potValue [1] = Wire.read (); // második potméter bájtos kijelző olvasása.fillRect (40, 0, 40, 45, WHITE); // a változó képernyő törlése az LCD kijelzőn.setCursor (40, 10); display.print (potValue [0]); // írja az 1. potméter értéket az LCD kijelzőre.setCursor (40, 22); display.print (potValue [1]); // írja a 2. potméter értéket az LCD kijelzőre.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }

void interval () {// intervallum időzítő az adatok LCD -re írásához, ha ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}

Ajánlott: