Kazalo:

Izbirnik nastavitev DIP z uporabo 1 zatiča: 4 koraki
Izbirnik nastavitev DIP z uporabo 1 zatiča: 4 koraki

Video: Izbirnik nastavitev DIP z uporabo 1 zatiča: 4 koraki

Video: Izbirnik nastavitev DIP z uporabo 1 zatiča: 4 koraki
Video: Полный курс Redux Toolkit + RTK Query для начинающих | Редакс за 2 часа! 2024, November
Anonim
Izbirnik nastavitev DIP z uporabo 1 pina
Izbirnik nastavitev DIP z uporabo 1 pina

Nekaj časa nazaj sem delal na projektu "music box", ki je moral izbirati med kar 10 različnimi odrezki melodije. Naravna izbira za izbiro določene melodije je bilo 4 -polno dip stikalo, saj 4 stikala zagotavljajo 24= 16 različnih nastavitev. Vendar pa izvedba surove sile za ta pristop zahteva 4 zatiče naprave, po enega za vsako stikalo. Ker sem nameraval ATtiny85 uporabiti za razvoj, je bila izguba 4 zatičev preveč. Na srečo sem naletel na članek, ki opisuje iznajdljivo metodo uporabe 1 analognega zatiča za obdelavo več stikalnih vhodov.

Tehnika z več stikali; tehnika z enim vhodom uporablja vezje razdelilnika napetosti, da zagotovi edinstveno celoštevilsko vrednost za vsako od 16 možnih kombinacij nastavitev stikala. Ta niz 16 celoštevilčnih identifikatorjev se nato uporabi v aplikacijskem programu za povezovanje dejanja z nastavitvijo.

Ta pouk uporablja metodo več stikal za izvajanje melodije za aplikacijo glasbena skrinja. Izbrana melodija se nato predvaja s piezo zvočnikom s funkcijo Arduino tone.

1. korak: Potrebna strojna oprema

Potrebna strojna oprema
Potrebna strojna oprema

Uporaba UNO kot implementacijske platforme zmanjšuje število potrebnih komponent strojne opreme. Izvajanje vhodne metode z več stikali zahteva le 4-polno dip stikalo, 5 uporov, ki se uporabljajo za delilnik napetosti, in priključno žico za povezave. Konfiguraciji je dodan piezo zvočni signal za izvajanje izbirnika melodij glasbene škatle. Po izbiri je odvisno od vrste uporabljenega potopnega stikala koristno uporabiti 2x4 8 -polno vtičnico za priključitev potopnega stikala na ploščo, saj se zdi, da so standardni zatiči stikala za spajkanje na ploščo, ki ni priključena neposredno na ploščo. Vtičnica stabilizira povezave potopnega stikala in preprečuje enostavno dvigovanje stikala pri nastavitvi preklopnih stikal.

Ime Možen vir Kako uporabljeno
4-polno dip stikalo Izbira melodije
2x4 -polna vtičnica (neobvezno) Amazon Stebri na večini dip stikal ne držijo stikala zelo dobro na plošči. Vtičnica pomaga, da je povezava bolj trdna. Druga možnost je najti dip stikalo, ki je resnično narejeno za uporabo na plošči z običajnimi zatiči IC.

upori:

  • 10K x2
  • 20 tisoč
  • 40 tisoč
  • 80 tisoč
Namestite delilnik napetosti
pasivni piezo zvočni signal Amazon Predvajajte melodijo, kot jo poganja aplikacija, prek tonske funkcije Arduino

2. korak: Razlaga metode z več stikali

Metoda z več stikali Pojasnilo
Metoda z več stikali Pojasnilo

