>Jei oscilografu žiūrint gražu - reiškia kažkas priburta su kodu.
Kad kolkas nelabai yra ka priburt su tuo kodu.
Ir dar klausimas, kodel poll'inant gaunu 100 pulsu???
Dargi - skirtingi interrupt mode - skirtingi rezultatai. Kazkuris mode pareiske, kad gauna virs 400000!!!!! pulsu per sekunde :D
Supaprastintas kodas:
static volatile uint32_t zcCounter;
static void IRAM_ATTR ZeroCrossISR(void)
{
zcCounter++;
}
void setup()
{
// Is Arduino.h
//Interrupt Modes
//#define RISING 0x01
//#define FALLING 0x02
//#define CHANGE 0x03
//#define ONLOW 0x04
//#define ONHIGH 0x05
int isrMode = FALLING;
log_d("Attaching interrupt. Mode: %s", getIsrModeString(isrMode));
attachInterrupt(digitalPinToInterrupt(zcPin), ZeroCrossISR, isrMode);
}
bool lastState = 0;
unsigned long nextMillis = 0;
void loop()
{
unsigned long mls = millis();
log_d("ZeroCross count: %d, Timer count: %d", core.getAcController().getZeroCrossCounter(), core.getAcController().getTimerCounter());
#ifdef USE_POLLING
if (digitalRead(Pins::ZeroCross) != lastState)
{
lastState = !lastState;
if (lastState == false)
{
count++;
}
}
if (mls < nextMillis) return;
nextMillis += 1000;
log_d("ZeroCross poll count: %d", count);
count = 0;
return;
#endif // USE_POLLING
if (mls < nextMillis) return;
nextMillis += 1000;
log_d("ZeroCross count: %d", zcCounter);
}
>Galima profilaktiškai pastatyti kondensatorių ~10nF tarp GND ir ZCDPulse >arčiau MCU - jei yra abejonių dėl triukšmų.
Pabandysiu ryt, bet abejoju...