Innholdsfortegnelse:
- Trinn 1: Tilkoblinger av DS1803
- Trinn 2: Kommando Byte
- Trinn 3: Kontroll av DS1803
- Trinn 4: Sett opp
- Trinn 5: Programmet
Video: DS1803 dobbelt digitalt potensiometer med Arduino: 5 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:25
Jeg liker å dele bruken av en DS1803 digital potmeter med en Arduino. Denne IC inneholder to digitale potmetre som kan styres over et to -tråders grensesnitt, for dette bruker jeg wire.h -biblioteket.
Denne IC kan erstatte en normal analog potmeter. På denne måten kan du styre for eksempel en forsterker eller strømforsyning.
I denne instruksen kontrollerer jeg lysstyrken til to LED -er for å vise arbeidet.
Arduino teller pulser til en roterende encoder og plasserer verdien i variabel potte [0] og potte [1]. Når du trykker på bryteren på encoderen, kan du veksle mellom potten [0] og potten [1].
Den faktiske verdien av grytene leses tilbake fra DS1803 og plasseres i variabel potValue [0] og potValue [1] og vises på en LCD.
Trinn 1: Tilkoblinger av DS1803
Her kan du se tilkoblingene til DS1803. H er den høye siden av potensiometeret, L den nedre siden og W viskeren. SCL og SDA er bussforbindelsene.
Med tilkobling A0, A1 og A2 kan du gi DS1803 sin egen adresse, på denne måten kan du styre flere enheter via en buss. I mitt eksempel har jeg gitt DS1803 -adressen 0 ved å koble alle pinnene til bakken.
Trinn 2: Kommando Byte
Måten DS1803 fungerer på kan brukes i kommandobyten. Når du velger "skriv potensiometer-0" velges begge potensiometrene, når du bare vil justere potensiometer-0, trenger du bare å sende den første databyten. "Skriv potensiometer-1" juster bare potmeter-1. "Skriv til begge potensiometre" gir begge potensiometrene samme verdi.
Trinn 3: Kontroll av DS1803
Kontrollbyten (figur 3) har en enhetsidentifikator, denne forblir alltid den samme. I mitt eksempel A0, A1 og A2 er 0 fordi vi velger adresse ved å sette alle A-pins til bakken. Den siste biten R/W vil bli satt til 0 eller 1 med kommandoen "Wire.beginTransmission" og "Wire.requestFrom" i Arduino. I figur 5 kan du se hele telegrammet. Det lest telegrammet er vist i figur 4.
Trinn 4: Sett opp
Denne kretsen viser hvordan du kobler til alt. Nokia LCD er tilgjengelig med forskjellige tilkoblinger. Sørg for at du kobler din riktig. Også roterende encoder hans forskjellige versjoner, noen har det vanlige på den midterste pinnen andre ikke. Jeg har satt et lite filternettverk (470 Ohm motstand med 100nF cap) for å filtrere A- og B -utgangssignalene til koderen. Jeg trenger dette filteret fordi utgangen hadde mye støy. Jeg har også satt en avvisningstimer i programmet for å avbryte noe støy. For resten tror jeg kretsen er klar. LCD -skjermen kan bestilles via Adafruit
Trinn 5: Programmet
For bruk av 2-leder bussen inkluderer jeg Wire.h biblioteket. For å bruke LCD-skjermen inkluderer jeg Adafruit-biblioteket som du kan laste ned fra https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library også Adafruit_GFX.h-biblioteket er tilgjengelig her https:// github. com/adafruit/Adafruit-GFX-Library.
#inkludere
#inkludere
#inkludere
Adafruit_PCD8544 display = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Her kan du se alle variablene. Kontrollbyte og kommandobyte som beskrevet tidligere. DeBounceTime kan justeres avhengig av støyen på encoderen din.
byte pot [2] = {1, 1}; byte controlByte = B0101000; // 7 bits, byte commandByte = B10101001; // siste 2 biter er valg av potmeter. byte potValue [2]; int i = 0; int deBounceTime = 10; // Juster denne verdien avhengig av støy const int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; usignert lang newDebounceTime = 0; usignert lang oldTime; boolsk presset = 0; boolsk telling = 1;
I oppsettet definerer jeg de riktige pinnene og legger den statiske teksten på LCD -skjermen
ugyldig oppsett () {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 sløyfen sjekker jeg først om intervallet er mer enn 500 ms, hvis ja blir LCD -skjermen oppdatert. Hvis ikke er knappen på koderen merket. Hvis du trykker på toggleBuffer, ring. Etter dette er koderen sjekket. Hvis inngang 0 er lav (rotasjon oppdaget) sjekker jeg inngang B, hvis inngang B er 0 I øker potten , reduserer jeg andre. Etter dette vil verdien bli sendt til DS1803 via wire.write.
void loop () {
intervall ();
if (digitalRead (buttonPin) == 1 && (presset == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {presset = 0;}
if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; if (pot > 25) {pot = 25;}} annet {pot -; if (pot <1) {pot = 1;}} count = 1; newDebounceTime = millis ();
Wire.beginTransmission (controlByte); // begynne å sende
Wire.write (commandByte); // utvalg av potmetre Wire.write (potten [0] * 10); // send 1. byte av potmeter data Wire.write (pot [1] * 10); // send 2. byte av potmeter -data Wire.endTransmission (); // slutte å sende} annet hvis (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {presset = 1; hvis (i == 0) {i = 1;} annet {i = 0;}}
Først fjerner jeg området der jeg må skrive variablene. Jeg gjør dette for å tegne et rektangel i dette området. Etter det skriver jeg variablene til skjermen.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // les første potmeter byte potValue [1] = Wire.read (); // les andre potmeter byte display.fillRect (40, 0, 40, 45, WHITE); // klar variabel skjerm på LCD -display. setCursor (40, 10); display.print (potValue [0]); // skriv første potmeterverdi til LCD display.setCursor (40, 22); display.print (potValue [1]); // skriv 2. potmeterverdi til LCD display.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
ugyldighetsintervall () {// intervalltimer for å skrive data til LCD hvis ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Anbefalt:
Kontroller LED -lysstyrken med potensiometer med Arduino: 3 trinn
Kontrollere LED -lysstyrke med potensiometer med Arduino: I dette prosjektet vil vi kontrollere lysstyrken til LED ved hjelp av variabel motstand levert av potensiometer. Dette er et veldig grunnleggende prosjekt for en nybegynner, men det vil lære deg mange ting om potensiometer og LED -arbeid som er nødvendig for å gjøre
MCP41HVX1 digitalt potensiometer for Arduino: 10 trinn (med bilder)
MCP41HVX1 digitalt potensiometer for Arduino: MCP41HVX1 familien av digitale potensiometre (aka DigiPots) er enheter som etterligner funksjonen til et analogt potensiometer og styres gjennom SPI. Et eksempel kan være å bytte volumknappen på stereoanlegget med en DigiPot som er
Billig dobbelt 30V/2A prosjekt strømforsyning: 7 trinn (med bilder)
Billige doble 30V/2A prosjektstrømforsyninger: Da jeg lette etter strømforsyningsmoduler og LCD-skjermer, kom jeg over et par av disse billige LCD 35W strømforsyningsmodulene som er vurdert til 0,5-30V @3A (50W med kjøleribbe og 4A overspenningsstrøm). Den har spenningsjustering og strømbegrensning. Det er også
Kontrollerende LED med potensiometer med Arduino Uno R3: 6 trinn
Kontrollere LED med potensiometer Med Arduino Uno R3: Tidligere har vi brukt Serial Monitor til å sende data til kontrollkortet, noe som kan være opplysende å kjenne til en ny programvare. I denne leksjonen, la oss se hvordan du endrer luminansen til en LED med et potensiometer, og mottar dataene fra potensiometet
Dobbelt 55-tommers buet TV-oppsett for PC-skjerm: 6 trinn (med bilder)
Dobbelt 55-tommers buet TV-oppsett for PC-skjerm: Her er mitt doble 55-tommers buede Samsung TV-oppsett for arbeidsstasjonen min. Jeg vil gi den tredobbelte TV -veggoppsettet senere. Abonner hvis du liker det