Witam
Piszę procedurę wysyłającą na daną końcówkę portu 1ms impulsy w zadanych odcinkach czasu.
Według wyliczeń kalkulatora dla AVR wychodzi iż przy 4HMz kwarcu, preskalerze ustawiony na 64 i początkowej wartości licznika 193 zegar generuje przerwanie w granicach 1ms.
I tak mam ustawioną konfigurację:
Teraz powiedzmy potrzebuję ustawić czas trwania impulsów na 0.5s i przerwę w generowaniu na 2sek (to wszystko w pętli ciągłej)
Czyli teoretyczne powinienem liczyć: licz 500 przerwań - wyłącz końcówkę - licz 2000 - zezwol na końcówkę...
A więc wymyśliłem to tak:
Niestety te czasy z podprogramu nijak nie mają się do teorii 0.5 i 2 sek...
Czas migania diody (dioda praktycznie się pali) to coś koło 1,2sek, a czas przerwy to coś koło 4sek.
I teraz jest pytanie, czy kalkulator źle oblicza przerwania czy ja czegoś nie rozumie i źle się do tego zabieram?
Te czasy przerwy i czasu trwania generowania impulsów są tu czysto testowe. W programie potrzebować będę częstotliwości od 1 do 100Hz z szerokością impulsu 1ms.
Za udzieloną pomoc będę bardzo wdzięczny. A widzę że są tu fachowcy nie w ciemię bici
Pozdrawiam
Piszę procedurę wysyłającą na daną końcówkę portu 1ms impulsy w zadanych odcinkach czasu.
Według wyliczeń kalkulatora dla AVR wychodzi iż przy 4HMz kwarcu, preskalerze ustawiony na 64 i początkowej wartości licznika 193 zegar generuje przerwanie w granicach 1ms.
I tak mam ustawioną konfigurację:
Config Timer2 = Timer , Prescale = 64
Load Timer2 = 193
On Timer2 Program
Teraz powiedzmy potrzebuję ustawić czas trwania impulsów na 0.5s i przerwę w generowaniu na 2sek (to wszystko w pętli ciągłej)
Czyli teoretyczne powinienem liczyć: licz 500 przerwań - wyłącz końcówkę - licz 2000 - zezwol na końcówkę...
A więc wymyśliłem to tak:
Program:
Load Timer0 = 193
If Flaga = 1 Then ' czas właczenia 500*1ms po czym wyłacz flagę
Incr Wlacz
If Wlacz = 500 Then
Wlacz = 0
Flaga = 0
End If
End If
If Flaga = 0 Then ' czas wyłaczenia 2000*1ms po czym włacz flagę
Incr Wylacz
If Wylacz = 2000 Then
Wylacz = 0
Flaga = 1
End If
End If
If Flaga = 1 Then ' jeżeli Flaga = 1 załączaj końcówkę
Toggle Portb.2
Else
Reset Portb.2 ' jeżeli Flaga = 0 końcówka wyłączona
End If
Return
Niestety te czasy z podprogramu nijak nie mają się do teorii 0.5 i 2 sek...
Czas migania diody (dioda praktycznie się pali) to coś koło 1,2sek, a czas przerwy to coś koło 4sek.
I teraz jest pytanie, czy kalkulator źle oblicza przerwania czy ja czegoś nie rozumie i źle się do tego zabieram?
Te czasy przerwy i czasu trwania generowania impulsów są tu czysto testowe. W programie potrzebować będę częstotliwości od 1 do 100Hz z szerokością impulsu 1ms.
Za udzieloną pomoc będę bardzo wdzięczny. A widzę że są tu fachowcy nie w ciemię bici
Pozdrawiam