Spisu treści:
- Krok 1: Połączenia DS1803
- Krok 2: Bajt polecenia
- Krok 3: Kontrola DS1803
- Krok 4: Konfiguracja
- Krok 5: Program
Wideo: DS1803 Podwójny potencjometr cyfrowy z Arduino: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:32
Lubię dzielić wykorzystanie cyfrowego potencjometru DS1803 z Arduino. Ten układ scalony zawiera dwa cyfrowe potencjometry, które mogą być sterowane przez interfejs dwuprzewodowy, do tego celu używam biblioteki wire.h.
Ten układ scalony może zastąpić normalny potencjometr analogowy. W ten sposób możesz sterować np. wzmacniaczem lub zasilaczem.
W tej instrukcji kontroluję jasność dwóch diod LED, aby pokazać działanie.
Arduino zlicza impulsy enkodera obrotowego i umieszcza wartość w zmiennych pot[0] i pot[1]. Po naciśnięciu przełącznika na enkoderze możesz przełączać się między pot[0] i pot[1].
Rzeczywista wartość potencjometrów jest odczytywana z DS1803 i umieszczana w zmiennej potValue[0] i potValue[1] i wyświetlana na wyświetlaczu LCD.
Krok 1: Połączenia DS1803
Tutaj możesz zobaczyć połączenia DS1803. H to górna strona potencjometru, L niska strona, a W wycieraczka. SCL i SDA to połączenia autobusowe.
Przy połączeniu A0, A1 i A2 możesz nadać DS1803 własny adres, w ten sposób możesz sterować większą liczbą urządzeń za pomocą jednej magistrali. W moim przykładzie podałem adres DS1803 0, podłączając wszystkie piny do masy.
Krok 2: Bajt polecenia
Sposób działania DS1803 można wykorzystać w bajcie polecenia. Po wybraniu "zapisz potencjometr-0" oba potencjometry są wybrane, gdy chcesz tylko wyregulować potencjometr-0, musisz tylko wysłać pierwszy bajt danych. "Zapisz potencjometr-1" dostosuj tylko potencjometr-1. "Zapisz do obu potencjometrów" daje obu potencjometom tę samą wartość.
Krok 3: Kontrola DS1803
Bajt kontrolny (rysunek 3) ma identyfikator urządzenia, który pozostaje zawsze taki sam. W moim przykładzie A0, A1 i A2 są równe 0, ponieważ wybieramy adres, umieszczając wszystkie piny A na ziemi. Ostatni bit R/W zostanie ustawiony na 0 lub 1 poleceniem „Wire.beginTransmission” i „Wire.requestFrom” w Arduino. Na rysunku 5 widać cały telegram. Telegram odczytu pokazano na rysunku 4.
Krok 4: Konfiguracja
Ten obwód pokazuje, jak wszystko połączyć. Wyświetlacz LCD Nokia jest dostępny z różnymi połączeniami, upewnij się, że podłączasz prawidłowo. Również enkoder obrotowy ma różne wersje, niektóre mają wspólne na środkowym pinie inne nie. Umieściłem małą sieć filtrów (rezystor 470 Ohm z nasadką 100nF) do filtrowania sygnałów wyjściowych A i B enkodera. Potrzebuję tego filtra, ponieważ na wyjściu było dużo szumów. W moim programie umieściłem również licznik czasu odbicia, aby anulować niektóre szumy. Co do reszty myślę, że obwód jest czysty. Wyświetlacz LCD można zamówić za pośrednictwem Adafruit
Krok 5: Program
Do wykorzystania magistrali 2-przewodowej dołączam bibliotekę Wire.h. Do korzystania z wyświetlacza LCD dołączam bibliotekę Adafruit, którą można pobrać z https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library, dostępna jest również biblioteka Adafruit_GFX.h tutaj https://github. com/adafruit/Adafruit-GFX-Library.
#włączać
#włączać
#włączać
Wyświetlacz Adafruit_PCD8544 = Adafruit_PCD8544(7, 6, 5, 4, 3);
Tutaj możesz zobaczyć wszystkie zmienne. Bajt kontrolny i bajt polecenia, jak opisano wcześniej. DeBounceTime można regulować w zależności od szumu kodera.
pula bajtów[2] = {1, 1};bajt kontrolnyByte = B0101000; // 7 bitów, bajt commandByte = B10101001; // ostatnie 2 bity to wybór potencjometru. bajt potValue[2]; int i = 0; int czas odbicia = 10; // Dostosuj tę wartość w zależności od hałasu const int encoder_A = 8; const int koder_B = 9; const int przyciskPin = 2; unsigned long newDebounceTime = 0; niepodpisany długi oldTime; wciśnięty logiczny = 0; liczba logiczna = 1;
W setupie definiuję właściwe piny i umieszczam statyczny tekst na LCD
void setup() { Wire.begin(); Serial.początek(9600); pinMode(koder_A, WEJŚCIE); pinMode(koder_B, WEJŚCIE); pinMode(buttonPin, INPUT); nowyCzasOdbicia = millis();
wyświetl.rozpocznij();
display.setContrast(50); display.clearDisplay(); display.setTextSize(1); display.setTextColor(CZARNY); display.setCursor(0, 10); display.println("POT 1="); display.setCursor(0, 22); display.println("POT 2="); display.display();
}
W pętli najpierw sprawdzam, czy interwał jest dłuższy niż 500ms, jeśli tak, zaktualizuje się LCD. Jeśli nie, przycisk na enkoderze jest zaznaczony. Jeśli zostanie naciśnięty, toggleBuffer zostanie wywołany. Następnie sprawdzany jest koder. Jeśli wejście 0 jest niskie (wykryto obrót) sprawdzam wejście B, jeśli wejście B wynosi 0, zwiększam pot, inne zmniejszam. Następnie wartość zostanie wysłana do DS1803 przez wire.write.
pusta pętla () {
interwał();
if(digitalRead(buttonPin)== 1 && (wciśnięty == 0)){toggleBuffer();} if(digitalRead(buttonPin)== 0){wciśnięty = 0;}
if (digitalRead(encoder_A) == 0 && liczba == 0 && (millis() - newDebounceTime > deBounceTime)){ if (digitalRead(encoder_B) == 0){ pot++; if(pot > 25){pot = 25;} }else{pot--; if(pot < 1){pot = 1;} } count = 1; nowyCzasOdbicia = millis();
Wire.beginTransmission(bajt kontrolny); // rozpocznij transmisję
Wire.write(commandByte); // wybór potencjometrów Wire.write(pot[0] * 10); // wyślij pierwszy bajt danych z potencjometru Wire.write(pot[1] * 10); // wyślij drugi bajt danych z potencjometru Wire.endTransmission(); // zatrzymaj transmisję }else if (digitalRead(encoder_A) == 1 && digitalRead(encoder_B) == 1 && count == 1 && (millis() - newDebounceTime > deBounceTime)){ count = 0; nowyCzasOdbicia = millis(); } }
void toggleBuffer(){ wciśnięty = 1; jeśli (i == 0){i = 1;}else{i = 0;} }
Najpierw oczyszczam obszar, w którym mam wpisać zmienne. Robię to, aby narysować prostokąt w tym obszarze. Następnie zapisuję zmienne na ekranie.
void writeToLCD(){ Wire.requestFrom(controlByte, 2); potValue[0] = Wire.read(); // odczytaj pierwszy bajt potmeter potValue[1] = Wire.read(); // odczytaj drugi bajt potencjometru display.fillRect(40, 0, 40, 45, WHITE); // wyczyść ekran zmiennych na wyświetlaczu LCD.setCursor(40, 10); display.print(potValue[0]); // zapis pierwszej wartości potencjometru na wyświetlaczu LCD.setCursor(40, 22); display.print(potValue[1]); // zapisz drugą wartość potencjometru do wyświetlacza LCD.setCursor(60, (10 + i * 12)); display.print("<"); display.display(); }
void interval(){ // zegar interwału do zapisu danych na wyświetlaczu LCD if ((millis() - oldTime) > 500) { writeToLCD(); staryCzas = mili(); } }
Zalecana:
Wzmacniacz mocy LM3886, podwójny lub mostkowy (ulepszony): 11 kroków (ze zdjęciami)
Wzmacniacz mocy LM3886, podwójny lub mostkowy (ulepszony): Kompaktowy wzmacniacz o podwójnej mocy (lub mostku) jest łatwy do zbudowania, jeśli masz pewne doświadczenie w elektronice. Potrzebnych jest tylko kilka części. Oczywiście jeszcze łatwiej jest zbudować wzmacniacz mono. Najważniejsze kwestie to zasilanie i chłodzenie.Dzięki kom
Niestandardowe koło sterowe (potencjometr jako czujnik położenia): 10 kroków
Niestandardowe koło sterowe (potencjometr jako czujnik położenia): zastrzeżenie: nie obwiniaj mnie, że nie pokazałem krok po kroku, to ma być tylko odniesienie, a ja tylko mówię, co zrobiłem i wynik, ma kilka podstawowych wad, takich jak hałas, więc nie rób dokładnie tak, jak ja i oczekuj znakomitego wyniku, a f
Potencjometr cyfrowy MCP41HVX1 dla Arduino: 10 kroków (ze zdjęciami)
Potencjometr cyfrowy MCP41HVX1 dla Arduino: Rodzina cyfrowych potencjometrów MCP41HVX1 (znanych również jako DigiPots) to urządzenia, które naśladują funkcję potencjometru analogowego i są sterowane przez SPI. Przykładowym zastosowaniem może być zastąpienie pokrętła głośności w twoim stereo na DigiPot, który jest
Potencjometr i serwo: kontrolowany ruch z Arduino: 4 kroki
Potencjometr i serwo: Ruch kontrolowany z Arduino: Najpierw musisz zebrać odpowiednie materiały, aby połączyć ten obwód
Dioda RGB sterowana przez Bluetooth lub potencjometr: 5 kroków
Led RGB Sterowany przez Bluetooth lub Potencjometr: Cześć! Dzisiaj chciałem podzielić się z Wami moim projektem Arduino. Zrobiłem ledy RGB sterowane przez Arduino. Posiada 3 tryby i 2 interfejsy. Pierwszy tryb to sterowanie ręczne, drugi fajna tęcza i trzecia blokada koloru. Najpierw kalibrujesz potencjometr. Wtedy ty