Yritän laskea pulsseja aaltomuotogeneraattorista Arduino Unoa käyttämällä. Aaltomuodon generaattori asetetaan seuraaviin asetuksiin:
- Aaltomuodon tyyppi: Pulssi
- Taajuus: 20 Hz (50 ms)
- Amplitudi: 3,0 Vpp
- Siirtymä: 0 V
- Leveys = 5 ms
Toistaiseksi sarjamittarissani näkyy vain 0 sekuntia.
Täällä on mitä olen kokeillut tähän mennessä:
1) pulseIn (): n ja pulseInLong (): n käyttö -> ei onnistu
2) Tarkista johdotus -> Käytetty yleismittari tarkistaaksesi ja ne on kytketty oikein.
3) Kytke oskilloskooppi nähdäksesi, muodostuuko aaltomuoto -> Aaltomuotoa kehitetään alla olevien kuvien mukaisesti.
Huomaa: Aaltomuoto generaattori on osa oskilloskooppia:
Koodini näkyy alla:
volatile int IRQcount; int pin = 2; int pin_irq = 0; //IRQ that matches to pin 2 int result = 0; void setup() { // put your setup code here, to run once: Serial.begin (115200); pinMode(2, INPUT); attachInterrupt(pin_irq, IRQcounter, FALLING); } void IRQcounter() { IRQcount++; } void loop() { // put your main code here, to run repeatedly: cli();//disable interrupts IRQcount = 0; sei();//enable interrupts delay(500); cli();//disable interrupts result = IRQcount; sei();//enable interrupts Serial.print(F("Counted = ")); Serial.println(result); }
Kommentit
vastaus
- Kuten Peter Bennett ja muut huomauttivat, alun perin olit asettanut 3Vpp tai pulssin, joka vaihteli + 1,5 V -1,5 v . Arduinon ohjaimen sähköisten ominaisuuksien mukaan 1,5 V: n ei voida taata olevan ”1”. Sen tulisi olla vähintään 0,6 Vcc. Siksi
irq
nasta ei tunnista reunasiirtymiä, vaan lukee koko ajan ”0”. Eikä sinun tarvitse ajaa -ve -jännitettä myös I / O-nastoihin vahingoittumisen välttämiseksi !! - Pulssitaajuus on 20 Hz tai 20 pulssia sekunnissa. 500 ms viiveellä lasket kuinka monta pulssia esiintyy puoli sekuntia, joten
result
pitäisi olla arvoa 10. Sitä näytetään sarjavalvonnassa.
Vastaa
Lähettäjä ”laajuusvalokuva, signaalin matala taso on -1,5 volttia ja korkea taso 1,5 volttia. 1,5 volttia on luultavasti liian matala jännite, jotta Arduino ei tunnista sitä logiikan korkeaksi.
Myös negatiivinen jännite voi vahingoittaa Arduino-digitaalituloja.Useimpien digitaalisten piirien tulot on suunniteltu hyväksymään tulot maadoituksen ja positiivisen syöttöjännitteen välillä.
Jos Arduinoa käytetään +5 voltin jännitteellä, sinun tulisi asettaa signaaligeneraattori arvoon 5 Vpp +2,5 voltin siirtymällä, jotta signaali pysyy Arduinossa ” s tulojännitteen raja-arvot.
Jotta logiikka olisi korkea, tulojännitteen on oltava yli 0,7 Vcc tai 3,5 volttia – matalampia jännitteitä ei ehkä tunnisteta suuriksi, joten ne eivät aiheuta keskeytystä.
kommentit
- Olen asettanut sen arvoksi 5 Vpp, mutta + 2,5 V: n siirtymä aiheuttaa vaihteluita lukumäärässä ja ilman siirtymää minulla on johdonmukainen pulssimäärä, onko sitä odotettavissa luulisin niin
- Tarkista Arduinon tulotasot. Matalan tason tulisi olla (tai hyvin lähellä) maata, kun taas korkean tason tulisi olla lähellä Arduinon positiivista syöttöä ', jonka oletan olevan 5 volttia.
Vastaa
Nollaat IRQ-määrän joka kerta silmukan läpi.
Kommentit
- Luulen, että ' on OK. Nollaa laskuri, ota keskeytykset käyttöön, viivästytä ja tulosta sitten keskeytysten määrä viiveen lopussa.
- Että ' ei ole ongelma.
- Mitkä ovat viiveen () yksiköt? En ohjelmoi Audrinoa ', mutta onko punkkeja vai ns?
- @ mjh2007 millisekuntia, joten se ' on ehdottomasti riittävän pitkä.
- Arduino
delay()
on ms.
pinMode(pin, mode)
?