Obsah:
- Krok 1: Pripojenia DS1803
- Krok 2: Príkazový bajt
- Krok 3: Ovládanie DS1803
- Krok 4: Nastavenie
- Krok 5: Program
Video: Duálny digitálny potenciometer DS1803 s Arduino: 5 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 12:00
Rád by som zdieľal používanie digitálneho potmetra DS1803 s Arduino. Tento IC obsahuje dva digitálne potmetre, ktoré je možné ovládať pomocou dvojvodičového rozhrania, a preto používam knižnicu wire.h.
Tento IC môže nahradiť normálny analógový potmeter. Týmto spôsobom môžete ovládať napríklad zosilňovač alebo napájací zdroj.
V tomto návode ovládam jas dvoch LED diód, aby ukázali funkčnosť.
Arduino počíta impulzy rotačného enkodéra a umiestňuje hodnotu do variabilného pot [0] a pot [1]. Keď stlačíte spínač na kodéri, môžete prepínať medzi pot [0] a pot [1].
Skutočná hodnota kvetináčov sa odčíta z DS1803 a umiestni sa do premennej potValue [0] a potValue [1] a zobrazí sa na LCD displeji.
Krok 1: Pripojenia DS1803
Tu môžete vidieť pripojenia DS1803. H je horná strana potenciometra, L dolná strana a W stierač. SCL a SDA sú autobusové spojenia.
Pripojením A0, A1 a A2 môžete dať DS1803 vlastnú adresu, takže môžete ovládať viac zariadení cez jednu zbernicu. V mojom prípade som dal DS1803 adresu 0 pripojením všetkých pinov k zemi.
Krok 2: Príkazový bajt
Spôsob, akým DS1803 funguje, je možné použiť v príkazovom bajte. Keď vyberiete „zapisovať potenciometer-0“, budú vybraté oba potenciometre a keď chcete nastaviť iba potenciometer-0, musíte odoslať iba prvý dátový bajt. „Zapisujte potenciometer-1“nastavte iba potenciometer-1. „Zapisovať do oboch potenciometrov“dáva obom potenciometrom rovnakú hodnotu.
Krok 3: Ovládanie DS1803
Riadiaci bajt (obrázok 3) má identifikátor zariadenia, ktorý zostáva vždy rovnaký. V mojom prípade A0, A1 a A2 sú 0, pretože vyberáme adresu tak, že všetky A-piny uzemníme. Posledný bit R/W bude v Arduine nastavený na 0 alebo 1 príkazom „Wire.beginTransmission“a „Wire.requestFrom“. Na obrázku 5 môžete vidieť celý telegram. Načítaný telegram je znázornený na obrázku 4.
Krok 4: Nastavenie
Tento obvod ukazuje, ako všetko prepojiť. Displej Nokia LCD je k dispozícii s rôznymi pripojeniami. Uistite sa, že ste správne prepojili svoje. Tiež rotačný snímač jeho rôznych verzií, niektoré majú spoločné na strednom kolíku iné nie. Na filtráciu výstupných signálov A a B kodéra som vložil malú filtračnú sieť (odpor 470 Ohm s viečkom 100nF). Potrebujem tento filter, pretože výstup mal veľa šumu. Do svojho programu som tiež vložil časovač odskoku, aby som zrušil určitý hluk. Vo zvyšku si myslím, že obvod je jasný. LCD displej je možné objednať cez Adafruit
Krok 5: Program
Na použitie 2-vodičovej zbernice používam knižnicu Wire.h. Ak chcete používať LCD, uvádzam knižnicu Adafruit, ktorú si môžete stiahnuť z https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library, a tiež knižnicu Adafruit_GFX.h nájdete tu https:// github. com/adafruit/Adafruit-GFX-Library.
#zahrnúť
#zahrnúť
#zahrnúť
Displej Adafruit_PCD8544 = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Tu môžete vidieť všetky premenné. Riadiaci bajt a príkazový bajt, ako je popísané vyššie. Čas deBounceTime je možné nastaviť v závislosti od hluku vášho kodéra.
byte pot [2] = {1, 1}; byte controlByte = B0101000; // 7 bitov, byte commandByte = B10101001; // posledné 2 bity je výber potmetra. byte potValue [2]; int i = 0; int deBounceTime = 10; // Upravte túto hodnotu v závislosti od konštanty šumu kodéra_A = 8; const int kodér_B = 9; tlačidlo const intPin = 2; nepodpísané dlhé newDebounceTime = 0; nepodpísaný dlhý oldTime; booleovský stlačený = 0; booleovský počet = 1;
V nastavení definujem správne kolíky a vložím statický text na LCD
neplatné nastavenie () {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 (ČIERNA); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
V slučke najskôr skontrolujem, či je interval dlhší ako 500 ms, ak áno, aktualizuje sa LCD. Ak nie, je začiarknuté tlačidlo na snímači. Po stlačení sa vyvolá toggleBuffer. Potom je kodér skontrolovaný. Ak je vstup 0 nízky (zistené otočenie), skontrolujem vstup B, ak je vstup B 0, zvýši sa pot , ostatné sa zníži. Potom bude hodnota odoslaná do DS1803 prostredníctvom wire.write.
prázdna slučka () {
interval ();
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čnite vysielať
Wire.write (commandByte); // výber potmetrov Wire.write (pot [0] * 10); // odoslanie 1. bajtu údajov potmetra Wire.write (pot [1] * 10); // odoslanie 2. bajtu údajov potmetra Wire.endTransmission (); // zastavenie prenosu} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {stlačené = 1; if (i == 0) {i = 1;} else {i = 0;}}
Najprv vyčistím oblasť, kde mám zapísať premenné. Robím to tak, aby sa v tejto oblasti nakreslil obdĺžnik. Potom napíšem premenné na obrazovku.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // prečítanie prvého bajtu potmetra potValue [1] = Wire.read (); // prečítanie druhého bajtu potmetra display.fillRect (40, 0, 40, 45, WHITE); // vymazanie variabilnej obrazovky na LCD displeji.setCursor (40, 10); display.print (potValue [0]); // zapis 1. hodnoty potmetra na LCD display.setCursor (40, 22); display.print (potValue [1]); // zapisanie 2. hodnoty potmetra na LCD display.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
neplatný interval () {// intervalový časovač na zápis údajov na LCD, ak ((milis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Odporúča:
LM3886 výkonový zosilňovač, duálny alebo mostový (vylepšený): 11 krokov (s obrázkami)
LM3886 Výkonový zosilňovač, duálny alebo mostový (vylepšený): Kompaktný duálny (alebo mostový) zosilňovač je ľahké postaviť, ak máte skúsenosti s elektronikou. Vyžaduje sa iba niekoľko častí. Samozrejme, je ešte jednoduchšie postaviť mono zosilňovač. Zásadnými problémami sú napájanie a chladenie. S počítačom
DUÁLNY LED BLINKER S POUŽITÍM 555 TIMER IC: 5 krokov
DUAL LED BLINKER S POUŽITÍM 555 TIMER IC: Dúfam, že vám tento návod pomôže lajkovať a prihlásiť sa na odber môjho kanála
Digitálny potenciometer MCP41HVX1 pre Arduino: 10 krokov (s obrázkami)
Digitálny potenciometer MCP41HVX1 pre Arduino: Rodina digitálnych potenciometrov MCP41HVX1 (aka DigiPots) sú zariadenia, ktoré napodobňujú funkciu analógového potenciometra a sú ovládané pomocou SPI. Príkladnou aplikáciou by bola výmena ovládača hlasitosti na vašom stereu za DigiPot, ktorý
Laserový zabezpečovací poplachový systém (DUÁLNY REŽIM): 5 krokov
Laserový bezpečnostný poplachový systém (DUÁLNY REŽIM): Pokiaľ ide o bezpečnosť, určite potrebujeme nejaký solídny nápad a v tomto prípade je laserový bezpečnostný alarm najlepšou možnosťou, ako si ho vytvoriť doma veľmi jednoduchým spôsobom. V tomto návode sa teda naučíme, ako aby bol tento projekt veľmi jednoduchým spôsobom
Lacný duálny projektový zdroj 30 V/2 A: 7 krokov (s obrázkami)
Lacný duálny projektový zdroj 30V/2A: Pri hľadaní napájacích modulov a LCD obrazoviek som narazil na niekoľko týchto lacných modulov napájania LCD 35W s hodnotami 0,5-30V @3A (50W s chladičom a rázovým prúdom 4A). Má nastavenie napätia a obmedzovač prúdu. K dispozícii je tiež