Pokouším se počítat pulsy z generátoru vln pomocí Arduino Uno. Generátor průběhu je nastaven na následující nastavení:
- Typ průběhu: pulzní
- frekvence: 20 Hz (50ms)
- amplituda: 3,0 Vpp
- Offset: 0V
- Width = 5ms
Zatím se na mém sériovém monitoru zobrazuje pouze 0 s.
Zde je to, co jsem zatím vyzkoušel:
1) Používání pulseIn () a pulseInLong () -> žádný úspěch
2) Zkontrolujte zapojení -> Použitý multimetr ke kontrole a jsou správně připojeny.
3) Připojte osciloskop a zkontrolujte, zda se generuje průběh -> Průběh se generuje, jak je znázorněno na obrázcích níže.
Poznámka: Průběh generátor je součástí osciloskopu:
Můj kód je uveden níže:
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); }
Komentáře
Odpověď
- Jak uvedl Peter Bennett a další, zpočátku jste nastavili 3Vpp nebo pulz střídavý + 1,5V až -1,5v . Podle elektrických charakteristik řadiče Arduino není zaručeno, že se 1,5 V bude číst jako „1“. Mělo by být alespoň 0,6 Vcc. Pin
irq
nedokáže rozpoznat přechody okrajů, místo toho bude stále číst „0“. A neměli byste také napájet -ve napětí na I / O piny, aby nedošlo k poškození !! - Frekvence pulsů je 20 Hz nebo 20 pulsů za sekundu. Se zpožděním 500 ms počítáte, kolik pulzů se vyskytne za půl sekundy, takže
result
by měla mít hodnotu 10. To je to, co se zobrazuje na sériovém monitoru.
Odpověď
Od „fotka rozsahu, nízká úroveň signálu je 1,5 voltu a vysoká úroveň 1,5 voltu. 1,5 voltu je pravděpodobně příliš nízké napětí, aby jej Arduino rozpoznalo jako logické vysoké.
Také záporné napětí může poškodit digitální vstupy Arduino. Vstupy na většině digitálních integrovaných obvodů jsou navrženy tak, aby přijímaly vstupy mezi zemí a kladným napájecím napětím.
Pokud je Arduino provozováno z +5 Voltů, měli byste nastavit generátor signálu na 5 Vpp s offsetem +2,5 V, aby byl signál udržován v Arduinu. “ Limity vstupního napětí.
Aby bylo možné jej rozpoznat jako logické vysoké, vstupní napětí musí být nad 0,7 Vcc nebo 3,5 voltu – nižší napětí nemusí být rozpoznáno jako vysoké, takže nespustí přerušení.
Komentáře
- Nastavil jsem to na 5Vpp, ale posun + 2,5V způsobí kolísání počtu počtů a bez posunu mám konzistentní čtení počtu pulzů, to se očekává? Myslím, že ano
- Zkontrolujte vstupní úrovně v Arduinu. Nízká úroveň by měla být na (nebo velmi blízko) zemi, zatímco vysoká úroveň by měla být blízko kladného napájení Arduino ', které předpokládám je 5 voltů.
Odpověď
IRQcount resetujete pokaždé přes smyčku.
Komentáře
- Myslím, že ' je v pořádku. Vynulujte počítadlo, povolte přerušení, odložte a poté vytiskněte počet přerušení na konci zpoždění.
- To ' to není problém.
- Co jsou jednotky na delay ()? ' t programuji Audrino, ale je to klíště nebo ns?
- @ mjh2007 milisekund, takže ' rozhodně dost dlouhý.
- Arduino
delay()
je v ms.
pinMode(pin, mode)
?