Witam
Od kilku lat bawię się Bascomem i jest to fajny kompilator, ale tylko do pewnego momentu. Helpa można zużyć spokojnie jako papier toaletowy.
Publikacje Pana Wiązani są dobre ale tylko na początek zabawy.
Ostatnio pracuję nad pilotem RTV który ma obsłużyć 4 urządzenia.
No i zaczęły się schody. Pierwszy problem to sprzętowy generator nośnej ok. 36 kHz.
Udało mi się to rozwiązać dzięki książce Pana Piotra Góreckiego.
Patrz post Link
Teraz walczę z timerem0 (bo timer1 mam już zajęty do generowania nośnej 36 kHz) do dokładnego odmierzania krótkich odcinków czasu (np. 20us ).
Ogólnie mam problem rozwiązany bez użycia przerwań (zajmują za dużo czasu procesora i odmierzane odcinki czasowe do 50% odbiegają od wyliczonych).
Zacząłem zgłębiać rejestry Timera0 i wyszła mi jedna niezrozumiała rzecz:
Oto rejestr TIFR
Bit7 OCF2
Bit6 TOV2
Bit5 ICF1
Bit4 OCF1A
Bit3 OCF1B
Bit2 TOV1
Bit1 --
Bit0 TOV0
Kiedy timer rozpoczyna liczenie bit5 ICF1 ustawia się w stan 1
Kiedy następuje przepełnienie TIMER0 bit0 (TOV0) ustawia się w stan 1 (i o to chodzi)
I teraz po przepełnieniu chcę ustawić TOV0 z powrotem na 0 rozkazem
i nic się nie dzieje.
Ale po podaniu rozkazu:
bit TIFR.0 (TOV0) ustawia się na zero(czyli tak jak chcę)
a ICF1 czyli TIFR.5 pozostaje w stanie 1
Czyli osiągam zamierzony efekt skasowania flagi TOV0 ale dziwnym sposobem ?
Czy ktoś z kolegów może mi wyjaśnić to zjawisko i dlaczego tak dziwnie to działa.
Ps. proszę o wyrozumiałość (mam 63 lata i może umysł już nie ten...)
(Kupiłem sobie książkę nt. języka C ale czasu już trochę mało...)
Pozdrawiam wszystkich fanów uP
Od kilku lat bawię się Bascomem i jest to fajny kompilator, ale tylko do pewnego momentu. Helpa można zużyć spokojnie jako papier toaletowy.
Publikacje Pana Wiązani są dobre ale tylko na początek zabawy.
Ostatnio pracuję nad pilotem RTV który ma obsłużyć 4 urządzenia.
No i zaczęły się schody. Pierwszy problem to sprzętowy generator nośnej ok. 36 kHz.
Udało mi się to rozwiązać dzięki książce Pana Piotra Góreckiego.
Patrz post Link
Teraz walczę z timerem0 (bo timer1 mam już zajęty do generowania nośnej 36 kHz) do dokładnego odmierzania krótkich odcinków czasu (np. 20us ).
Ogólnie mam problem rozwiązany bez użycia przerwań (zajmują za dużo czasu procesora i odmierzane odcinki czasowe do 50% odbiegają od wyliczonych).
Zacząłem zgłębiać rejestry Timera0 i wyszła mi jedna niezrozumiała rzecz:
Oto rejestr TIFR
Bit7 OCF2
Bit6 TOV2
Bit5 ICF1
Bit4 OCF1A
Bit3 OCF1B
Bit2 TOV1
Bit1 --
Bit0 TOV0
Kiedy timer rozpoczyna liczenie bit5 ICF1 ustawia się w stan 1
Kiedy następuje przepełnienie TIMER0 bit0 (TOV0) ustawia się w stan 1 (i o to chodzi)
I teraz po przepełnieniu chcę ustawić TOV0 z powrotem na 0 rozkazem
Kod: text
i nic się nie dzieje.
Ale po podaniu rozkazu:
Kod: text
bit TIFR.0 (TOV0) ustawia się na zero(czyli tak jak chcę)
a ICF1 czyli TIFR.5 pozostaje w stanie 1
Czyli osiągam zamierzony efekt skasowania flagi TOV0 ale dziwnym sposobem ?
Czy ktoś z kolegów może mi wyjaśnić to zjawisko i dlaczego tak dziwnie to działa.
Ps. proszę o wyrozumiałość (mam 63 lata i może umysł już nie ten...)
(Kupiłem sobie książkę nt. języka C ale czasu już trochę mało...)
Pozdrawiam wszystkich fanów uP
