Witam,
Mam dziwny problem. Nie wiem jakim cudem dzieje się to co się dzieje, a mianowicie:
Przerwanie ADC po wykonaniu pomiaru ma ustawić flagę:
I działa to idealnie.
Żeby sprawdzić stan zasilania należy tylko wywołać gdzieś w kodzie
i odczytać wartość Upower.
Jednak po włączeniu zasilania i w momencie wykonywania pierwszego pomiaru Upower=0, dopiero drugi pomiar zwraca prawdę
Postanowiłem więc wywołać przerwanie 3 razy, niby nic prostszego:
I nie wiem jakim cudem na terminalu pokazuje się coś takiego (TS() - funkcja wysyłająca znaki do PC przez COMa)
Jakim cudem tak się dzieje? I gdzie zniknął napis 'second' , choć ciekawsze jest dlaczego 'third' i 'last' wyświetlają się kilka razy?!
Mam dziwny problem. Nie wiem jakim cudem dzieje się to co się dzieje, a mianowicie:
Przerwanie ADC po wykonaniu pomiaru ma ustawić flagę:
ISR (ADC_vect)
{
wynik = ADCH; // wynik jest w ADCH tylko dla precyzji 8 bit !
//// SUMOWANIE 128 PRÓBEK
s+=wynik;
n++;
if (n>128)
{
Upower = s/6400; // <-- wzór po uproszczeniu!
flag_ADCDONE_SET;
s=0;
n=0;
}
else
ADCSRA |= _BV(ADSC); // Wykonaj kolejny pomiar
}I działa to idealnie.
Żeby sprawdzić stan zasilania należy tylko wywołać gdzieś w kodzie
ADCSRA |= _BV(ADSC); // Wykonaj kolejny pomiari odczytać wartość Upower.
Jednak po włączeniu zasilania i w momencie wykonywania pierwszego pomiaru Upower=0, dopiero drugi pomiar zwraca prawdę
Postanowiłem więc wywołać przerwanie 3 razy, niby nic prostszego:
float AktualneNapiecie()
{
flag_ADCDONE_RESET;
TS("first");
// AKTYWOWANIE PIERWSZEGO POMIARU
ADCSRA |= _BV(ADSC); // Wykonaj kolejny pomiar
// AKTYWOWANIE DRUGIEGO POMIARU JEŚLI ZAKOŃCZY SIĘ PIERWSZY
while (flag_ADCDONE_IS_RESET)
flag_ADCDONE_RESET;
TS("second");
ADCSRA |= _BV(ADSC);
// AKTYWOWANIE TRZECIEGO POMIARU
while (flag_ADCDONE_IS_RESET)
flag_ADCDONE_RESET;
TS("third");
ADCSRA |= _BV(ADSC);
// ZWRACANIE WYNIKU
while (flag_ADCDONE_IS_RESET)
TS("last");
flag_ADCDONE_RESET;
return Upower;
}I nie wiem jakim cudem na terminalu pokazuje się coś takiego (TS() - funkcja wysyłająca znaki do PC przez COMa)
Cytat:
first
third
third
third
last
last
last
last
Uz= 4.33
Jakim cudem tak się dzieje? I gdzie zniknął napis 'second' , choć ciekawsze jest dlaczego 'third' i 'last' wyświetlają się kilka razy?!