Съдържание:
- Стъпка 1: Свързване на DS1803
- Стъпка 2: Команден байт
- Стъпка 3: Управление на DS1803
- Стъпка 4: Настройте
- Стъпка 5: Програмата
Видео: DS1803 Двоен цифров потенциометър с Arduino: 5 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:54
Харесва ми да споделя използването на цифров потметър DS1803 с Arduino. Тази интегрална схема съдържа два цифрови брояча, които могат да се контролират чрез двужичен интерфейс, за това използвам библиотеката wire.h.
Тази интегрална схема може да замени нормален аналогов потметър. По този начин можете да управлявате например усилвател или захранване.
В тази инструкция контролирам яркостта на два светодиода, за да покажа работата.
Arduino брои импулсите на въртящ се енкодер и поставя стойността в променлив пот [0] и пот [1]. Когато натиснете превключвателя на енкодера, можете да превключвате между пот [0] и пот [1].
Действителната стойност на саксиите се отчита от DS1803 и се поставя в променлива potValue [0] и potValue [1] и се показва на LCD.
Стъпка 1: Свързване на DS1803
Тук можете да видите връзките на DS1803. H е високата страна на потенциометъра, L долната страна и W чистачката. SCL и SDA са връзките на шината.
С връзка A0, A1 и A2 можете да дадете на DS1803 собствен адрес, като по този начин можете да управлявате повече устройства чрез една шина. В моя пример съм дал на DS1803 адрес 0, като свържа всички щифтове към земята.
Стъпка 2: Команден байт
Начинът, по който работи DS1803, може да се използва в командния байт. Когато изберете "запис на потенциометър-0" и двата потенциометра са избрани, когато искате само да регулирате потенциометър-0, трябва само да изпратите първия байт данни. "Записване на потенциометър-1" регулирайте само потметър-1. "Запис на двата потенциометра" дава на двата потенциометра еднаква стойност.
Стъпка 3: Управление на DS1803
Контролният байт (фигура 3) има идентификатор на устройство, който винаги остава същият. В моя пример A0, A1 и A2 са 0, защото избираме адреси, като поставяме всички A-пинове на земята. Последният бит R/W ще бъде зададен на 0 или 1 чрез командата "Wire.beginTransmission" и "Wire.requestFrom" в Arduino. На фигура 5 можете да видите цялата телеграма. Прочетената телеграма е показана на фигура 4.
Стъпка 4: Настройте
Тази схема показва как да свържете всичко. LCD дисплеят на Nokia се предлага с различни връзки, уверете се, че сте свързали правилно. Също така въртящият се енкодер неговите различни версии, някои има общото на средния щифт други не. Поставих малка филтърна мрежа (470 ома резистор със 100nF капачка), за да филтрирам изходните сигнали A и B на енкодера. Имам нужда от този филтър, защото изходът имаше много шум. В програмата си поставих и таймер за деблокиране, за да анулирам някакъв шум. За останалото смятам, че веригата е чиста. LCD дисплеят може да бъде поръчан чрез Adafruit
Стъпка 5: Програмата
За използването на 2-жичната шина включвам библиотеката Wire.h. За да използвам LCD, включвам библиотеката Adafruit, която можете да изтеглите от https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library, също библиотеката Adafruit_GFX.h е достъпна тук https:// github. com/adafruit/Adafruit-GFX-Library.
#включва
#включва
#включва
Adafruit_PCD8544 дисплей = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Тук можете да видите всички променливи. Байт за управление и байт за команда, както е описано по -горе. Времето deBounceTime може да се регулира в зависимост от шума на вашия енкодер.
байт пот [2] = {1, 1}; байт controlByte = B0101000; // 7 бита, байт commandByte = B10101001; // последните 2 бита са избор на потметър. байт potValue [2]; int i = 0; int deBounceTime = 10; // Регулираме тази стойност в зависимост от шума const int encoder_A = 8; const int енкодер_B = 9; const int buttonPin = 2; unsigned long newDebounceTime = 0; unsigned long oldTime; булево натискане = 0; булов брой = 1;
В настройката определям десните щифтове и поставям статичния текст на LCD
void setup () {Wire.begin (); Serial.begin (9600); pinMode (енкодер_A, ВХОД); pinMode (енкодер_B, ВХОД); pinMode (buttonPin, INPUT); newDebounceTime = millis ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (ЧЕРЕН); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
В цикъла първо проверявам дали интервалът е повече от 500ms, ако да, LCD се актуализира. Ако не, бутонът на енкодера е проверен. Ако бъде натиснат, toggleBuffer се извиква. След това енкодерът се проверява. Ако вход 0 е нисък (открито е въртене), проверявам вход B, ако вход B е 0, увеличавам пота , други намалявам. След това стойността ще бъде изпратена до DS1803 чрез wire.write.
void loop () {
интервал ();
if (digitalRead (buttonPin) == 1 && (натиснат == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {натиснат = 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); // започва предаване
Wire.write (commandByte); // избор на потметри Wire.write (pot [0] * 10); // изпращаме 1 -ви байт данни за измерване Wire.write (pot [1] * 10); // изпраща 2 -ри байт данни за измерване Wire.endTransmission (); // спиране на предаването} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {натиснат = 1; ако (i == 0) {i = 1;} иначе {i = 0;}}
Първо изчиствам областта, където трябва да напиша променливите. Правя това, за да нарисувам правоъгълник в тази област. След това записвам променливите на екрана.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // прочети първия байт метър potValue [1] = Wire.read (); // четене на втория байтметров дисплей display.fillRect (40, 0, 40, 45, БЯЛ); // изчистване на променлив екран на LCD дисплея.setCursor (40, 10); display.print (potValue [0]); // записва стойността на първия потметър на LCD дисплея.setCursor (40, 22); display.print (potValue [1]); // записваме втората стойност на потметъра на LCD дисплея.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// интервален таймер за записване на данни на LCD, ако ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Препоръчано:
Направете свой собствен (венец) двоен LED димер: 4 стъпки
Как да направите свой собствен (Seesaw) двоен светодиоден димер: Днес ще ви покажа как да направите двойния светодиоден димер само с 555 таймер чипове заедно с общи компоненти. Подобно на един MOSFET/транзистор (или PNP, NPN, P-канал, или N-канал), който регулира яркостта на светодиода, този използва два MOS
LM3886 Усилвател на мощност, двоен или мостов (подобрен): 11 стъпки (със снимки)
LM3886 Усилвател на мощност, двоен или мостов (подобрен): Компактен усилвател с двойна мощност (или мост) е лесен за изграждане, ако имате опит в електрониката. Изискват се само няколко части. Разбира се, още по -лесно е да се изгради моно усилвател. Най -важните въпроси са захранването и охлаждането
MCP41HVX1 цифров потенциометър за Arduino: 10 стъпки (със снимки)
MCP41HVX1 цифров потенциометър за Arduino: Фамилията цифрови потенциометри MCP41HVX1 (известна още като DigiPots) са устройства, които имитират функцията на аналогов потенциометър и се управляват чрез SPI. Примерно приложение би било да замените копчето за сила на звука на вашето стерео с DigiPot, което е
DIY променлив LED панел (двоен цвят): 16 стъпки (със снимки)
Променлив LED панел „Направи си сам“(двоен цвят): Подобрете осветлението си, като направите достъпен DIY акумулаторен LED панел! Оборудван с регулиране на яркостта на двоен цвят, този проект ви дава гъвкавостта да регулирате баланса на бялото на вашия източник на светлина, за да съответства на околната светлина на вашето обкръжение
Как да съборите цифров апарат и как работи цифров апарат: 4 стъпки
Как да съборите цифров апарат и как работи цифров апарат: Много хора знаят как да използват шублери за измерване. Този урок ще ви научи как да съборите цифров шублер и обяснение как работи цифровият апарат