Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[ATmega16] [C] timer2 tryb asynchroniczny

dawzuch 21 Dec 2011 18:22 2015 6
  • #1
    dawzuch
    Level 9  
    Witam,
    Mam do szanownych kolegów pytanie o niestandardowy, wydaje mi się, sposób wykorzystania timera2. Dokładniej chodzi mi o to, aby używać go w trybie asynchronicznym do zliczania impulsów podanych na wyprowadzenie TOSC1.

    Potrzebuję rozczaić taką możliwość, ponieważ zmuszony jestem wykorzystać dokładnie to wejście timera2 do zliczania impulsów. Testy wykonuję w ten sposób, że 'szturcham' wejście TOSC1 +5v , a w programie sprawdzam stan rejestru TCNT2 - dowiaduję się w ten sposób, czy timer2 zlicza sygnały (rozpoznaje je jako taktowanie). Niestety cały czas rejestr jest równy 0.

    Dodam jeszcze, że jestem pewien, że zadaję sygnał na wyprowadzenie TOSC1 w sposób prawidłowy (gdy nieskonfigurowany timer2, uC rozpoznaje zmiany stanu pinu TOSC1).

    Zamieszczam kod którym inicjalizuję timer2, może tu robię jakiś błąd.
    Z góry dziękuję za pomoc.

    Code: c
    Log in, to see the code
  • #2
    janbernat
    Level 38  
    Str.129:
    The Oscillator is optimized for use with a 32.768 kHz watch crystal. Applying an external
    clock to the TOSC1 pin may result in incorrect Timer/Counter2 operation. The CPU main
    clock frequency must be more than four times the Oscillator frequency.
  • #3
    dawzuch
    Level 9  
    janbernat wrote:
    Str.129:
    The Oscillator is optimized for use with a 32.768 kHz watch crystal. Applying an external
    clock to the TOSC1 pin may result in incorrect Timer/Counter2 operation. The CPU main
    clock frequency must be more than four times the Oscillator frequency.


    Czytałem to, jak również:
    Quote:
    For AVR microcontrollers with Timer/Counter Oscillator pins (TOSC1 and TOSC2), the crystal is
    connected directly between the pins. No external capacitors are needed. The Oscillator is optimized
    for use with a 32.768 kHz watch crystal. Applying an external clock source to TOSC1 is
    not recommended.


    To, że jest zoptymalizowane pod 32 khz nie musi znaczyć, że nie może być inna.
    To, że nie rekomendują taktowania pinu TOSC1 - nie znaczy, że nie można ;) a nawet wydaje mi się, że skoro o tym wspominają to musi się dać

    janbernat dzięki za zainteresowanie. W twierdzeniu, że się da dodatkowo utwierdza mnie fakt, że schematy blokowe Counter Unit dla timera1 i timera 2 wyglądają w zasadzie tak samo, a wyprowadzenie T1 odpowiada TOSC1 (str. 95 i 118).
    Ja chciałbym dokładnie tak samo używać pinu TOSC1 dla timera2, jak używa się pinu T1 dla timera1.
    Any idea?
  • Helpful post
    #4
    janbernat
    Level 38  
    Trzeba by zrobić jakiś układ "udający" elektrycznie kwarc zegarkowy.
    Impedancja, pojemność itd.
    Częstotliwość raczej ma mniejsze znaczenie- ale jakieś ma.
    Bo jak się uda zrobić "na pałę" podając 5V to może działać albo nie.
    Zależnie od temperatury, zasilania i innych parametrów.
    To tylko idea- modelowaniem dwójnika pasywnego na układzie aktywnym zajmowałem się baaardzo dawno temu.
    Ten "blok" wejściowy na schemacie to jest układ analogowy wpasowany w technologię stosowaną do układów cyfrowych.
    Co jest w środku- nie wiadomo.
  • #5
    dawzuch
    Level 9  
    A czy jest jakaś inna możliwość (nie licząc wyprowadzeń T0 i T1) zliczania zdarzeń zewnętrznych , czyli sygnałów?
    Są to sygnały (ttl) od enkodera i trafiają na uC z konwertera kwadraturowego ls7083
  • #6
    janbernat
    Level 38  
    Można wykorzystać INT0 lub INT1.
    Można też wykorzystać polling- czyli odpytywanie dowolnego pinu w pętli głównej.
    Można też wykorzystać polling z jakimś timerem- czyli odpytywanie co jakiś ściśle określony czas.
    Można też- co sugerują w ds do tego układu- wykorzystać licznik rewersyjny 193 i z niego odczytywać.
    Zresztą- jakikolwiek licznik rewersyjny.
    No ale- co to ma robić, z jaką częstotliwością i czy w ogóle jest potrzebny ten LS7083?
    Przecież odczyt enkodera można zrobić na samym procesorze.
  • #7
    dawzuch
    Level 9  
    Witam.
    Mam układ z LS7083 do którego trafiają sygnały z enkodera (1600/obr). Piszę kod na uC do sterowania silnikiem DC. INT0,1 odpadają, bo w połączeniu z przerwaniami od timera (generującego PWM) cały program mam "poszatkowany", tj. przerwania od INT przerywają te od timera. Dlatego szukam rozwiązania tego problemu w taki sposób, aby w przerwaniu od timera0 generować PWM, natomiast sygnały z enkodera zliczać sprzętowo.
    Może jest jakieś rozwiązanie mojego problemu, przy użyciu INT0,1.
    Posze o pomoc

    Wesołych Świąt