ዝርዝር ሁኔታ:

DS1803 ባለሁለት ዲጂታል ፖታቲሞሜትር ከአርዱዲኖ ጋር 5 ደረጃዎች
DS1803 ባለሁለት ዲጂታል ፖታቲሞሜትር ከአርዱዲኖ ጋር 5 ደረጃዎች

ቪዲዮ: DS1803 ባለሁለት ዲጂታል ፖታቲሞሜትር ከአርዱዲኖ ጋር 5 ደረጃዎች

ቪዲዮ: DS1803 ባለሁለት ዲጂታል ፖታቲሞሜትር ከአርዱዲኖ ጋር 5 ደረጃዎች
ቪዲዮ: DFT_#A92 DOUBLE POTENTIOMETRE NUMERIQUE - I2C - DS1803 - ATTINY85 2024, ህዳር
Anonim
DS1803 ባለሁለት ዲጂታል ፖታቲሞሜትር ከአርዱዲኖ ጋር
DS1803 ባለሁለት ዲጂታል ፖታቲሞሜትር ከአርዱዲኖ ጋር

የ DS1803 ዲጂታል ፖታሜትር አጠቃቀምን ከአርዱዲኖ ጋር ማጋራት እወዳለሁ። ይህ IC በሁለት የሽቦ በይነገጽ ላይ ሊቆጣጠሩ የሚችሉ ሁለት ዲጂታል ፖታሜትሮችን ይ containsል ፣ ለዚህ እኔ የ wire.h ቤተ -መጽሐፍትን እጠቀማለሁ።

ይህ አይሲ የተለመደው የአናሎግ ፖታሜትር ሊተካ ይችላል። በዚህ መንገድ ለምሳሌ ማጉያ ወይም የኃይል አቅርቦትን መቆጣጠር ይችላሉ።

በዚህ መመሪያ ውስጥ ሥራውን ለማሳየት የሁለት ኤልኢዲዎችን ብሩህነት እቆጣጠራለሁ።

አርዱinoኖ የ rotary encoder ን ብዛት በመቁጠር እሴቱን በተለዋዋጭ ድስት [0] እና ማሰሮ [1] ውስጥ ያስቀምጣል። ማብሪያ / ማጥፊያውን (ኢንኮደር) ላይ ሲገፉት ፣ በድስት [0] እና በድስት [1] መካከል መቀያየር ይችላሉ።

የምድጃዎቹ ትክክለኛ ዋጋ ከ DS1803 ተመልሶ ይነበባል እና በተለዋዋጭ potValue [0] እና potValue [1] ውስጥ ይቀመጣል እና በ LCD ላይ ይታያል።

ደረጃ 1 የ DS1803 ግንኙነቶች

የ DS1803 ግንኙነቶች
የ DS1803 ግንኙነቶች

እዚህ የ DS1803 ግንኙነቶችን ማየት ይችላሉ። ሸ የ potentiometer ከፍተኛ ጎን ፣ L ዝቅተኛ ጎን እና W መጥረጊያ ነው። SCL እና SDA የአውቶቡስ ግንኙነቶች ናቸው።

ከግንኙነት A0 ፣ A1 እና A2 ጋር ለ DS1803 የራሱን አድራሻ መስጠት ይችላሉ ፣ በዚህ መንገድ ብዙ መሳሪያዎችን በአንድ አውቶቡስ በኩል መቆጣጠር ይችላሉ። በእኔ ምሳሌ ሁሉንም ፒኖች ከመሬት ጋር በማገናኘት ለ DS1803 adres 0 ሰጥቻለሁ።

ደረጃ 2 - የትእዛዝ ባይት

ትዕዛዝ ባይት
ትዕዛዝ ባይት

