INHOUDSOPGAWE:
- Stap 1: Verbindings van die DS1803
- Stap 2: Command Byte
- Stap 3: Beheer van die DS1803
- Stap 4: Stel op
- Stap 5: Die program
Video: DS1803 dubbele digitale potensiometer met Arduino: 5 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
Ek deel graag die gebruik van 'n DS1803 digitale potmeter met 'n Arduino. Hierdie IC bevat twee digitale potmeters wat beheer kan word oor 'n tweedraads koppelvlak, hiervoor gebruik ek die wire.h biblioteek.
Hierdie IC kan 'n normale analoog potmeter vervang. Op hierdie manier kan u byvoorbeeld 'n versterker of kragtoevoer beheer.
In hierdie instruksies beheer ek die helderheid van twee LED's om die werking te wys.
Die arduino tel die pulse van 'n roterende encoder en plaas die waarde in die veranderlike pot [0] en pot [1]. As u op die skakelaar op die encoder druk, kan u wissel tussen pot [0] en pot [1].
Die werklike waarde van die potte word van die DS1803 af gelees en in veranderlike potValue [0] en potValue [1] geplaas en op 'n LCD vertoon.
Stap 1: Verbindings van die DS1803
Hier kan u die verbindings van die DS1803 sien. H is die hoë kant van die potensiometer, L die lae kant en W die ruitveër. SCL en SDA is die busverbindings.
Met verbinding A0, A1 en A2 kan u die DS1803 sy eie adres gee, op hierdie manier kan u meer toestelle via een bus beheer. In my voorbeeld het ek die DS1803 adres 0 gegee deur alle penne aan die grond te koppel.
Stap 2: Command Byte
Die manier waarop die DS1803 werk, kan in die opdragbyte gebruik word. As u 'skryf potensiometer-0' kies, word beide potensiometers gekies; as u slegs potensiometer-0 wil aanpas, hoef u slegs die eerste databyte te stuur. "Skryf potensiometer-1" pas potmeter-1 net aan. "Skryf aan beide potensiometers" gee beide potensiometers dieselfde waarde.
Stap 3: Beheer van die DS1803
Die beheerbyte (figuur 3) het 'n toestel -identifiseerder; dit bly altyd dieselfde. In my voorbeeld is A0, A1 en A2 0 omdat ons adres kies deur alle A-penne op die grond te sit. Die laaste bietjie R/W word op 0 of 1 gestel deur die opdrag "Wire.beginTransmission" en "Wire.requestFrom" in die Arduino. In figuur 5 kan u die hele telegram sien. Die geleesde telegram word in figuur 4 getoon.
Stap 4: Stel op
Hierdie kring wys hoe u alles kan koppel. Die Nokia LCD is beskikbaar met verskillende verbindings; maak seker dat u die regte verbinding het. Ook die roterende encoder sy verskillende weergawes, sommige het die gemeenskaplike op die middelste pen ander nie. Ek het 'n klein filternetwerk (470 Ohm -weerstand met 'n 100nF -kap) aangebring om die A- en B -seine van die encoder te filter. Ek het hierdie filter nodig omdat die uitset baie geraas gehad het. Ek het ook 'n ontbindingstimer in my program geplaas om geraas te kanselleer. Vir die res dink ek die kring is duidelik. Die LCD kan bestel word via Adafruit
Stap 5: Die program
Vir die gebruik van die 2-draad bus sluit ek die Wire.h biblioteek in. Om die LCD te gebruik, sluit ek die Adafruit-biblioteek in wat u kan aflaai van https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library, ook die Adafruit_GFX.h-biblioteek is hier beskikbaar https:// github. com/adafruit/Adafruit-GFX-biblioteek.
#insluit
#insluit
#insluit
Adafruit_PCD8544 vertoning = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Hier kan u al die veranderlikes sien. Beheer byte en opdragbyte soos voorheen beskryf. Die deBounceTime kan aangepas word, afhangende van die geraas op u encoder.
byte pot [2] = {1, 1}; byte controlByte = B0101000; // 7 bisse, byte commandByte = B10101001; // laaste 2 bisse is potmeterkeuse. byte potValue [2]; int i = 0; int deBounceTime = 10; // Pas hierdie waarde aan, afhangende van die geraas const int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; ongetekende lang newDebounceTime = 0; ongetekende lang oldTime; booleaans gedruk = 0; boolean count = 1;
In die opstelling definieer ek die regte penne en plaas ek die statiese teks op die LCD
ongeldige opstelling () {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 (SWART); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); vertoon.display ();
}
In die lus kyk ek eers of die interval meer as 500 ms is, indien wel, word die LCD opgedateer. Indien nie, word die knoppie op die encoder nagegaan. As u die toggleBuffer ingedruk het, word u gebel. Hierna word die encoder nagegaan. As inset 0 laag is (rotasie bespeur), kyk ek na invoer B, as inset B 0 is, verhoog ek pot , verminder ek ander. Hierna sal die waarde via wire.write na die DS1803 gestuur word.
leemte -lus () {
interval ();
if (digitalRead (buttonPin) == 1 && (gedruk == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {gedruk = 0;}
if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; if (pot > 25) {pot = 25;}} anders {pot -; as (pot <1) {pot = 1;}} count = 1; newDebounceTime = millis ();
Wire.beginTransmission (controlByte); // begin stuur
Wire.write (commandByte); // keuse van potmeters Wire.write (pot [0] * 10); // stuur 1ste greep potmeter -data Wire.write (pot [1] * 10); // stuur 2de greep potmeter -data Wire.endTransmission (); // stop met die versending} anders as (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {gedruk = 1; as (i == 0) {i = 1;} anders {i = 0;}}
Eers maak ek die gebied skoon waar ek die veranderlikes moet skryf. Ek doen dit om 'n reghoek in hierdie gebied te teken. Daarna skryf ek die veranderlikes op die skerm.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // lees die eerste potmeter -byte potValue [1] = Wire.read (); // lees tweede potmeter byte display.fillRect (40, 0, 40, 45, WIT); // duidelik veranderlike skerm op LCD display.setCursor (40, 10); display.print (potValue [0]); // skryf 1ste potmeterwaarde na LCD display.setCursor (40, 22); display.print (potValue [1]); // skryf 2de potmeterwaarde na LCD display.setCursor (60, (10 + i * 12)); display.print ("<"); vertoon.display (); }
leegte interval () {// interval timer om data na LCD te skryf as ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Aanbeveel:
Dubbele kleurstaafgrafiek met CircuitPython: 5 stappe (met foto's)
Dubbelkleurstaafgrafiek met CircuitPython: Ek het hierdie LED-staafgrafiek op die Pimoroni-webwerf gesien en gedink dat dit 'n goedkoop en prettige projek kan wees terwyl ek covid-19 onderbreek. Dit bevat 24 LED's, 'n rooi en 'n groen, in elk van sy 12 segmente, so in teorie behoort u in staat te wees om
MCP41HVX1 digitale potensiometer vir Arduino: 10 stappe (met foto's)
MCP41HVX1 digitale potensiometer vir Arduino: Die MCP41HVX1 -familie van digitale potensiometers (ook bekend as DigiPots) is toestelle wat die funksie van 'n analoog potensiometer naboots en deur SPI beheer word. 'N Voorbeeld van die toepassing is om die volumeknop op u stereo te vervang deur 'n DigiPot wat
IoT -data -bediener met dubbele temperatuur: 12 stappe (met foto's)
IoT -data -bediener met dubbele temperatuur: dit is my eerste poging om 'n instruksies te skryf. As u dink dat dit nie te erg is nie, stem dan vir my in die eerste keer outeurwedstryd. Dit is my Lock-Down-projek om 2 temperature in 'n kweekhuis op afstand te monitor
Dubbele 7 -segment vertonings wat beheer word deur potensiometer in CircuitPython - Demonstrasie van visiebestandheid: 9 stappe (met foto's)
Dubbele 7-segment vertonings wat deur die potensiometer in CircuitPython beheer word-Demonstrasie van visiebestandheid: Hierdie projek gebruik 'n potensiometer om die skerm op 'n paar 7-segment LED-skerms (F5161AH) te beheer. As die potensiometerknop gedraai word, verander die getoonde getal in die reeks 0 tot 99. Slegs een LED brand op enige oomblik, baie kort, maar die
Echosoeker met dubbele sensor: 7 stappe (met foto's)
Dual Sensor Echo Locator: a.artikels {lettergrootte: 110,0%; lettertipe gewig: vet; lettertipe: kursief; teksversiering: geen; agtergrond-kleur: rooi;} a.articles: sweef {agtergrond-kleur: swart;} Hierdie instruksie verduidelik hoe u die ligging van 'n voorwerp kan bepaal met 'n