Kazalo:
- 1. korak: Priključitve DS1803
- Korak: Ukazni bajt
- 3. korak: Nadzor DS1803
- 4. korak: Nastavite
- 5. korak: Program
Video: Dvojni digitalni potenciometer DS1803 z Arduinom: 5 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
Uporabo digitalnega merilnika števcev DS1803 rad delim z Arduinom. Ta IC vsebuje dva digitalna potmetra, ki ju je mogoče upravljati prek dvožičnega vmesnika, za to uporabljam knjižnico wire.h.
Ta IC lahko nadomesti običajni analogni merilnik števcev. Na ta način lahko upravljate na primer ojačevalnik ali napajalnik.
V tem navodilu nadzorujem svetlost dveh LED, da prikažem delovanje.
Arduino šteje impulze vrtljivega dajalnika in vrednost vstavi v spremenljiv lonček [0] in lonec [1]. Ko pritisnete stikalo na kodirniku, lahko preklapljate med loncem [0] in loncem [1].
Dejanska vrednost loncev se odčita iz DS1803 in postavi v spremenljivo potValue [0] in potValue [1] ter prikaže na LCD -prikazovalniku.
1. korak: Priključitve DS1803
Tukaj si lahko ogledate povezave DS1803. H je visoka stran potenciometra, L spodnja stran in W brisalnik. SCL in SDA sta vodili.
S povezavami A0, A1 in A2 lahko DS1803 daste svoj naslov, na ta način lahko upravljate več naprav prek enega vodila. V svojem primeru sem dal DS1803 adres 0 tako, da povežem vse zatiče na tla.
Korak: Ukazni bajt
Način delovanja DS1803 lahko uporabite v ukaznem bajtu. Ko izberete "zapiši potenciometer-0", sta izbrana oba potenciometra, če želiš samo prilagoditi potenciometer-0, moraš poslati le prvi podatkovni bajt. "Napišite potenciometer-1" nastavite samo potmeter-1. "Zapiši na oba potenciometra" daje obema potenciometrima enako vrednost.
3. korak: Nadzor DS1803
Kontrolni bajt (slika 3) ima identifikator naprave, ki ostane vedno enak. V mojem primeru so A0, A1 in A2 0, ker izberemo naslov tako, da vse A-zatiče pritrdimo na tla. Zadnji bit R/W bo nastavljen na 0 ali 1 z ukazi "Wire.beginTransmission" in "Wire.requestFrom" v Arduinu. Na sliki 5 lahko vidite celoten telegram. Prebrani telegram je prikazan na sliki 4.
4. korak: Nastavite
To vezje prikazuje, kako vse povezati. LCD zaslon Nokia je na voljo z različnimi povezavami. Prepričajte se, da ste pravilno priključili svojega. Tudi rotacijski dajalnik njegovih različnih različic, nekaterim je skupno na srednjem zatiču, drugim pa ne. Za filtriranje izhodnih signalov A in B dajalnika sem dal malo filtrirnega omrežja (470 ohmski upor s 100nF pokrovčkom). Ta filter potrebujem, ker je imel izhod veliko hrupa. V svoj program sem vključil tudi časovnik za odpoved, da prekličem nekaj hrupa. Za ostalo se mi zdi vezje čisto. LCD lahko naročite prek Adafruit
5. korak: Program
Za uporabo 2-žičnega vodila vključujem knjižnico Wire.h. Za uporabo LCD-ja vključujem knjižnico Adafruit, ki jo lahko prenesete s spletnega mesta https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library, knjižnica Adafruit_GFX.h pa je na voljo tukaj https:// github. com/adafruit/Adafruit-GFX-Library.
#vključi
#vključi
#vključi
Adafruit_PCD8544 zaslon = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Tu lahko vidite vse spremenljivke. Nadzorni bajt in ukazni bajt, kot je opisano prej. Čas deBounceTime lahko prilagodite glede na hrup na vašem kodirniku.
bajt pot [2] = {1, 1}; byte controlByte = B0101000; // 7 bitov, byte commandByte = B10101001; // zadnji 2 bita je izbira merilnika števcev. bajt potValue [2]; int i = 0; int deBounceTime = 10; // To vrednost prilagodimo glede na šum const int encoder_A = 8; dajalnik const int_B = 9; const int buttonPin = 2; unsigned long newDebounceTime = 0; brez podpisa dolgo oldTime; logični pritisk = 0; logično število = 1;
V nastavitvah definiram desne zatiče in statično besedilo postavim na LCD
void setup () {Wire.begin (); Serial.begin (9600); pinMode (kodirnik_A, VHOD); pinMode (kodirnik_B, VHOD); pinMode (buttonPin, INPUT); newDebounceTime = millis ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (ČRNO); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
V zanki najprej preverim, ali je interval večji od 500 ms, če da, se LCD posodobi. Če ni, je gumb na kodirniku preverjen. Če pritisnete toggleBuffer, pokličite. Po tem se kodirnik preveri. Če je vhod 0 nizek (zaznana je rotacija), preverim vhod B, če je vhod B 0, povečam lonec , druge pa zmanjšam. Po tem bo vrednost poslana v DS1803 prek wire.write.
void loop () {
interval ();
if (digitalRead (buttonPin) == 1 && (pritisnjeno == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {pritisnjeno = 0;}
if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; če (pot > 25) {pot = 25;}} drugače {pot -; if (pot <1) {pot = 1;}} število = 1; newDebounceTime = millis ();
Wire.beginTransmission (controlByte); // začeti oddajati
Wire.write (commandByte); // izbor potmetrov Wire.write (pot [0] * 10); // pošljemo 1. bajt podatkov o merilniku Wire.write (pot [1] * 10); // pošljemo 2. bajt podatkov o merilniku Wire.endTransmission (); // prenehaj pošiljati} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {pritisnjeno = 1; če (i == 0) {i = 1;} drugače {i = 0;}}
Najprej počistim področje, kjer moram zapisati spremenljivke. To naredim, da narišem pravokotnik na tem področju. Po tem spremenljivke zapišem na zaslon.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // preberemo prvi bajt merilnika potValue [1] = Wire.read (); // branje prikaza drugega bajtnega merilnika.fillRect (40, 0, 40, 45, BELO); // počisti spremenljiv zaslon na LCD zaslonu.setCursor (40, 10); display.print (potValue [0]); // zapišemo prvo vrednost števca na LCD -prikazovalnik.setCursor (40, 22); display.print (potValue [1]); // zapišemo vrednost drugega števca na LCD zaslon.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// intervalni časovnik za zapis podatkov na LCD, če ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Priporočena:
Ojačevalnik moči LM3886, dvojni ali mostični (izboljšano): 11 korakov (s slikami)
Ojačevalnik moči LM3886, dvojni ali mostični (izboljšan): Kompaktni ojačevalnik z dvojno močjo (ali mostom) je enostavno sestaviti, če imate nekaj izkušenj z elektroniko. Potrebnih je le nekaj delov. Seveda je še lažje zgraditi mono ojačevalnik. Ključna vprašanja sta napajanje in hlajenje
DVOJNI LED BLINK Z UPORABO 555 TIMER IC: 5 korakov
DVOJNI LED BLINK Z UPORABO 555 TIMER IC: upam, da vam bo ta navodila pomagala všečkati in se naročiti na moj kanal
MCP41HVX1 digitalni potenciometer za Arduino: 10 korakov (s slikami)
Digitalni potenciometer MCP41HVX1 za Arduino: Družina digitalnih potenciometrov MCP41HVX1 (znanih tudi kot DigiPots) so naprave, ki posnemajo delovanje analognega potenciometra in se upravljajo prek SPI. Primer aplikacije bi bil zamenjava gumba za glasnost na vašem stereou z DigiPotom, ki je
Potenciometer in servo: nadzorovano gibanje z Arduinom: 4 koraki
Potenciometer in servo: Nadzirano gibanje z Arduinom: Najprej morate zbrati ustrezne materiale, da sestavite to vezje
Dvojni 7 -segmentni zasloni, ki jih nadzoruje potenciometer v CircuitPythonu - Prikaz vztrajnosti vida: 9 korakov (s slikami)
Dvojni 7-segmentni zasloni, ki jih nadzoruje potenciometer v CircuitPythonu-Dokaz vztrajnosti vida: Ta projekt uporablja potenciometer za nadzor prikaza na nekaj 7-segmentnih LED zaslonih (F5161AH). Ko obrnete gumb potenciometra, se prikazano število spremeni v razponu od 0 do 99. V vsakem trenutku zasveti le ena LED, zelo na kratko, vendar