Sisukord:

DIP -häälestusvalija 1 tihvti abil: 4 sammu
DIP -häälestusvalija 1 tihvti abil: 4 sammu

Video: DIP -häälestusvalija 1 tihvti abil: 4 sammu

Video: DIP -häälestusvalija 1 tihvti abil: 4 sammu
Video: 8 Часов Лечебной Музыки Для Сна - Космическое Дыхание Вечности | Безусловная Любовь - Почувствуй Это 2024, November
Anonim
DIP -häälestusvalija 1 tihvti abil
DIP -häälestusvalija 1 tihvti abil

Mõni aeg tagasi töötasin "muusikakasti" projekti kallal, mille jaoks oli vaja valida koguni 10 erineva helilõigu vahel. Loomulik valik konkreetse loo valimiseks oli 4 -pin dip -lüliti, kuna 4 lülitit pakub 24= 16 erinevat seadet. Selle lähenemisviisi toore jõu rakendamiseks on aga vaja 4 seadme tihvti, üks iga lüliti jaoks. Kuna plaanisin arendamiseks kasutada ATtiny85, oli 4 tihvti kadu natuke liiga palju. Õnneks sattusin artikli juurde, mis kirjeldab geniaalset meetodit 1 analoogpinna kasutamiseks mitme lüliti sisendi haldamiseks.

Mitme lülitiga 1-sisenditehnika kasutab pingejaotusahelat, et anda ainulaadne täisarv iga 16 võimaliku lüliti seadistuse kombinatsiooni jaoks. Seda 16 täisarvu identifikaatorite komplekti kasutatakse seejärel rakendusprogrammis toimingu seadistusega seostamiseks.

See juhend sisaldab muusikakastirakenduse häälestusvaliku rakendamiseks mitme lüliti meetodit. Seejärel esitatakse valitud meloodia läbi pieso -summeri, kasutades Arduino toonifunktsiooni.

Samm: nõutav riistvara

Nõutav riistvara
Nõutav riistvara

UNO kasutamine rakendusplatvormina minimeerib vajalike riistvarakomponentide arvu. Mitme lülitiga sisendmeetodi rakendamiseks on vaja ainult 4-kontaktilist dip-lülitit, 5 takistit, mida kasutatakse pingejaguri jaoks, ja ühenduste ühendamiseks juhtmestikku. Muusikakasti häälestusvaliku rakendamiseks lisatakse konfiguratsioonile piesosummer. Valikuliselt, sõltuvalt kasutatavast dip -lüliti tüübist, on kasulik kasutada 2x4 8 -kontaktilist pistikupesa, et ühendada dip -lüliti leivaplaadiga, kuna tavalised dip -lüliti tihvtid näivad olevat mõeldud jootmiseks perfboardile, mida ei ühendata otse leivaplaadiga. Pistikupesa stabiliseerib dip -lüliti ühendusi ja hoiab lülitit lülituslülitite seadistamisel kergesti tõstmata.

Nimi Võimalik allikas Kuidas kasutada
4-kontaktiline dip-lüliti Valiku häälestamine
2x4 -pin pistikupesa (valikuline) Amazon Enamiku dip -lülitite postid ei hoia lülitit leivalaual kuigi hästi. Pistikupesa aitab ühendust kindlamaks muuta. Alternatiiviks on leida dip -lüliti, mis on tõeliselt valmistatud tavaliste IC -tihvtidega leivaplaadi kasutamiseks.

takistid:

  • 10K x 2
  • 20K
  • 40 tuhat
  • 80 000
Rakendage pingejagur
passiivne piesosummer Amazon Esitage meloodiat rakenduse juhituna Arduino toonifunktsiooni kaudu

2. samm: mitme lülitiga meetodi selgitus

Mitme lülitiga meetodi selgitus
Mitme lülitiga meetodi selgitus

Selles jaotises käsitletakse mitme lüliti meetodi põhikontseptsioone ja töötatakse välja võrrandid, mis on vajalikud ainulaadsete identifikaatorite iseseisvaks arvutamiseks iga 16 võimaliku dip-lüliti seadistuse jaoks. Neid identifikaatoreid saab seejärel kasutada rakendusprogrammis, et siduda lüliti konfiguratsioon toiminguga. Näiteks võite soovida, et seade - lüliti 1 sisse, lüliti 2 välja, lüliti 3 välja, lüliti 4 välja (1, 0, 0, 0) - mängiks Amazing Grace'i ja (0, 1, 0, 0) mängiks Lõvi magab täna öösel. Lühiduse ja lühiduse huvides nimetatakse konfiguratsiooni identifikaatoreid dokumendi ülejäänud osas võrdlusvahenditeks.

Pilt
Pilt

Mitme lülitiga meetodi põhikontseptsioon on pingejaguri ahel, mis koosneb kahest jadamisi takistusest, mis on ühendatud sisendpingega. Väljundpinge juhe on ühendatud takistite vahele, R1 ja R2, nagu eespool näidatud. Jagaja väljundpinge arvutatakse sisendpinge korrutatuna takisti R suhtega2 summale R1 ja R2 (võrrand 1). See suhe on alati väiksem kui 1, seega on väljundpinge alati väiksem kui sisendpinge.

Nagu ülaltoodud konstruktsiooniskeemil näidatud, on multilüliti konfigureeritud pingejagajaks koos R-ga2 fikseeritud ja R1 võrdne komposiit/ekvivalentse takistusega 4 dip -lülitiga takistitel. R väärtus1 sõltub sellest, millised dip -lülitid on sisse lülitatud ja aitavad seega kaasa komposiittakistusele. Kuna dip -lüliti takistid on paralleelsed, on ekvivalenttakistuse arvutamise võrrand esitatud komponentide takistite vastastikuste väärtustega. Meie konfiguratsiooni ja kõigi lülitite sisselülitamise korral saab võrrand

1/R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000

andes R1 = 5333,33 volti. Arvestades asjaolu, et enamikul seadistustel on vähemalt üks lülititest välja lülitatud, kasutatakse kordajana lüliti olekut:

1/R1 = s1*1/80000 + s2*1/4000 + s3*1/20000 + s4*1/10000 (2)

kus oleku kordaja, si, on võrdne 1 -ga, kui lüliti on sisse lülitatud, ja võrdub 0 -ga, kui lüliti on välja lülitatud. R1 saab nüüd kasutada võrrandis 1 vajaliku takistuse suhte arvutamiseks. Kasutades näidet uuesti juhul, kui kõik lülitid on sisse lülitatud

SUHTE = R2/(R.1+R2) = 10000/(5333.33+10000) =.6522

Prognoositava võrdlusväärtuse arvutamise viimane samm on RATIO korrutamine 1023 -ga, et jäljendada funktsiooni analogRead mõju. Juhtumi, kus kõik lülitid on sisse lülitatud, identifikaator on siis

võrdleja15 = 1023*.6522 = 667

Kõik võrrandid on nüüd olemas 16 võimaliku lüliti sätte identifikaatorite arvutamiseks. Kokku võtma:

  1. R1 arvutatakse võrrandi 2 abil
  2. R1 ja R2 kasutatakse nendega seotud takistuse RATIO arvutamiseks
  3. võrdlusväärtuse saamiseks korrutatakse suhtarv 1023 -ga
  4. valikuliselt saab ennustatud väljundpinget arvutada ka kui RATIO*Vin

Komparaatorite komplekt sõltub ainult pingejaguri jaoks kasutatud takisti väärtustest ja on konfiguratsiooni jaoks ainulaadne allkiri. Kuna jagaja väljundpinged kõikuvad jooksvalt (ja lugemisel lugemiseks), varieerub selles kontekstis ainulaadne, et kuigi kaks identifikaatorite komplekti ei pruugi olla täpselt samad, on need piisavalt lähedal, et komponentide võrdluserinevused jäävad väikese eel- määratud intervall. Intervallisuuruse parameeter tuleb valida piisavalt suur, et arvestada eeldatavate kõikumistega, kuid piisavalt väike, et erinevad lüliti sätted ei kattuks. Tavaliselt töötab 7 vaheaja poole laiuse jaoks hästi.