To poglavje obravnava osnovne koncepte za metodo več stikal in razvija enačbe, potrebne za samostojen izračun edinstvenih identifikatorjev za vsako od 16 možnih konfiguracij nastavitev dip stikala. Te identifikatorje lahko nato uporabite v aplikacijskem programu za povezavo konfiguracije stikala z dejanjem. Na primer, morda želite, da nastavitev - vklopite 1, izklopite 2, izklopite 3, izklopite 4 (1, 0, 0, 0) - za predvajanje Amazing Grace in (0, 1, 0, 0) za predvajanje Lev nocoj spi. Zaradi kratkosti in jedrnatosti so konfiguracijski identifikatorji v preostalem delu dokumenta imenovani primerjalniki.

Slika
Slika

Temeljni koncept metode z več stikali je vezje razdelilnika napetosti, ki je sestavljeno iz 2 zaporednih uporov, priključenih na vhodno napetost. Kabel izhodne napetosti je povezan med upori, R1 in R.2, kot je prikazano zgoraj. Izhodna napetost delilnika se izračuna kot vhodna napetost, pomnožena z razmerjem upora R2 na vsoto R1 in R.2 (enačba 1). To razmerje je vedno manjše od 1, zato je izhodna napetost vedno manjša od vhodne napetosti.

Kot je prikazano na načrtovalnem diagramu zgoraj, je več stikalo konfigurirano kot delilnik napetosti z R2 fiksno in R1 enaka sestavljenemu/enakovrednemu uporu za 4 upornike stikala. Vrednost R1 odvisno od tega, katera dip stikala so vklopljena in zato prispevajo k sestavljenemu uporu. Ker so upori dip stikala vzporedni, je enačba izračuna enakovrednega upora prikazana v smislu vzajemnosti komponentnih uporov. Za našo konfiguracijo in v primeru, da so vsa stikala vklopljena, enačba postane

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

dajanje R.1 = 5333,33 voltov. Zaradi dejstva, da ima večina nastavitev vsaj eno stikalo izklopljeno, se stanje stikala uporablja kot množitelj:

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

kjer je multiplikator stanja, sjaz, je enako 1, če je stikalo vklopljeno in enako 0, če je stikalo izklopljeno. R1 lahko zdaj uporabite za izračun razmerja upora, ki je potrebno v enačbi 1. Kot primer ponovno uporabite primer, ko so vsa stikala vklopljena

RAZMERJENJE = R2/(R1+R2) = 10000/(5333.33+10000) =.6522

Zadnji korak pri izračunu predvidene vrednosti primerjalnika je pomnoževanje RATIO z 1023, da bi posnemali učinek funkcije analogRead. Nato je identifikator za primer, ko so vsa stikala vklopljena

primerjalnik15 = 1023*.6522 = 667

Vse enačbe so zdaj na voljo za izračun identifikatorjev za 16 možnih nastavitev stikala. Povzeti:

  1. R1 se izračuna z enačbo 2
  2. R1 in R.2 se uporabljajo za izračun povezanega upora RATIO
  3. RATIO pomnožimo z 1023, da dobimo primerjalno vrednost
  4. po izbiri je mogoče napovedano izhodno napetost izračunati tudi kot RATIO*Vin

Niz primerjalnikov je odvisen le od vrednosti upora, uporabljenih za delilnik napetosti, in so edinstven podpis za konfiguracijo. Ker bodo izhodne napetosti delilnika med delovanjem (in branjem za branje) nihale, edinstveno v tem kontekstu pomeni, da čeprav dva niza identifikatorjev morda nista popolnoma enaka, sta dovolj blizu, da razlike v primerjalniku komponent padejo v majhne določen interval. Parameter velikosti intervala je treba izbrati dovolj velik, da upošteva pričakovana nihanja, vendar dovolj majhen, da se različne nastavitve stikal ne prekrivajo. Običajno 7 deluje dobro za interval pol širine.

