Arduino Uno segítségével próbálok számlálni egy hullámforma-generátor impulzusait. A hullámforma-generátor a következő beállításokkal van beállítva:
- Hullámforma típusa: impulzus
- Frekvencia: 20 Hz (50ms)
- Amplitúdó: 3.0 Vpp
- Eltolás: 0 V
- Szélesség = 5 ms
Eddig csak 0-kat jelenítek meg a soros monitoromon.
Itt az, amit eddig kipróbáltam:
1) A pulseIn () és a pulseInLong () használata -> sikertelenül
2) Ellenőrizze a vezetékek csatlakozását -> Használt multiméter az ellenőrzéshez megfelelően vannak csatlakoztatva.
3) Csatlakoztasson egy oszcilloszkópot, hogy lássa, generálódik-e a hullámforma -> A hullámforma az alábbi képeken látható módon jön létre.
Megjegyzés: A hullámforma generátor az oszcilloszkóp része:
A kódom az alábbiakban látható:
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); }
Megjegyzések
Válasz
- Amint Peter Bennett és mások rámutattak, kezdetben 3Vpp-t vagy egy impulzust váltott + 1,5V-ról -1,5v-ra. . Az Arduino vezérlő elektromos jellemzőinek megfelelően az 1,5 V-ot nem garantáltan “1” -nek kell olvasni. Legalább 0,6 Vcc-nek kell lennie. A
irq
tű nem ismeri fel az élátmeneteket, ehelyett “0” -ot olvas. Mindig nem szabad a feszültséget az I / O érintkezőkhöz is vezetnie a károk elkerülése érdekében !! - Az impulzus frekvenciája 20 Hz vagy 20 impulzus másodpercenként. 500 ms késleltetéssel számolja, hogy hány impulzus fordul elő fél másodperc alatt, így
result
10-es értéknek kell lennie. Ezt jelenik meg a soros monitoron.
Válasz
Feladó a “hatókörkép, a jel alacsony szintje 1,5 volt, a magas szint pedig 1,5 volt. 1,5 volt valószínűleg túl alacsony feszültség ahhoz, hogy az Arduino logikai magasnak ismerje el.
Az Arduino digitális bemeneteket károsíthatja a negatív feszültség. A legtöbb digitális IC bemenetét úgy tervezték, hogy bemenetek a föld és a pozitív tápfeszültség között.
Ha az Arduino +5 V feszültségről működik, akkor a jelgenerátort 5 Vpp értékre kell állítani, +2,5 V eltolással, hogy a jel az Arduino-n belül maradjon. ” s bemeneti feszültség határértékei.
Ahhoz, hogy logikusan magasnak lehessen felismerni, a bemeneti feszültségnek 0,7 Vcc vagy 3,5 V fölött kell lennie – az alacsonyabb feszültségeket nem lehet felismerni magasnak, ezért nem vált ki megszakítást.
megjegyzések
- 5Vpp-re állítottam, azonban a + 2,5V eltolás ingadozásokat okoz a számlálások számában, és az eltolás nélkül van egy egyenletes pulzusszám-leolvasás, ez várható? azt hinném
- Ellenőrizze az Arduino bemeneti szintjeit. Az Alacsony szintnek a talajon kell lennie (vagy ahhoz nagyon közel kell lennie), míg a Magas szintnek közel kell lennie az Arduino ' pozitív tápellátásához, amely feltételezem, hogy 5 volt.
Válasz
Az IRQcount-ot minden egyes alaphelyzetbe állítja.
Megjegyzések
- Úgy gondolom, hogy a ' rendben van. Nullázza le a számlálót, engedélyezze a megszakításokat, késleltesse, majd nyomtassa ki a megszakítások számát a késleltetés végén.
- Ez ' nem jelent problémát.
- Melyek a késés () egységei? Nem ' nem programozom az Audrino-t, de ez kullancs vagy ns?
- @ mjh2007 ezredmásodperc, tehát ' s határozottan elég hosszú.
- Az Arduino
delay()
ms-ban van megadva.
pinMode(pin, mode)
alkalmazást?