grala1 napisał:
Teraz Timer1 powinien mierzyć okres a po przeliczeniu zmienna Liczba powinna podać częstotliwość.
Sygnał podaje na INT0 i wyświetlacz zaczyna szybko migać więc nie widać jaki jest wynik.
Podaje 84Hz ale wyniku na LCD brak.
Sam fakt że wyswietlacz 'miga' oznacza że coś tam jednak się pokazuje.
Problem jest, że wynik nie pozostaje na długo bo jest natychmiast 'wymazany' przez "cls" w każdym cyklu wystąpienia interruptu, zamiast nadpisywania tylko zmienionych wartości. Co także jest przyczyną "migania" zamiast stabilnego wyniku.
Inna uwaga dotyczyłaby:
Subrutyny wywołane interruptem powinny byc jak najkrótsze, o ile mozliwe nie zawierac obsługi display.
Mimo że stosujesz wysoki prescaler, to jednak mierzone obroty nie mogą byc niższe niż 28 obr/min. Przy niższych obrotach Timer1 wyzeruje się i w efekcie wynik będzie błędny.
Jeżeli to ma byc Tachometr (obrotomierz), to dlaczego nie dodasz pełnego rachunku tak aby w wyniku otrzymac RPM (obr/min) zamiast częstotliwosci?
Nie masz potrzeby zatrzymywac timer aby odczytac jego zawartośc i go wyzerowac. Możesz to robic "w biegu", przez co wynik będzie dokładniejszy.
Dodaj przycisk, którym będziesz kontrollował START i STOP pomiaru.
Obliczenia dla RPM oraz display daj w Do/Loop, a w subrutynie przerwania pozostaw tylko 'przechwycenie' zawartości timera1 do jakiejś zmiennej i wyzeruj timer1.
e marcus