Niz primerjalnikov za določeno konfiguracijo je mogoče dobiti na več načinov - zaženite predstavitveni program in zabeležite vrednosti za vsako nastavitev; za preglednico uporabite preglednico v naslednjem razdelku; kopirajte obstoječi niz. Kot je navedeno zgoraj, bodo vsi sklopi najverjetneje nekoliko drugačni, vendar bi morali delovati. Predlagam, da uporabite avtorjev nabor identifikatorjev za nastavitev z več stikali in preglednico iz naslednjega razdelka, če se kateri od uporov bistveno spremeni ali doda več uporov.

Naslednji demo program prikazuje uporabo primerjalnikov za identifikacijo trenutne nastavitve dip stikala. V vsakem programskem ciklu se izvede analogno branje za pridobitev identifikatorja za trenutno konfiguracijo. Ta identifikator se nato primerja na seznamu primerjalnika, dokler se ne najde ujemanje ali seznam izčrpa. Če se ujema, se izda izhodno sporočilo za preverjanje; če ni ugotovljeno, se izda opozorilo. V zanko je vstavljena 3 -sekundna zamuda, tako da okno serijskega izhoda ne bo preobremenjeno s sporočili in da je nekaj časa za ponastavitev konfiguracije dip stikala.

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

// Predstavitveni program za branje izhoda delilnika napetosti in ga uporabi za identifikacijo // trenutne konfiguracije dip stikala tako, da poišče izhodno vrednost v nizu // primerjalnih vrednosti za vsako možno nastavitev. Vrednosti v iskalnem nizu lahko // pridobimo iz prejšnjega zagona za konfiguracijo ali z izračunom // na podlagi osnovnih enačb. // ------------------------------------------------ -------------------------------------- primerjalnik int [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Določimo procesne spremenljivke int dipPin = A0; // analogni pin za vhod delilnika napetosti int dipIn = 0; // hrani izhodno napetost delilnika, prevedeno z analogRead int count = 0; // števec zanke int epsilon = 7; // primerjalni interval pol širine bool dipFound = false; // res, če je v iskalni tabeli poizvedba void setup () {pinMode (dipPin, INPUT) ugotovljen izhod delilnika trenutne napetosti; // konfiguriramo zatič delilnika napetosti kot vhodni serijski.begin (9600); // omogoči serijsko komunikacijo} void loop () {delay (3000); // preprečite, da bi se izhod prehitro premikal // Inicializirajte iskalne parametre count = 0; dipFound = false; // branje in dokumentiranje izhodne napetosti toka dipIn = analogRead (dipPin); Serial.print ("izhod delilnika"); Serial.print (dipIn); // Poišči trenutno vrednost na primerjalnem seznamu while ((count <16) && (! DipFound)) {if (abs (dipIn - primerjalnik [count]) <= epsilon) {// ugotovil, da je dipFound = true; Serial.print ("najdeno ob vstopu"); Serial.print (štetje); Serial.println ("vrednost" + niz (primerjalnik [število])); prekiniti; } count ++; } if (! dipFound) {// vrednost ni v tabeli; se ne bi smelo zgoditi Serial.println ("OOPS! Not found; bolje pokličite Ghost Busters"); }}

3. korak: Primerjalna preglednica

Slika
Slika

Izračuni za 16 primerjalnih vrednosti so podani v zgornji preglednici. Priložena datoteka Excel je na voljo za prenos na dnu tega razdelka.

Stolpci preglednic A-D beležijo vrednosti uporovnega stikala in 16 možnih nastavitev stikala. Upoštevajte, da je strojno DIP stikalo, prikazano na diagramu zasnove fritzinga, oštevilčeno od leve proti desni namesto oštevilčevanja od desne proti levi, prikazanega v preglednici. Zdelo se mi je nekoliko zmedeno, vendar alternativa ne postavlja konfiguracije "1" (0, 0, 0, 1) na prvo mesto na seznamu. Stolpec E uporablja formulo 2 prejšnjega razdelka za izračun ekvivalentne upornosti razdelilnika napetosti R1 za nastavitev. Stolpec F uporabi ta rezultat za izračun povezanega upora RATIO in na koncu stolpec G pomnoži RATIO z največjo vrednostjo analogRead (1023), da dobi predvideno vrednost primerjalnika. Zadnja 2 stolpca vsebujeta dejanske vrednosti iz izvajanja demo programa skupaj z razlikami med napovedanimi in dejanskimi vrednostmi.