Konkreetse konfiguratsiooni võrdluskomplekti saab hankida mitmel viisil - käivitage demoprogramm ja salvestage iga seadistuse väärtused; arvutamiseks kasutage järgmise jaotise tabelit; kopeerige olemasolev komplekt. Nagu eespool märgitud, on kõik komplektid tõenäoliselt veidi erinevad, kuid peaksid töötama. Soovitan mitme meetodi seadistamiseks kasutada meetodi autori identifikaatorikomplekti ja järgmise jaotise arvutustabelit, kui mõnda takistit on oluliselt muudetud või lisatakse rohkem takistid.

Järgmine demoprogramm illustreerib võrdlusmasinate kasutamist praeguse dip -lüliti sätte tuvastamiseks. Igas programmitsüklis viiakse läbi analogRead, et saada praeguse konfiguratsiooni identifikaator. Seejärel võrreldakse seda identifikaatorit võrdlusloendis, kuni vaste leitakse või loend ammendub. Kui vaste leitakse, väljastatakse kontrollimiseks väljundsõnum; kui seda ei leita, antakse hoiatus. Silmusesse sisestatakse 3 -sekundiline viivitus, nii et jadaväljundi aken ei jääks sõnumitega ülekoormatuks, ning anda aega lülituslüliti konfiguratsiooni lähtestamiseks.

//-------------------------------------------------------------------------------------

// Demoprogramm pingejaguri väljundi lugemiseks ja selle abil // praeguse dip -lüliti konfiguratsiooni tuvastamiseks, otsides väljundväärtust üles iga võimaliku sätte // võrdlusväärtuste massiivist. Otsingumassiivi väärtused saab // saada konfiguratsiooni eelmisest käivitamisest või arvutuste kaudu //, mis põhinevad aluseks olevatel võrranditel. // ------------------------------------------------ -------------------------------------- võrdlejas [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Töötlusmuutujate määratlemine int dipPin = A0; // analoogpinge pingejaguri sisendi jaoks int dipIn = 0; // omab jagaja pinge väljundit, mis on tõlgitud analogRead int count = 0; // silmusloendur int epsilon = 7; // võrdlusintervall poole laiusega bool dipFound = false; // tõsi, kui praegusest pingejaguri väljundist leiti otsingu tabel void setup () {pinMode (dipPin, INPUT); // seadista pingejaoturi tihvt INPUT Serial.begin (9600); // jadaühenduse lubamine} void loop () {delay (3000); // hoidke väljundit liiga kiirelt kerimisest // Otsinguparameetrite initsialiseerimine count = 0; dipFound = vale; // Voolu väljundpinge lugemine ja dokumenteerimine dipIn = analogRead (dipPin); Serial.print ("jagaja väljund"); Serial.print (dipIn); // Otsi võrdlusloendist praegust väärtust, kui ((loend <16) && (! DipFound)) {if (abs (dipIn - võrdlus [count]) <= epsilon) {// leidis selle dipFound = true; Serial.print ("leitud sisenemisel"); Serial.print (count); Serial.println ("väärtus" + string (võrdlus [loend])); murda; } loendama ++; } if (! dipFound) {// väärtus pole tabelis; ei tohiks juhtuda Serial.println ("OOPS! Ei leitud; parem helistada Ghost Busters"); }}

3. samm: võrdleva arvutustabel

Pilt
Pilt

Arvutused 16 võrdlusväärtuse kohta on toodud ülaltoodud arvutustabelis. Lisatud Exceli fail on allalaadimiseks saadaval selle jaotise allosas.

Arvutustabeli veerud A-D registreerivad dip-lüliti takisti väärtused ja 16 võimalikku lüliti seadistust. Pange tähele, et fritiseerimise skeemil näidatud riistvara DIP -lüliti on tegelikult nummerdatud arvutustabelis näidatud paremalt vasakule nummerdamise asemel vasakult paremale. Mulle tundus see mõnevõrra segane, kuid alternatiiv ei sea konfiguratsiooni "1" (0, 0, 0, 1) loendi esimesele kohale. Veerus E kasutatakse pingejaoturi ekvivalentse takistuse R arvutamiseks eelmise jaotise valemit 21 seadistuse jaoks. Veerg F kasutab seda tulemust seonduva takistuse suhte arvutamiseks ja lõpuks veerg G korrutab RATIO väärtuse analogRead max väärtusega (1023), et saada ennustatud võrdlusväärtus. Viimased 2 veergu sisaldavad demo programmi tegelikke väärtusi koos prognoositud ja tegelike väärtuste erinevustega.

Eelmises osas mainiti kolme meetodit võrdlusväärtuste kogumi saamiseks, sealhulgas selle arvutustabeli laiendamiseks, kui takisti väärtusi oluliselt muudetakse või lisatakse rohkem lüliteid. Näib, et takistite väärtuste väikesed erinevused ei mõjuta oluliselt lõpptulemusi (mis on hea, kuna takistite spetsifikatsioonid annavad tolerantsi, näiteks 5%ja takisti on harva võrdne selle tegeliku väärtusega).

4. samm: esitage lugu

Esitage lugu
Esitage lugu

Selleks, et illustreerida mitme lüliti tehnikat rakenduses kasutada, muudetakse jaotise "Meetodi selgitus" võrdlusdemokrogrammi, et rakendada muusikakasti programmi häälestusvaliku töötlemine. Rakenduse värskendatud konfiguratsioon on näidatud ülal. Riistvara ainus täiendus on passiivne piesosummer valitud viisi esitamiseks. Tarkvara põhimuudatus on helina ja Arduino toonirutiini abil tuvastatud viisi esitamise rutiini lisamine.

Saadaolevad viisijupid sisalduvad päisefailis Tunes.h koos vajalike tugistruktuuride määratlusega. Iga viis on määratletud kui märkmetega seotud struktuuride massiiv, mis sisaldab noodi sagedust ja kestust. Märkmete sagedused sisalduvad eraldi päisefailis Pitches.h. Programmi ja päisefailid on selle jaotise lõpus allalaadimiseks saadaval. Kõik kolm faili tuleks paigutada samasse kataloogi.

Valik ja identifitseerimine toimub järgmiselt.

  1. "Kasutaja" seab dip -lülitid soovitud häälestusega seotud konfiguratsiooni
  2. igal programmitsükli tsüklil saadakse analogRead kaudu praeguse dip -lüliti sätte identifikaator
  3. 2. etapi konfiguratsioonitunnust võrreldakse kõigi saadaolevate lugude loendis olevate võrdlejatega
  4. Kui vaste leitakse, kutsutakse välja playTune rutiin koos vajalike andmetega, et pääseda juurde häälestusloendile

    Kasutades Arduino toonifunktsiooni, esitatakse iga noot läbi summeri

  5. Kui vastet ei leita, ei võeta midagi ette
  6. korrake 1-5

Saadaval olevate lugude DIP -lüliti sätted on toodud allolevas tabelis, kus 1 tähendab lülitit sees, 0 väljalülitamist. Tuletame meelde, et see, kuidas dip-lüliti on orienteeritud, asetab lüliti 1 vasakpoolsesse asendisse (see, mis on seotud 80K takistiga).

NIMI Lüliti 1 Lüliti 2 Lüliti 3 Lüliti 4
Danny Boy 1 0 0 0
Väike karu 0 1 0 0
Lõvi magab täna öösel 1 1 0 0
Keegi ei tea häda 0 0 1 0
Imeline graatsia 0 0 0 1
Tühi ruum 1 0 0 1
MockingBird Hill 1 0 1 1

Piesokummi helikvaliteet pole kindlasti suurepärane, kuid see on vähemalt äratuntav. Kui toonid on mõõdetud, on need nootide sagedusele väga lähedal. Üks huvitav tehnika, mida programmis kasutatakse, on salvestada häälestusandmed välk-/programmimälu sektsiooni, mitte vaikimisi andmete mälu sektsiooni, kasutades PROGMEM direktiivi. Andmete sektsioon sisaldab programmi töötlemise muutujaid ja on mõne ATtiny mikrokontrolleri puhul palju väiksem, umbes 512 baiti.

Soovitan: