Opiszę dokładniej:
Atmega 328 kwarc 16Mhz.
Próbuję złożyć sterownik do pieca na ekogroszek z regulacją fazową dmuchawy. Nigdy wcześniej nie korzystałem z przerwań i nagle mnie to przerosło, brak dostatecznej wiedzy. Przykładem takiego sterowania może być np. Sterownik Tech ST-37 na Atmega16. Obroty dmuchawy działają płynnie, czas podawania węgla itp. jest odliczany prawidłowo a wszelkie operacje na przyciskach nie zakłócają pracy dmuchawy co właśnie mi sprawia problem.
Czy Atmega16 ma więcej możliwości od Atmega 328 że przerwania nie wpływają na prawidłowłe działanie w pętli loop();? Dodam tylko że próbowałem sterowania grupowego dmuchawą ale płynność miała wiele do życzenia.
Dodano po 7 [minuty]:
Nie zrobiłem na delaymicrosecond aby nie opóźniać programu. Oto kawałek kodu:
attachInterrupt(digitalPinToInterrupt(3), fan, CHANGE);
void loop() {
currentTime = millis();
DELAY = micros();
if(ONOFFdmuchawa == "TAK"){
if(DELAY >= (before_DELAY + speed_fan) && DELAY < (before_DELAY + (speed_fan + 50))){
digitalWrite(Pin_dmuchawa, HIGH);
delayMicroseconds(10);
digitalWrite(Pin_dmuchawa, LOW);
}
}else{
digitalWrite(Pin_dmuchawa, 0);
}
void fan(){
before_DELAY = DELAY;
}//dmuchawa----------------------
W tej konfiguracji oczywiście dmuchawa działa płynnie i nawet odliczanie czasu (pomijając opóźnienie 10micsec) działa prawidłowo ale w trakcie poruszania się po menu, czyli korzystania z danych przesyłanych do wyświetlacza LCD 2x16 występują opóźnienia i dmuchawa przerywa lub przyspiesza w takt przechodzenia z jednego menu do drugiego.
Dodano po 2 [godziny] 6 [minuty]:
jarek_lnx napisał: korystor napisał: Atmega 328 Przerwanie 50hz do sterowania fazowego blokuje odliczanie millis(); , występują opóźnienia w całym programie.
Trudno cię zrozumieć, ale sprawdzanie millis() wskazuje na to że nie używasz potencjału jaki jest w sprzęcie
Z pewnością nie wykorzystuję potencjału, wiem. Spróbuję troszkę pozmieniać, sterowanie dmuchawą przeniosę z loop() do funkcji wywołanej przerwaniem a do poprawnego odmierzania czasu użyje przepełnień Timera 8bit.