Bejövő impulzusok megszámlálása megszakítással.
Szeretnék segítséget kérni, eredetileg egy fordulatszám mérőt szerettem volna készíteni, de a tesztek során kiderült, hogy az impulzusok megszámlálása sem pontos. Ezért csináltam egy tesztet egyik arduino mint impulzusszámláló a másik impulzusadó. A rendszer így is pontatlan volt 1000 impulzust adtam le egy for ciklus segítségével és csak 907 érkezett meg. Más beállításoknál mint felfutó, lefutó él magas szint ,stb más értékeket kaptam néha többet néha kevesebbet. Tud valaki segíteni, hogy mi okozhatja a problémát?
Impulzusszámlálás
Re: Impulzusszámlálás
Megoldódott a probléma: Nem tettem lehúzó ellenállást .Ezután teljesen jól működik.
Re: Impulzusszámlálás
Sajnos még mindig nem jó, az előbbi probléma még mindig meg van a soros monitorral jó, viszont TM1637 7-segmenses kijelzővel nem. 2-es pin van használatban megszakításra és RISING beállítással ,a HIGH beállítás duplán számolt a soros monitornál is.
Re: Impulzusszámlálás
Azért egy programkód sokat segítene
- INT rutinban mi történik?
- kijelzőt hogy kezeled?
- mi van még a programban?
- INT rutinban mi történik?
- kijelzőt hogy kezeled?
- mi van még a programban?
http://www.tavir.hu - a gazda
Re: Impulzusszámlálás
Úgy néz ki megoldódott a probléma. Valószínű a sok próbálkozás miatt túlbonyolítottam a programot és ez volt a hiba. Már sok mindennel próbálkoztam , de az egyszerűbb ugynézki jobb. Megmutatom a programot a rossz változat ki van kommentezve,a jó működőképes pedig ami meg van hagyva.
Adó oldalon:
void setup() {
pinMode(5,OUTPUT);
delay(5000);
for (int t=0;t<1000;t++) {
digitalWrite(5,HIGH);
delay(10);
digitalWrite(5,LOW);
delay(10);
}
}
void loop() {
}
Vevő oldalon:
#include <Arduino.h>
#include <TM1637Display.h>
#define CLK 4
#define DIO 5
TM1637Display display(CLK, DIO);
volatile int szamol=0;
//volatile boolean imp=false;
void setup() {
//Serial.begin(115200);
pinMode(2, INPUT);
attachInterrupt(digitalPinToInterrupt(2), plussz,RISING);
display.setBrightness(7, true);
}
void loop() {
/*if (imp==true)
{
szamol++;
imp=false;
}
*/
display.showNumberDec(szamol,false);
//Serial.println(szamol);
}
void plussz() {
szamol++;
//imp=true;
}
Adó oldalon:
void setup() {
pinMode(5,OUTPUT);
delay(5000);
for (int t=0;t<1000;t++) {
digitalWrite(5,HIGH);
delay(10);
digitalWrite(5,LOW);
delay(10);
}
}
void loop() {
}
Vevő oldalon:
#include <Arduino.h>
#include <TM1637Display.h>
#define CLK 4
#define DIO 5
TM1637Display display(CLK, DIO);
volatile int szamol=0;
//volatile boolean imp=false;
void setup() {
//Serial.begin(115200);
pinMode(2, INPUT);
attachInterrupt(digitalPinToInterrupt(2), plussz,RISING);
display.setBrightness(7, true);
}
void loop() {
/*if (imp==true)
{
szamol++;
imp=false;
}
*/
display.showNumberDec(szamol,false);
//Serial.println(szamol);
}
void plussz() {
szamol++;
//imp=true;
}