Mam takie urządzenie ktore mierzy szczyty sinusoid przesuniętych w fazie z trzech przekładników prądowych. Jako, że jest to też Modbus Slave z baudrate 250kbps to nie chciałem robić ADC na przerwaniu bo te już mają co robić z obsługą komunikacji.
Tak więc ADC jest obsługiwane przez pooling flagi ADC. Zamieszczam tylko kawałek kodu. W tym urządzeniu wykorzystuję pięć kanałów ADC i muszę je MUX`ować oraz pominąć jeden odczyt po zmianie kanału więc jest to bardziej rozbudowane.
Niemniej wykrycie szczytu jest rozwiazane następująco. Mam tablicę trzech Wordów i wartości w nich kolejno przesuwam po czym najnowszy odczyt zapisuję do ostatniego z nich. Potem sprawdzam czy trend jest opadający. Czyli jeśli po kolei trzy odczyty, jeden po drugim, są coraz niższe to.... najwyższy jest ten
najstarszy. Dalsze badanie opadającego zbocza jest zablokowane aż do momentu kiedy odczyty zaczną znów rosnąć.
Zaloguj się, aby zobaczyć kod