DS1803 የሚሠራበት መንገድ በትእዛዝ ባይት ውስጥ ሊያገለግል ይችላል። “ፖታቲሞሜትር -0 ፃፍ” ን ሲመርጡ ሁለቱም ፖታቲሞሜትሮች ተመርጠዋል ፣ ፖታቲሜትር -0 ን ማስተካከል ሲፈልጉ ፣ የመጀመሪያውን የውሂብ ባይት ብቻ መላክ አለብዎት። ፖታቲሞሜትር -1 ይፃፉ ፖቲሜትር -1 ን ብቻ ያስተካክሉ። “ለሁለቱም ፖታቲሞሜትሮች ይፃፉ” ለሁለቱም ፖታቲሞሜትሮች ተመሳሳይ እሴት ይሰጣል።

ደረጃ 3 የ DS1803 ቁጥጥር

የ DS1803 ቁጥጥር
የ DS1803 ቁጥጥር

የመቆጣጠሪያ ባይት (ምስል 3) የመሣሪያ መለያ አለው ፣ ይህ ሁል ጊዜ ተመሳሳይ ነው። በእኔ ምሳሌ A0 ፣ A1 እና A2 ውስጥ 0 ናቸው ምክንያቱም ሁሉንም ኤ-ፒኖች መሬት ላይ በማስቀመጥ አድሬዎችን እንመርጣለን። የመጨረሻው ቢት አር/ወ በአርዱኖ ውስጥ ባለው “Wire.beginTransmission” እና “Wire.requestFrom” ትዕዛዝ ወደ 0 ወይም 1 ይዘጋጃል። በስእል 5 ሙሉውን ቴሌግራም ማየት ይችላሉ። የተነበበው ቴሌግራም በምስል 4 ላይ ይታያል።

ደረጃ 4: ያዋቅሩ

አዘገጃጀት
አዘገጃጀት

ይህ ወረዳ ሁሉንም ነገር እንዴት ማገናኘት እንደሚቻል ያሳያል። የኖኪያ ኤልሲዲ ከተለያዩ ግንኙነቶች ጋር ይገኛል ፣ የእርስዎን በትክክል ማገናኘትዎን ያረጋግጡ። እንዲሁም የተለያዩ ስሪቶቹ ሮታሪ ኢንኮደር ፣ አንዳንዶቹ በመካከለኛው ፒን ላይ ሌሎች የተለመዱ አይደሉም። የመቀየሪያውን የ A እና B የውጤት ምልክቶችን ለማጣራት ትንሽ የማጣሪያ አውታር (470 Ohm resistor ከ 100nF ካፕ ጋር) አስቀምጫለሁ። ውጤቱ ብዙ ጫጫታ ስላለው ይህንን ማጣሪያ እፈልጋለሁ። እኔ ደግሞ አንዳንድ ጫጫታዎችን ለመሰረዝ በፕሮግራሜ ውስጥ የማስወገጃ ሰዓት ቆጣሪ አደርጋለሁ። በቀሪው ወረዳው ግልፅ ይመስለኛል። ኤልሲዲው በአዳፍ ፍሬዝ በኩል https://www.adafruit.com/product/338 በኩል ሊታዘዝ ይችላል።

ደረጃ 5 - ፕሮግራሙ

ለባለ 2 ሽቦ አውቶቡስ የ Wire.h ቤተ-መጽሐፍትን አካትቻለሁ። ኤልሲዲውን ለመጠቀም ከ 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} ፤ ባይት መቆጣጠሪያByte = B0101000; // 7 ቢት ፣ ባይት ትእዛዝByte = B10101001; // የመጨረሻዎቹ 2 ቢት የ potmeter ምርጫ ነው። ባይት potValue [2]; int i = 0; int deBounceTime = 10; // በድምፅ const int encoder_A = 8 ላይ በመመስረት ይህንን እሴት ያስተካክሉ። const int encoder_B = 9; const int buttonPin = 2; ያልተፈረመ ረጅም newDebounceTime = 0; ያልተፈረመ ረጅም oldTime; ቡሊያን ተጭኗል = 0; ቡሊያን ቆጠራ = 1;

