Jag försöker räkna pulser från en vågformsgenerator med en Arduino Uno. Vågformsgeneratorn är inställd på följande inställningar:
- Vågformstyp: Puls
- Freq: 20 Hz (50ms)
- Amplitud: 3,0 Vpp
- Offset: 0V
- Bredd = 5ms
Hittills får jag bara 0s på min seriella bildskärm.
Här är vad jag har försökt hittills:
1) Använda pulseIn () och pulseInLong () -> ingen framgång
2) Kontrollera ledningsanslutningar -> Använd multimeter för att kontrollera och de är ordentligt anslutna.
3) Anslut ett oscilloskop för att se om vågformen genereras -> Vågformen genereras som visas i bilderna nedan.
Obs: Vågformen generator är en del av oscilloskopet:
Min kod visas nedan:
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); }
Kommentarer
Svar
- Som Peter Bennett och andra påpekade, ursprungligen hade du ställt in 3Vpp, eller en puls alternerande + 1,5V till -1,5v . Enligt Elektriska egenskaper hos Arduinos styrenhet är 1,5 V inte garanterad att läsas som ”1”. Det borde vara minst 0,6 av Vcc.
irq
stift kan inte känna igen kantövergångar, istället läses det ”0” hela tiden. Och du ska inte köra -ve spänning till I / O-stiften också för att undvika skador !! - Pulsfrekvensen är 20 Hz eller 20 pulser per sekund. Med 500ms fördröjning räknar du med hur många pulser som inträffar per en halv sekund, så
result
bör ha värde 10. Det är vad du får visas på seriell bildskärm.
Svar
Från ”scope-bilden, signalens låga nivå är -1,5 volt och den höga nivån är 1,5 volt. 1,5 volt är förmodligen för låg spänning för att erkännas som en logik Hög av Arduino.
Arduino digitala ingångar kan också skadas av den negativa spänningen. Ingångarna på de flesta digitala kretsar är utformade för att acceptera ingångar mellan jord och den positiva matningsspänningen.
Om Arduino manövreras från +5 volt, bör du ställa in signalgeneratorn på 5 Vpp, med en +2,5 volt förskjutning för att hålla signalen inom Arduino ” s ingångsspänningsgränser.
För att kännas igen som en logik Hög måste ingångsspänningen vara över 0,7 Vcc eller 3,5 volt – lägre spänningar kanske inte känns igen som en hög, så det kommer inte att utlösa ett avbrott.
Kommentarer
- Jag har ställt in den på 5Vpp, men + 2.5V offset orsakar fluktuationer i antalet räkningar och utan offset har jag en konsekvent pulsläsning, förväntas det? jag skulle tro det
- Kontrollera ingångsnivåerna på Arduino. Den låga nivån ska vara på (eller mycket nära) marken, medan den höga nivån ska vara nära Arduino ' s positiva utbud, vilket jag antar är 5 volt.
Svar
Du återställer IRQcount varje gång genom slingan.
Kommentarer
- Jag tror att ' är OK. Nollställ räknaren, aktivera avbrotten, fördröja och skriv sedan ut antalet avbrott i slutet av förseningen.
- Det är ' inte ett problem.
- Vilka enheter är fördröjda ()? Jag programmerar inte ' Audrino, men är det fästingar eller ns?
- @ mjh2007 millisekunder, så det ' s definitivt tillräckligt lång.
- Arduino
delay()
finns i ms.
pinMode(pin, mode)
?