Sto cercando di contare gli impulsi da un generatore di forme donda utilizzando un Arduino Uno. Il generatore di forme donda è impostato sulle seguenti impostazioni:
- Tipo di forma donda: Impulso
- Freq: 20 Hz (50 ms)
- Ampiezza: 3.0 Vpp
- Offset: 0V
- Larghezza = 5 ms
Finora ottengo solo 0 visualizzati sul mio monitor seriale.
Qui è quello che ho provato finora:
1) Uso di pulseIn () e pulseInLong () -> nessun successo
2) Controlla i collegamenti del cablaggio -> Multimetro usato per controllare e siano collegati correttamente.
3) Collega un oscilloscopio per vedere se la forma donda viene generata -> La forma donda viene generata come mostrato nelle immagini seguenti.
Nota: la forma donda generatore fa parte delloscilloscopio:
Il mio codice è mostrato di seguito:
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); }
Commenti
Risposta
- Come hanno sottolineato Peter Bennett e altri, inizialmente avevi impostato 3 Vpp, o un impulso che alternava + 1,5 V a -1,5 V . Secondo le caratteristiche elettriche del controller di Arduino , non è garantito che 1,5 V sia letto come “1”. Dovrebbe essere almeno 0,6 di Vcc.
irq
il pin non è in grado di riconoscere le transizioni dei bordi, invece legge sempre uno “0”. Inoltre, non è previsto che tu installi la tensione -ve anche ai pin I / O per evitare danni !! - La frequenza degli impulsi è di 20 Hz o 20 impulsi al secondo. Con un ritardo di 500 ms, stai contando quanti impulsi si verificano ogni mezzo secondo, quindi
result
dovrebbe avere un valore 10. Questo è ciò che viene visualizzato sul monitor seriale.
Risposta
Da la “foto delloscilloscopio, il livello basso del segnale è -1,5 volt e il livello alto è 1,5 volt. 1,5 volt è probabilmente una tensione troppo bassa per essere riconosciuta come alta logica da Arduino.
Inoltre, gli ingressi digitali di Arduino possono essere danneggiati dalla tensione negativa Gli ingressi sulla maggior parte dei circuiti integrati digitali sono progettati per accettare ingressi tra Ground e la tensione di alimentazione positiva.
Se Arduino viene azionato da +5 Volt, è necessario impostare il generatore di segnale a 5 Vpp, con un offset di +2,5 volt per mantenere il segnale allinterno di Arduino ” s limiti di tensione di ingresso.
Per essere riconosciuta come alta logica, la tensione di ingresso deve essere superiore a 0,7 Vcc, o 3,5 volt – le tensioni inferiori potrebbero non essere riconosciute come alte, quindi non attiveranno un interrupt.
Commenti
- Lho impostato su 5Vpp, tuttavia loffset di + 2.5V causa fluttuazioni nel numero di conteggi e senza loffset ho un lettura costante del conteggio degli impulsi, è previsto? Penso di sì
- Controlla i livelli di input su Arduino. Il livello basso dovrebbe essere a (o molto vicino a) massa, mentre il livello alto dovrebbe essere vicino allalimentazione positiva di Arduino ', che presumo sia di 5 volt.
Risposta
Stai reimpostando il conteggio IRQ ogni volta attraverso il ciclo.
Commenti
- Penso che ' sia OK. Azzera il contatore, abilita le interruzioni, ritarda e quindi stampa il numero di interruzioni alla fine del ritardo.
- Questo ' non è un problema.
- Quali sono le unità di ritardo ()? Non ' programma Audrino, ma è tic o ns?
- @ mjh2007 millisecondi, quindi ' è decisamente abbastanza lungo.
- Arduino
delay()
è in ms.
pinMode(pin, mode)
?