በማዋቀሩ ውስጥ ትክክለኛውን ፒን እገልጻለሁ እና የማይንቀሳቀስ ጽሑፍን በኤልሲዲ ላይ አደርጋለሁ

ባዶነት ማዋቀር () {Wire.begin (); Serial.begin (9600); pinMode (encoder_A ፣ INPUT); pinMode (encoder_B ፣ INPUT); pinMode (አዝራር ፒን ፣ ግቤት); newDebounceTime = ሚሊስ ();

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 በላይ ከሆነ ፣ አዎ ፣ ኤልሲዲው ከተዘመነ ያረጋግጡ። ካልሆነ በአቃፊው ላይ ያለው ቁልፍ ምልክት ተደርጎበታል። የመቀየሪያ Buffer ከተጫኑ ይደውሉ። ከዚህ በኋላ ኢንኮደር ምልክት ይደረግበታል። ግብዓት 0 ዝቅተኛ ከሆነ (ሽክርክሪት ተገኝቷል) የግብዓት ቢን እፈትሻለሁ ፣ ግቤት ቢ 0 እኔ ድስት እጨምራለሁ ፣ ሌሎች እኔ እቀንስበታለሁ። ከዚህ በኋላ እሴቱ በሽቦ.write በኩል ወደ DS1803 ይላካል።

ባዶነት loop () {

ክፍተት ();

ከሆነ (digitalRead (buttonPin) == 1 && (pressed == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {pressed = 0;}

ከሆነ (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; ከሆነ (ድስት > 25) {ማሰሮ = 25;}} ሌላ {ማሰሮ -; ከሆነ (ድስት <1) {ማሰሮ = 1;}} መቁጠር = 1; newDebounceTime = ሚሊስ ();

Wire.begin ማስተላለፍ (controlByte); // ማስተላለፍ ይጀምሩ

Wire.write (commandByte); // የ potmeters ምርጫ Wire.write (ማሰሮ [0] * 10); // 1 ኛ ባይት የሜትሮሜትር ውሂብ ላክ Wire.write (ማሰሮ [1] * 10); // የፖሜሜትር ውሂብ 2 ኛ ባይት ላክ Wire.endTransmission (); // ማስተላለፍ አቁም} ሌላ ከሆነ (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = ሚሊስ (); }}

ባዶ toggleBuffer () {ተጫነ = 1; ከሆነ (i == 0) {i = 1;} ሌላ {i = 0;}}

መጀመሪያ ልዩነቶችን መጻፍ ያለብኝን ቦታ አጸዳለሁ። በዚህ አካባቢ አራት ማዕዘን ለመሳል ይህንን አደርጋለሁ። ከዚያ በኋላ ተለዋዋጮችን ወደ ማያ ገጹ እጽፋለሁ።

ባዶ ጽሑፍToLCD () {Wire.requestFrom (controlByte ፣ 2); potValue [0] = Wire.read (); // የመጀመሪያውን የ potmeter byte potValue ያንብቡ [1] = Wire.read (); // ሁለተኛውን የ potmeter byte display.fillRect (40 ፣ 0 ፣ 40 ፣ 45 ፣ WHITE) ያንብቡ። // በኤልሲዲ ማሳያ ላይ ግልጽ ተለዋዋጭ ማያ ገጽ ።setCursor (40 ፣ 10) ፤ display.print (potValue [0]); // 1 ኛ የሜትርሜትር እሴት ለኤልሲዲ ማሳያ ይፃፉ። ቅንጅቶች (40 ፣ 22) ፤ display.print (potValue [1]); // ለኤችዲዲ ማሳያ የ 2 ኛ ፖሜሜትር እሴት ይፃፉ። setCursor (60 ፣ (10 + i * 12)) ፤ display.print ("<"); display.display (); }

ባዶ ክፍተት () {// የጊዜ መቁጠሪያ ሰዓት ቆጣሪ ((ሚሊስ () - oldTime)> 500) {writeToLCD () ከሆነ ፣ oldTime = ሚሊስ (); }}

የሚመከር: