Jak "pomocne i merytoryczne" są niektóre wypowiedzi każdy może sam ocenić
Wracając do sprawy licznika napisze dlaczego tak ważne są informacje o tym jakim zegarem jest taktowany mikrokontroler i jaki jest obwód koła.
Do obliczeń można użyć kalkulatora wbudowanego w Windows.
Licznik TIMER1 jest 16-nasto bitowy. Oznacza to że pomieści 65536 taktów które do niego dotrą. Mogą one docierać przez Preskaler
Zobacz że przy 16MHz i preskalerze 64 licznik TIMER1 będzie nadal otrzymywał 250 000 impulsów/taktów na sekundę a pomieścić może 65536
Z tego wniosek że jeśli koło będzie się kręciło wolniej i nie nastąpi wyzwolenie pomiaru to licznik się przepełni i to minimum trzy razy w ciągu sekundy
Na stronie 143 noty Atmegi128 możesz przeczytać że następna wartość jaka może być ustawiona dla Preskalera to 256
Teraz jest, moim zdaniem, lepiej
16MHz/256 = 62 500 co spokojnie pomieści licznik na jedną sekundę co oczywiście nie jest tu wyznacznikiem.
Wszystko zależy od tego jak często będą impulsy bo jeśli licznik sie przepełni to albo będziesz musiał zmienić Preskaler albo zliczać przepełnienia.
Teraz sprawa sprzętowa. Na stronie 74 przeczytasz że wejście ICP TIMERA1 jest na pinie PORTD.4
Myślę że lepiej kiedy kontaktron zwiera na moment linię do masy wiec ustawimy wejście ICP na opadające zbocze. W tym celu dobrze jest ustalić na nim stan wysoki poprzez włączenie wewnętrznego rezystora podciągającego.
Poniżej taki przykładowy program który powinien wyświetlać wartości długości trwania kolejnych impusów jeśli będziesz się mieścił w okolicach sekundy pomiędzy nimi
Program jest poglądowy. Kiedy zarejestrowane zostanie opadające zbocze to wartość licznika CAPTURE1 jest przepisywana do zmiennej Period. Stawiam też flagę Pulse ze coś zostało uchwycone. Kiedy program napotka flagę w pętli po tym jak powróci z obsługi przerwania to wyświetli wartość zmiennej Period.
Warto zwrócić uwagę na jeden Twój błąd. Licznik TIMER1 jest szestasto bitowy co znaczy też "dwu bajtowy". Poprzednio zapisywałeś jego wartość do zmiennej typu LONG która jest
czterobajtowa. Jest to niepotrzebna komplikacja
Do zapisywania wartości Timera1 najlepiej użyć dwubajtowej WORD
Gdybyś próby przeprowadzał nie z generatorem, a prawdziwym przyciskiem albo kontaktronem to przy niestabilnych odczytach możesz spróbować dołączyć do wejścia ICP kondensatorek 22n-100n
Zaloguj się, aby zobaczyć kod
Życzę miłego dnia.
Ps. Trochę poczytaj i sam popróbuj bo niektóre pytania są często łatwe do znalezienia i zadawanie ich potem na Forum wskazuje na lenistwo
