Innehållsförteckning:
- Steg 1: Anslutningar av DS1803
- Steg 2: Kommando Byte
- Steg 3: Kontroll av DS1803
- Steg 4: Konfigurera
- Steg 5: Programmet
Video: DS1803 dubbel digital potentiometer med Arduino: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
Jag gillar att dela användningen av en DS1803 digital potmeter med en Arduino. Denna IC innehåller två digitala potmetrar som kan styras över ett tvåtrådigt gränssnitt, för detta använder jag wire.h -biblioteket.
Denna IC kan ersätta en normal analog potmeter. På så sätt kan du styra till exempel en förstärkare eller strömförsörjning.
I denna instruerbara kontrollerar jag ljusstyrkan på två lysdioder för att visa arbetet.
Arduino räknar pulserna hos en roterande kodare och placerar värdet i variabel potten [0] och potten [1]. När du trycker på omkopplaren på givaren kan du växla mellan kruka [0] och kruka [1].
Det verkliga värdet på krukorna läses tillbaka från DS1803 och placeras i variabel potValue [0] och potValue [1] och visas på en LCD -skärm.
Steg 1: Anslutningar av DS1803
Här kan du se anslutningarna till DS1803. H är potentiometerns högsida, L den nedre sidan och W torkaren. SCL och SDA är bussförbindelserna.
Med anslutning A0, A1 och A2 kan du ge DS1803 en egen adress, på så sätt kan du styra fler enheter via en buss. I mitt exempel har jag ge DS1803 -adressen 0 genom att ansluta alla stift till marken.
Steg 2: Kommando Byte
Det sätt som DS1803 fungerar kan användas i kommandobyten. När du väljer "skriv potentiometer-0" väljs båda potentiometrarna, när du bara vill justera potentiometer-0 behöver du bara skicka den första databyten. "Skriv potentiometer-1" justera bara potmeter-1. "Skriv till båda potentiometrarna" ger båda potentiometrarna samma värde.
Steg 3: Kontroll av DS1803
Kontrollbyten (figur 3) har en enhetsidentifierare, den förblir alltid densamma. I mitt exempel A0, A1 och A2 är 0 eftersom vi väljer adress genom att sätta alla A-stift till marken. Den sista biten R/W kommer att ställas till 0 eller 1 med kommandot "Wire.beginTransmission" och "Wire.requestFrom" i Arduino. I figur 5 kan du se hela telegrammet. Det lästa telegrammet visas i figur 4.
Steg 4: Konfigurera
Denna krets visar hur du ansluter allt. Nokia LCD finns med olika anslutningar, se till att du ansluter din rätt. Även roterande kodare hans olika versioner, vissa har det gemensamma på mittstiftet andra inte. Jag har satt ett litet filternätverk (470 Ohm motstånd med 100nF lock) för att filtrera A och B utsignaler från kodaren. Jag behöver det här filtret eftersom utgången hade mycket brus. Jag lägger också in en avstängningstimer i mitt program för att avbryta brus. För resten tror jag att kretsen är klar. LCD -skärmen kan beställas via Adafruit
Steg 5: Programmet
För användning av 2-trådsbussen inkluderar jag Wire.h-biblioteket. För att använda LCD-skärmen inkluderar jag Adafruit-biblioteket som du kan ladda ner från https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library också Adafruit_GFX.h-biblioteket är tillgängligt här https:// github. com/adafruit/Adafruit-GFX-Library.
#omfatta
#omfatta
#omfatta
Adafruit_PCD8544 display = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Här kan du se alla variabler. Kontrollbyte och kommandobyte enligt beskrivningen tidigare. DeBounceTime kan justeras beroende på bruset på din kodare.
byte pot [2] = {1, 1}; byte controlByte = B0101000; // 7 bitar, byte commandByte = B10101001; // sista 2 bitarna är val av potmeter. byte potValue [2]; int i = 0; int deBounceTime = 10; // Justera detta värde beroende på buller const int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; osignerad lång newDebounceTime = 0; osignerad lång oldTime; booleskt pressat = 0; booleskt antal = 1;
I installationen definierar jag de rätta stiften och lägger den statiska texten på LCD -skärmen
void setup () {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 (SVART); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
I slingan kontrollerar jag först om intervallet är mer än 500 ms, om ja LCD -skärmen uppdateras. Om inte är knappen på givaren markerad. Om du trycker på toggleBuffer blir du uppringd. Efter detta kontrolleras kodaren. Om ingång 0 är låg (rotation detekterad) kontrollerar jag ingång B, om ingång B är 0 I ökar potten , andra minskar jag. Efter detta skickas värdet till DS1803 via wire.write.
void loop () {
intervall();
if (digitalRead (buttonPin) == 1 && (pressad == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {pressad = 0;}
if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; if (pot > 25) {pot = 25;}} annat {pot -; if (pot <1) {pot = 1;}} count = 1; newDebounceTime = millis ();
Wire.beginTransmission (controlByte); // börja sända
Wire.write (commandByte); // urval av potmetrar Wire.write (kruka [0] * 10); // skicka 1: a byte av potmeterdata Wire.write (kruka [1] * 10); // skicka 2: a byte av potmeterdata Wire.endTransmission (); // sluta sända} annars om (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {pressad = 1; om (i == 0) {i = 1;} annat {i = 0;}}
Först rensar jag området där jag måste skriva variablerna. Jag gör detta för att rita en rektangel i detta område. Efter det skriver jag variablerna till skärmen.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // läs första potmeter byte potValue [1] = Wire.read (); // läs andra potmeter byte display.fillRect (40, 0, 40, 45, WHITE); // rensa variabel skärm på LCD display.setCursor (40, 10); display.print (potValue [0]); // skriva första potmetervärdet till LCD display.setCursor (40, 22); display.print (potValue [1]); // skriv 2: a potmetervärdet till LCD display.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// intervall timer för att skriva data till LCD om ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Rekommenderad:
Hur man gör 4G LTE dubbel BiQuade -antenn enkla steg: 3 steg
Hur man gör 4G LTE dubbel BiQuade-antenn Enkla steg: För det mesta har jag inte haft bra signalstyrka för mina dagliga arbeten. Så. Jag söker och testar olika typer av antenner men fungerar inte. Efter bortkastad tid hittade jag en antenn som jag hoppas kunna göra och testa, eftersom den inte är byggnadsprincip
LM3886 effektförstärkare, dubbel eller bro (förbättrad): 11 steg (med bilder)
LM3886 effektförstärkare, dubbel eller bro (förbättrad): En kompakt dubbel effekt (eller bridge) förstärkare är lätt att bygga om du har lite elektronik erfarenhet. Endast ett fåtal delar krävs. Naturligtvis är det ännu enklare att bygga en monoförstärkare. De avgörande frågorna är strömförsörjningen och kylningen. Med
DIY -variabel LED -panel (dubbel färg): 16 steg (med bilder)
DIY -variabel LED -panel (dubbel färg): Förbättra din belysning genom att göra en prisvärd DIY laddningsbar LED -panel! Detta projekt är utrustat med ljusstyrkajustering i två färger och ger dig flexibiliteten att justera ljuskällans vitbalans för att matcha omgivningens omgivande ljus
Dubbel fördröjningseffekt: 10 steg (med bilder)
Dubbel fördröjningseffekt: SUPER enkel dubbel fördröjningseffekt! Mitt mål var att bygga den mest kompakta, mest galna fördröjningen med bara en handfull komponenter. Resultatet är en ljudlös maskin som är lätt att modifiera och som har ett otroligt massivt ljud. UPPDATERING: Detaljer
Bygg en dubbel 15V strömförsörjning med hjälp av hyllmodulerna för under $ 50: 10 steg (med bilder)
Bygg en dubbel 15V strömförsörjning med hjälp av hyllmodulerna för under $ 50: Introduktion: Om du är en hobbyist som hanterar ljud, kommer du att känna till dubbla järnvägsspänningar. De flesta lågeffekts ljudkort som förförstärkare kräver allt från +/- 5V till +/- 15V. Att ha en dubbelspänning gör det just det