Skocz do zawartości

[Bascom] Counter licznik impulsów program do nauki


Igor300

Pomocna odpowiedź

Witam

Za pomocą Counter chcę zliczac impulsy w Atmega8 na (T0).

Jednak po podaniu jednego impulsu wyświetlacz nie nalicza.

Dopiero jak podepnę 200HZ pod (T0) to zaczyna się zliczanie, i wartości

przeskakują co 1 sekundę.

Gdy zwiekszę czestotliwośc licznik liczy szybciej,
ale nie każdy impuls tylko co któryś,
tak jak by na tym wejściu był pleskaler.

Doradźcie co zrobic aby to wejście zliczało każdy impuls,

oczywiście z wykorzystaniem Counter.


$regfile = "m8adef.dat"
$crystal = 8000000

config pind.4=input    '

Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.5 , Rs = Portc.4
Config Lcd = 20 * 2

Cls
Cursor Off Noblink

Dim A As Single

A = 0
Lcd A

Config Timer0 = Counter , Edge = Rising
On Timer0 Przerwanie
Enable Interrupts
Enable Timer0
Start Timer0


Do
Loop
End


Przerwanie:
Incr A
Cls
Lcd A
Return

Link do komentarza
Share on other sites

No ale przecież timer dostaje impulsy, zlicza je i dopiero po jego przepełnieniu dostajesz przerwanie gdzie zwiększasz swój licznik. A timer0 ma pojemność 256 impulsów. Tak więc sam timer robi za prescaler. Żeby mieć liczbę impulsów, musisz czytać i wypisywać zarówno timer jak i swój licznik. A może licznik wtedy nie jest potrzebny? Nie wiem do ilu chcesz liczyć. W razie czego masz timer1 - ten jest 16-bitowy a jeśli impulsy są wolne (<1kHz) to zupełnie spokojnie możesz nie używając timera zliczać je przerwaniami (INT0 lub INT1) i samym licznikiem.

Link do komentarza
Share on other sites

Albo Ty nie rozumiesz co napisałem, albo ja Twojego pytania. Przecież timer zlicza wszystkie impulsy, bo w trybie licznika (podłączonego do wejścia T0) nie ma tam żadnego prescalera. Podajesz jeden impuls - w timerze jest liczba 1, podaj drugi - w timerze masz już 2 itd.. aż do 256 impulsu który przekręca timer z 255 na 0 i generuje przerwanie TOV. Ty zasadziłeś się właśnie na to przerwanie więc widzisz tylko momenty przejść z 255 na 0. W timerze 16-bitowym to samo przerwanie przychodzi co 65536 impulsów więc jeszcze rzadziej.

W ogóle trochę nie rozumiem po co ci timer. Swoje impulsy doprowadź po prostu do wejścia INT0 lub INT1 i zasadź się na któreś z tych przerwań. Każde wejście do funkcji odpalanej tym przerwaniem to będzie jeden impuls, który sobie łatwo zliczysz w inkrementowanej zmiennej. Są chyba w BASCOMie odpowiednie do tego funkcje?

Timery służą w trybie licznika do zliczania bardzo szybkich impulsów, bo bez udziału programu mogą naliczać bardzo szybko. Wtedy nie obchodzi Cię aktualna wartość timera bo sprawdzasz ją tylko co jakiś czas, np. gdy już impulsy przestaną napływać i timer stoi.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.