RTV forum PL | NewsGroups PL

Synchronizacja wyjść z przerwań Timera0 w AVR - problem z drganiem impulsów

[AVR] Przerwania i 50Hz

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Synchronizacja wyjść z przerwań Timera0 w AVR - problem z drganiem impulsów

MoonWolf
Guest

Wed Jun 13, 2007 10:28 am   



Zrobiłem w przerwaniu od timera0 (overflow co 256us) wykrywanie
przejścia przez 0 i chcę synchronizować z tym inne wyjście procka
(klasyczny ściemniacz do światła (Smile. Niestety pojawił się problem -
impulsy wyjściowe 'drgają' co powoduje mruganie żarówki. Doszedłem do
tego, że zrobienie tego z poolingiem, bez przerwań, eliminuje problem.
No ale to bez sensu jest (szczególnie przy bardziej zaawansowanych
programach). I tu pojawia się moje pytanie: czy coś sknociłem, czy to
jakiś feature? Nie podejmę się opisywać co robiłem w celu naprawienia
sytuacji, ale było to już chyba wszystko. Nie mogę niestety zmienić
układu i podpiąć sobie to 50Hz do nóżki przerwania zewnętrznego.

W tej chwili (w trakcie walki wyrzuciłem obliczanie drugiej połówki
sinusoidy) mam to zrobione tak (darujcie nazwy zmiennych (Smile:

SIGNAL (SIG_OVERFLOW0)
{
if (flagWait450Hz) {
if (bit_is_set(PIN_50HZ, BIT_50HZ)) lastPinState = 1; else if
(lastPinState == 1) {
flagWait450Hz = false;
flagWait2ON = true;
countWait2ON = 0;
lastPinState = 0;
}
} else
if (flagWait2ON && ++countWait2ON > 4) {
PORT_OBROTY |= _BV(BIT_OBROTY);
flagWait2ON = false;
flagWait2OFF = true;
countWait2OFF = 0;
} else
if (flagWait2OFF && ++countWait2OFF >= 2) {
PORT_OBROTY &= ~_BV(BIT_OBROTY);
flagWait2OFF = false;
flagWait450Hz = true;
}
}

No i oscyloskop synchronizuje się na jednym impulsie a kolejne
drgają :/

Co można z tym zrobić? Może w ogóle zmienić podejście? Już całkowicie
ugrzązłem a gugle nie pomagają :(

--
MoonWolf
Sygnaturka poszła tędy -->

Patryk Sielski
Guest

Wed Jun 13, 2007 11:14 am   



MoonWolf <moonwolf@polbox.com> pisze:
Quote:
Zrobiłem w przerwaniu od timera0 (overflow co 256us) wykrywanie
przejścia przez 0 i chcę synchronizować z tym inne wyjście procka

Zastanówmy się:

256 us to około 4 kHz

Stosunek 4 kHz (próbkowanie) do 100 Hz (sygnał wejściowy)
daje jedynie 40. Daje to błąd detekcji przejścia przez zero
na 180 stopni/40, czyli 4,5 stopnia. Innymi słowy 2,5 %
regulacji mocy żarówki.

Możliwości widzę dwie:

1) zewrzeć nóżkę wejściową z wejściem INT0/INT1 o ile masz je wolne
i zrobic to w przerwaniu. Ewentualnie możesz zewrzeć z ICP.
Napisałeś, że nie możesz tego zrobić, ale nie wiem, czy masz już zrobione
płytki, czy nie masz wolnego pinu. Jeśli to kwestia płytek, to jeden
kawałek kynaru to nic złego Wink. A zwarcie dwóch nóżek wejściowych ze
sobą krzywdy nie zrobi.

2) Jeśli chcesz to miec koniecznie w przerwaniu zrób procedurę obsługi
przerwania:
-czekaj na przejście przez zero.
-ustaw overflow timera na 9.8 ms, czyli na krótką chwilę przed następnym
spodziewanym przejściem przez zero

Te 0.2 ms to IMHO wystarczający margines bepzoeczeństwa, oczywiście możesz
go zwiększyć.

--
Pozdrawiam,
Patryk Sielski
http://www.usprawnienia.pl

elektroda NewsGroups Forum Index - Elektronika Polska - Synchronizacja wyjść z przerwań Timera0 w AVR - problem z drganiem impulsów

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map