Obsah:
- Krok 1: Připojení DS1803
- Krok 2: Command Byte
- Krok 3: Ovládání DS1803
- Krok 4: Nastavení
- Krok 5: Program
Video: Duální digitální potenciometr DS1803 s Arduinem: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:23
Rád sdílím použití digitálního potmetru DS1803 s Arduinem. Tento IC obsahuje dva digitální potmetry, které lze ovládat přes dvouvodičové rozhraní, k tomu používám knihovnu wire.h.
Tento IC může nahradit normální analogový potmetr. Tímto způsobem můžete ovládat například zesilovač nebo napájecí zdroj.
V tomto pokynu ovládám jas dvou LED diod, abych ukázal fungování.
Arduino počítá impulsy rotačního kodéru a hodnotu umístí do proměnné pot [0] a pot [1]. Když stisknete spínač na kodéru, můžete přepínat mezi pot [0] a pot [1].
Skutečná hodnota potů se odečte zpět z DS1803 a umístí se do proměnné potValue [0] a potValue [1] a zobrazí se na LCD.
Krok 1: Připojení DS1803
Zde můžete vidět připojení DS1803. H je horní strana potenciometru, L dolní strana a W stěrač. SCL a SDA jsou autobusová spojení.
S připojením A0, A1 a A2 můžete dát DS1803 vlastní adresu, takže můžete ovládat více zařízení přes jednu sběrnici. V mém příkladu jsem dal DS1803 adresu 0 připojením všech pinů k zemi.
Krok 2: Command Byte
Způsob, jakým DS1803 pracuje, lze použít v příkazovém bajtu. Když vyberete „zapisovat potenciometr-0“, budou vybrány oba potenciometry a pokud chcete upravit pouze potenciometr-0, stačí odeslat první datový bajt. „Zápis potenciometru-1“upravte pouze potenciometr-1. „Zapisovat do obou potenciometrů“dává oběma potenciometrům stejnou hodnotu.
Krok 3: Ovládání DS1803
Řídicí bajt (obrázek 3) má identifikátor zařízení, který zůstává vždy stejný. V mém příkladu A0, A1 a A2 jsou 0, protože vybereme adresu tak, že všechny A-piny položíme na zem. Poslední bit R/W bude v Arduinu nastaven na 0 nebo 1 příkazem „Wire.beginTransmission“a „Wire.requestFrom“. Na obrázku 5 můžete vidět celý telegram. Přečtený telegram je znázorněn na obrázku 4.
Krok 4: Nastavení
Tento obvod ukazuje, jak vše propojit. Displej Nokia LCD je k dispozici s různými připojeními. Ujistěte se, že připojujete správně. Také rotační kodér jeho různých verzí, některé mají společné na středním pinu jiné ne. Dal jsem malou filtrační síť (odpor 470 Ohm s víčkem 100nF) k filtrování výstupních signálů A a B kodéru. Tento filtr potřebuji, protože na výstupu byl velký hluk. Také jsem do svého programu vložil časovač odskoku, který ruší nějaký hluk. Ve zbytku si myslím, že obvod je jasný. LCD lze objednat prostřednictvím Adafruit
Krok 5: Program
Pro použití 2vodičové sběrnice zahrnuji knihovnu Wire.h. Chcete-li používat LCD, přidávám knihovnu Adafruit, kterou si můžete stáhnout z https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library a také knihovnu Adafruit_GFX.h je k dispozici zde https:// github. com/adafruit/Adafruit-GFX-Library.
#zahrnout
#zahrnout
#zahrnout
Zobrazení Adafruit_PCD8544 = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Zde můžete vidět všechny proměnné. Řídicí bajt a příkazový bajt, jak bylo popsáno výše. Čas deBounceTime lze upravit v závislosti na hluku kodéru.
byte pot [2] = {1, 1}; byte controlByte = B0101000; // 7 bitů, byte commandByte = B10101001; // poslední 2 bity je výběr potmetru. byte potValue [2]; int i = 0; int deBounceTime = 10; // Upravte tuto hodnotu v závislosti na konstantě šumu kodéru_A = 8; const int kodér_B = 9; tlačítko const intPin = 2; nepodepsané dlouhé newDebounceTime = 0; nepodepsaný dlouhý oldTime; booleovský stisk = 0; logický počet = 1;
V nastavení definuji správné piny a vložím statický text na LCD
neplatné nastavení () {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 (ČERNÁ); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
Ve smyčce nejprve zkontroluji, zda je interval delší než 500 ms, pokud ano, LCD se aktualizuje. Pokud ne, je zaškrtnuto tlačítko na kodéru. Po stisknutí se zavolá toggleBuffer. Poté je kodér zkontrolován. Pokud je vstup 0 nízký (detekováno otáčení), zkontroluji vstup B, pokud je vstup B 0, zvýším pot , ostatní I sníží. Poté bude hodnota odeslána do DS1803 přes wire.write.
prázdná smyčka () {
časový úsek();
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); // začněte vysílat
Wire.write (commandByte); // výběr potmetrů Wire.write (pot [0] * 10); // poslat 1. byte dat potmetru Wire.write (pot [1] * 10); // poslat 2. byte dat potmetru Wire.endTransmission (); // zastavení vysílání} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {stisknuto = 1; if (i == 0) {i = 1;} else {i = 0;}}
Nejprve vyčistím oblast, kam mám zapsat proměnné. Dělám to, abych v této oblasti nakreslil obdélník. Poté napíšu proměnné na obrazovku.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // přečíst první bajt potmetru potValue [1] = Wire.read (); // čtení druhého bajtu potmetru display.fillRect (40, 0, 40, 45, WHITE); // vymazání proměnné obrazovky na LCD displeji.setCursor (40, 10); display.print (potValue [0]); // zapis 1. hodnoty potmetru na LCD display.setCursor (40, 22); display.print (potValue [1]); // zapište 2. hodnotu potmetru na LCD displej.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// intervalový časovač pro zápis dat na LCD if ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Doporučuje:
Zesilovač LM3886, duální nebo můstkový (vylepšený): 11 kroků (s obrázky)
Výkonový zesilovač LM3886, duální nebo můstkový (vylepšený): Kompaktní dvojitý výkonový (nebo můstkový) zesilovač lze snadno sestavit, pokud máte nějaké zkušenosti s elektronikou. Je vyžadováno pouze několik dílů. Samozřejmě je ještě snazší postavit mono zesilovač. Zásadními problémy jsou napájení a chlazení
Digitální snímač teploty a vlhkosti DHT21 s Arduinem: 6 kroků
Digitální snímač teploty a vlhkosti DHT21 s Arduino: V tomto tutoriálu se naučíme, jak používat snímač vlhkosti a teploty DHT21 s Arduino a zobrazovat hodnoty na OLED displeji. Podívejte se na video
DUÁLNÍ LED BLIKÁŘ S POUŽITÍM 555 TIMER IC: 5 kroků
DUAL LED BLINKER POUŽITÍ 555 TIMER IC: doufám, že vám tento návod pomůže lajkovat a přihlásit se k odběru mého kanálu
Digitální potenciometr MCP41HVX1 pro Arduino: 10 kroků (s obrázky)
Digitální potenciometr MCP41HVX1 pro Arduino: Rodina digitálních potenciometrů MCP41HVX1 (aka DigiPots) jsou zařízení, která napodobují funkci analogového potenciometru a jsou ovládána pomocí SPI. Příkladem aplikace by byla výměna ovladače hlasitosti na vašem stereu za DigiPot, který je
Potenciometr a servo: Řízený pohyb s Arduino: 4 kroky
Potenciometr a servo: Řízený pohyb s Arduino: Nejprve musíte shromáždit příslušné materiály, abyste tento obvod spojili