V prejšnjem razdelku so bile omenjene tri metode za pridobitev nabora vrednosti primerjalnika, vključno s podaljšanjem te preglednice, če se vrednosti upora močno spremenijo ali se doda več stikal. Zdi se, da majhne razlike v vrednostih upora ne vplivajo bistveno na končne rezultate (kar je dobro, saj specifikacije uporov dajejo toleranco, recimo 5%, upor pa je le redko enak dejanski navedeni vrednosti).

4. korak: Predvajajte melodijo

Predvajaj melodijo
Predvajaj melodijo

Za ponazoritev, kako bi lahko tehniko z več stikali uporabili v aplikaciji, je predstavitveni program za primerjavo iz razdelka "Razlaga metode" spremenjen za izvedbo obdelave izbire melodije za program glasbene škatle. Posodobljena konfiguracija aplikacije je prikazana zgoraj. Edini dodatek k strojni opremi je pasivni piezo brenčalec za predvajanje izbrane melodije. Osnovna sprememba programske opreme je dodajanje rutine za predvajanje melodije, ki je enkrat identificirana, z uporabo brenčalca in rutine tonov Arduino.

Razpoložljivi delčki melodije so v datoteki z glavo Tunes.h skupaj z opredelitvijo potrebnih podpornih struktur. Vsaka melodija je opredeljena kot niz struktur, povezanih z notami, ki vsebujejo frekvenco in trajanje note. Opombe pogostosti so v ločeni datoteki glave, Pitches.h. Datoteke programa in glave so na voljo za prenos na koncu tega razdelka. Vse tri datoteke naj bodo v istem imeniku.

Izbira in identifikacija potekata na naslednji način:

  1. "Uporabnik" nastavi dip stikala v konfiguracijo, povezano z želeno melodijo
  2. vsak cikel programske zanke identifikator trenutne nastavitve preklopnega stikala pridobi preko analogRead
  3. Identifikator konfiguracije 2. koraka se primerja z vsakim primerjalnikom na seznamu razpoložljivih melodij
  4. Če se ujema, se pokliče rutina playTune z informacijami, ki so potrebne za dostop do seznama opomb

    S tonsko funkcijo Arduino se vsaka nota predvaja skozi zvočni signal

  5. Če ni ujemanja, se ne ukrepa
  6. ponovite 1-5

Nastavitve stikala DIP za razpoložljive melodije so prikazane v spodnji tabeli, kjer 1 pomeni, da je stikalo vklopljeno, 0 izklopljeno. Spomnite se, da je način, kako je dip stikalo usmerjeno, stikalo 1 v skrajnem levem položaju (tistem, ki je povezan z uporom 80K).

NAME Stikalo 1 Stikalo 2 Stikalo 3 Stikalo 4
Danny Boy 1 0 0 0
Majhen medved 0 1 0 0
Lev nocoj spi 1 1 0 0
Težave ne pozna nihče 0 0 1 0
Neverjetna milina 0 0 0 1
Prazen prostor 1 0 0 1
MockingBird Hill 1 0 1 1

Kakovost zvoka iz piezo zvonilnika zagotovo ni dobra, vendar je vsaj prepoznavna. Če merimo tone, so zelo blizu točni frekvenci not. Ena zanimiva tehnika, uporabljena v programu, je shranjevanje podatkov o nastavitvah v odsek pomnilnika flash/programa namesto v privzeti razdelek pomnilnika podatkov z uporabo direktive PROGMEM. V razdelku s podatki so spremenljivke za obdelavo programa in so za nekatere mikrokrmilnike ATtiny veliko manjše, okoli 512 bajtov.

Priporočena: