Sisällysluettelo:

DIP -viritysvalitsin 1 -nastaisella: 4 vaihetta
DIP -viritysvalitsin 1 -nastaisella: 4 vaihetta

Video: DIP -viritysvalitsin 1 -nastaisella: 4 vaihetta

Video: DIP -viritysvalitsin 1 -nastaisella: 4 vaihetta
Video: 5 AM at Freddy's: The Prequel. ( Finnish fandub ) 2024, Heinäkuu
Anonim
DIP -viritysvalitsin käyttämällä 1 -nastaista
DIP -viritysvalitsin käyttämällä 1 -nastaista

Jonkin aikaa sitten työskentelin "musiikkilaatikko" -projektin parissa, joka joutui valitsemaan jopa 10 eri sävelkatkelman välillä. Luonnollinen valinta tietyn virityksen valitsemiseksi oli 4 -nastainen dip -kytkin, koska 4 -kytkimet tarjoavat 24= 16 eri asetusta. Kuitenkin tämän menetelmän raa'an voiman toteutus vaatii 4 laitteen nastaa, yhden kullekin kytkimelle. Koska aikoin käyttää ATtiny85: tä kehitykseen, 4 nastan menetys oli hieman liikaa. Onneksi törmäsin artikkeliin, joka kuvaa nerokasta menetelmää yhden analogisen nastan käyttämiseksi useiden kytkentätulojen käsittelyyn.

Monikytkin; 1-sisääntulotekniikka käyttää jännitteenjakajapiiriä antaakseen ainutlaatuisen kokonaislukuarvon jokaiselle 16 mahdolliselle kytkimen asetusyhdistelmälle. Tätä 16 kokonaislukutunnistetta käytetään sovellusohjelmassa toiminnon liittämiseen asetukseen.

Tässä ohjeessa käytetään monikytkentämenetelmää musiikkikotelosovelluksen viritysvalinnan toteuttamiseksi. Valittu melodia toistetaan pietsosummerin kautta Arduino -äänitoiminnolla.

Vaihe 1: Vaadittu laitteisto

Vaadittu laitteisto
Vaadittu laitteisto

UNO: n käyttö toteutusalustana minimoi tarvittavien laitteistokomponenttien määrän. Monikytkentäisen syöttömenetelmän toteuttaminen vaatii vain 4-nastaisen upotuskytkimen, 5 jännitteenjakajaan käytettyä vastusta ja kytkentäjohdon. Pietsosummeri lisätään kokoonpanoon musiikkikotelon viritysvalitsimen toteuttamiseksi. Vaihtoehtoisesti, riippuen käytetystä dippikytkimestä, on hyödyllistä käyttää 2x4 8 -nastaista pistorasiaa dip -kytkimen liittämiseen leipälevyyn, koska tavalliset dip -kytkintapit näyttävät olevan tarkoitettu juotettavaksi perfboardiin, joka ei liity suoraan leipälautaan. Pistorasia vakauttaa dip -kytkimen liitännät ja estää kytkimen nostamisen helposti, kun asetat vaihtokytkimet.

Nimi Mahdollinen lähde Kuinka käytetty
4-nastainen dip-kytkin Viritä valinta
2x4 -nastainen pistorasia (valinnainen) Amazon Useimpien dip -kytkimien pylväät eivät pidä kytkintä kovin hyvin leipälaudalla. Pistorasia auttaa lujittamaan yhteyttä. Vaihtoehto on löytää dip -kytkin, joka on todella tehty leipälautakäyttöön tavallisilla IC -nastoilla.

vastukset:

  • 10K x 2
  • 20K
  • 40 000
  • 80 000
Ota käyttöön jännitteenjakaja
passiivinen pietsosummeri Amazon Soita melodia sovelluksen ohjaamana Arduino -äänitoiminnon kautta

Vaihe 2: Monikytkimen menetelmä Selitys

Monikytkimen menetelmä Selitys
Monikytkimen menetelmä Selitys

Tässä osassa käsitellään monikytkentämenetelmän taustalla olevia käsitteitä ja kehitetään yhtälöt, joita tarvitaan yksilöllisten tunnisteiden itsenäiseen laskemiseen kullekin 16 mahdollisesta dip-kytkinasetuskonfiguraatiosta. Näitä tunnisteita voidaan sitten käyttää sovellusohjelmassa kytkeäksesi kytkimen kokoonpanon toimintoon. Haluat esimerkiksi, että asetus - kytkin 1 päälle, kytkin 2 pois päältä, kytkin 3 pois päältä, kytkin 4 pois päältä (1, 0, 0, 0) - toistaa Amazing Grace ja (0, 1, 0, 0) pelata Leijona nukkuu tänä yönä. Lyhyyden ja ytimekkisyyden vuoksi kokoonpanotunnisteita kutsutaan vertailijoiksi asiakirjan loppuosassa.

Kuva
Kuva

Monikytkinmenetelmän peruskäsite on jännitteenjakajapiiri, joka koostuu 2 sarjavastuksesta, jotka on kytketty tulojännitteeseen. Lähtöjännitejohto on kytketty vastuksen R väliin1 ja R.2, kuten yllä on esitetty. Jakajan lähtöjännite lasketaan tulojännitteenä kerrottuna vastuksen R suhteella2 R: n summaan1 ja R.2 (yhtälö 1). Tämä suhde on aina pienempi kuin 1, joten lähtöjännite on aina pienempi kuin tulojännite.

Kuten yllä olevasta kaaviosta ilmenee, monikytkin on konfiguroitu jännitteenjakajaksi R: llä2 kiinteä ja R1 yhtä suuri kuin komposiitti/vastaava vastus 4 dip -kytkinvastukselle. R: n arvo1 riippuu siitä, mitkä dip -kytkimet on kytketty päälle ja siten vaikuttavat komposiittiresistanssiin. Koska dip -kytkinvastukset ovat rinnakkain, ekvivalenttiresistanssin laskentayhtälö ilmoitetaan komponenttivastusten vastavuoroisena. Meidän kokoonpanossamme ja siinä tapauksessa, että kaikki kytkimet ovat päällä, yhtälö tulee

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

antaa R.1 = 5333,33 volttia. Ottaen huomioon, että useimmissa asetuksissa vähintään yksi kytkimistä on kytketty pois päältä, kytkimen tilaa käytetään kertoimena:

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

missä tilakerroin, si, on yhtä kuin 1, jos kytkin on päällä, ja yhtä suuri kuin 0, jos kytkin on pois päältä. R1 voidaan nyt käyttää yhtälössä 1 tarvittavan vastussuhteen laskemiseen. Esimerkissä käytetään tapausta, jossa kaikki kytkimet ovat päällä

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

Viimeinen vaihe ennakoidun vertailuarvon laskemisessa on RATIO -kertolasku 1023: lla analogisen lukutoiminnon vaikutuksen jäljittelemiseksi. Sen tapauksen tunnus, jossa kaikki kytkimet ovat päällä, on tällöin

vertailija15 = 1023*.6522 = 667

Kaikki yhtälöt ovat nyt käytössä 16 mahdollisen kytkinasetuksen tunnistimien laskemiseksi. Yhteenvetona:

  1. R1 lasketaan yhtälön 2 avulla
  2. R1 ja R.2 käytetään laskemaan niihin liittyvä vastus RATIO
  3. RATIO kerrotaan 1023: lla vertailuarvon saamiseksi
  4. vaihtoehtoisesti ennustettu lähtöjännite voidaan laskea myös muodossa RATIO*Vin

Vertailijoiden sarja riippuu vain jännitteenjakajaan käytetyistä vastuksen arvoista ja on ainutlaatuinen allekirjoitus kokoonpanolle. Koska jakajan lähtöjännitteet vaihtelevat juoksevasti (ja luettavaksi), ainutlaatuinen tässä yhteydessä tarkoittaa, että vaikka kaksi tunnistejoukkoa eivät välttämättä ole täsmälleen samat, ne ovat riittävän lähellä, jotta komponenttien vertailuerot ovat pienessä määritetty aikaväli. Intervallikokoparametri on valittava riittävän suuri, jotta se voi ottaa huomioon odotetut vaihtelut, mutta tarpeeksi pieni, jotta eri kytkinasetukset eivät ole päällekkäisiä. Yleensä 7 toimii hyvin puoliväliin.

Joukko vertailuja tietylle kokoonpanolle voidaan saada useilla tavoilla - suorita esittelyohjelma ja tallenna kunkin asetuksen arvot; käytä seuraavan osan laskentataulukkoa laskemiseen; kopioi olemassa oleva sarja. Kuten edellä mainittiin, kaikki sarjat ovat todennäköisesti hieman erilaisia, mutta niiden pitäisi toimia. Suosittelen käyttämään menetelmän tekijän tunnistejoukkoa monikytkimen asennuksessa ja seuraavan osion laskentataulukkoa, jos jokin vastuksista muuttuu merkittävästi tai lisää vastuksia.

Seuraava demo -ohjelma havainnollistaa vertailijoiden käyttöä nykyisen dip -kytkimen asetuksen tunnistamiseen. Jokaisessa ohjelmasyklissä suoritetaan analogRead, jotta saadaan tunniste nykyiselle kokoonpanolle. Tätä tunnistetta verrataan sitten vertailuluettelossa, kunnes osuma löytyy tai luettelo on käytetty loppuun. Jos täsmäys löytyy, lähetetään lähtösanoma tarkistusta varten; jos ei löydy, annetaan varoitus. Silmukkaan on lisätty 3 sekunnin viive, jotta sarjalähtöikkunaa ei kuormiteta viesteillä ja jotta dip -kytkimen kokoonpano voidaan nollata jonkin aikaa.

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

// Esittelyohjelma jännitteenjakajan ulostulon lukemiseen ja sen avulla // nykyisen dip -kytkimen kokoonpanon tunnistamiseen etsimällä lähtöarvo ylös // -verkkoarviota jokaista mahdollista asetusta varten. Hakutaulukon arvot voidaan // saada joko konfiguraation aiemmasta suorituksesta tai laskemalla // perustuen alla oleviin yhtälöihin. // ------------------------------------------------ -------------------------------------- vertailussa [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Määrittele prosessimuuttujat int dipPin = A0; // analoginen nasta jännitteenjakajan tulolle int dipIn = 0; // omistaa jakajan jänniteulostulon, joka on käännetty analogReadin avulla int count = 0; // silmukkalaskuri int epsilon = 7; // vertailuväli puolileveys bool dipFound = false; // totta, jos nykyisen jännitteenjakajan lähtö löytyy taulukosta void setup () {pinMode (dipPin, INPUT); // määritä jännitteenjakajan nasta INPUT Serial.begin (9600); // salli sarjaliikenne} void loop () {delay (3000); // pidä tulostusta vierittämättä liian nopeasti // Alusta hakuparametrit count = 0; dipFound = epätosi; // Virran ulostulojännitteen lukeminen ja dokumentointi dipIn = analogRead (dipPin); Serial.print ("jakajan ulostulo"); Serial.print (dipIn); // Hae vertailuluettelosta nykyinen arvo, kun ((määrä <16) && (! DipFound)) {if (abs (dipIn - vertailija [count]) <= epsilon) {// löysi sen dipFound = true; Serial.print ("löytyi syötettäessä"); Serial.print (count); Serial.println ("arvo" + merkkijono (vertailija [määrä])); tauko; } laskea ++; } if (! dipFound) {// arvo ei ole taulukossa; ei pitäisi tapahtua Serial.println ("OOPS! Ei löydy; parempi soittaa Ghost Busters"); }}

Vaihe 3: Vertailijan laskentataulukko

Kuva
Kuva

Laskelmat 16 vertailua varten on esitetty yllä olevassa taulukossa. Oheinen Excel -tiedosto on ladattavissa tämän osion alareunasta.

Laskentataulukon sarakkeet A-D kirjaavat dip-kytkimen vastuksen arvot ja 16 mahdollista kytkimen asetusta. Huomaa, että fritsointisuunnittelukaaviossa näkyvä laitteiston DIP -kytkin on numeroitu vasemmalta oikealle laskentataulukossa esitetyn oikealta vasemmalle osoittavan numeroinnin sijaan. Pidin tätä hieman hämmentävänä, mutta vaihtoehto ei aseta "1" -konfiguraatiota (0, 0, 0, 1) luettelon ensimmäiseksi. Sarake E käyttää edellisen osan kaavaa 2 jännitteenjakajan ekvivalentin vastuksen R laskemiseen1 asetusta varten. Sarake F käyttää tätä tulosta laskemalla siihen liittyvän vastuksen RATIO, ja lopuksi sarake G kertoo kertoimen RATIO analogRead max -arvolla (1023), jotta saadaan ennustettu vertailuarvo. Kaksi viimeistä saraketta sisältävät demo -ohjelman ajon todelliset arvot sekä ennustettujen ja todellisten arvojen väliset erot.

Edellisessä osassa mainittiin kolme tapaa saada vertailuarvoja, mukaan lukien tämän laskentataulukon laajennus, jos vastuksen arvoja muutetaan merkittävästi tai lisätään lisää kytkimiä. Näyttää siltä, että pienet erot vastuksen arvoissa eivät vaikuta merkittävästi lopputuloksiin (mikä on hyvä, koska vastuksen tekniset tiedot antavat toleranssin, esimerkiksi 5%, ja vastus on harvoin yhtä suuri kuin sen todellinen arvo).

Vaihe 4: Soita kappale

Soita Tune
Soita Tune

Sen havainnollistamiseksi, kuinka monikytkintekniikkaa voidaan käyttää sovelluksessa, "Menetelmän selitys" -osion vertailuesittelyohjelmaa muutetaan musiikkikotelo-ohjelman viritysvalintaprosessin toteuttamiseksi. Päivitetyt sovellusmääritykset on esitetty yllä. Ainoa lisä laitteistoon on passiivinen pietsosummeri valitun sävelmän toistamiseen. Ohjelmiston perusmuutos on lisätä rutiini, jolla soitetaan viritys, kun se on tunnistettu käyttämällä summeria ja Arduino -äänirutiinia.

Käytettävissä olevat virityskatkelmat sisältyvät otsikkotiedostoon Tunes.h ja tarvittavien tukirakenteiden määrittelyyn. Jokainen viritys on määritelty nuotteihin liittyvien rakenteiden ryhmäksi, joka sisältää nuotin taajuuden ja keston. Huomautustaajuudet sisältyvät erilliseen otsikkotiedostoon, Pitches.h. Ohjelma ja otsikkotiedostot ovat ladattavissa tämän osion lopussa. Kaikki kolme tiedostoa tulee sijoittaa samaan hakemistoon.

Valinta ja tunnistus etenevät seuraavasti:

  1. "Käyttäjä" asettaa dip -kytkimet haluttuun viritykseen liittyvään kokoonpanoon
  2. jokaisessa ohjelmasilmukkasyklissä nykyisen dip -kytkimen asetuksen tunniste saadaan analogReadin kautta
  3. Vaiheen 2 kokoonpanotunnistetta verrataan käytettävissä olevien viritysluettelon vertailukohteisiin
  4. Jos osuma löytyy, soitetaan playTune -rutiinia, joka sisältää tiedot, joita tarvitaan viritysmuistilistan avaamiseen

    Arduino -äänitoimintoa käyttämällä jokainen nuotti toistetaan summerin kautta

  5. Jos vastaavuutta ei löydy, mitään ei tehdä
  6. toista 1-5

Käytettävissä olevien kappaleiden DIP -kytkimen asetukset on esitetty alla olevassa taulukossa, jossa 1 tarkoittaa kytkintä päällä ja 0 pois päältä. Muista, että tapa, jolla dip-kytkin on suunnattu, asettaa kytkimen 1 vasempaan (80K-vastukseen liittyvä) -asentoon.

NIMI Kytkin 1 Kytkin 2 Kytkin 3 Kytkin 4
Danny Boy 1 0 0 0
Pieni Karhu 0 1 0 0
Leijona nukkuu tänä yönä 1 1 0 0
Kukaan ei tiedä ongelmia 0 0 1 0
Hämmästyttävä armo 0 0 0 1
Tyhjä tila 1 0 0 1
MockingBird Hill 1 0 1 1

Pietsosummerin äänenlaatu ei todellakaan ole hyvä, mutta se on ainakin tunnistettavissa. Itse asiassa jos äänet mitataan, ne ovat hyvin lähellä nuotin tarkkaa taajuutta. Yksi mielenkiintoinen tekniikka, jota käytetään ohjelmassa, on tallentaa viritystiedot flash-/ohjelmamuistiosioon oletusdatamuistiosan sijasta PROGMEM -direktiivin avulla. Tieto -osio sisältää ohjelman käsittelymuuttujat ja on paljon pienempi, noin 512 tavua joillekin ATtiny -mikro -ohjaimille.

Suositeltava: