logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATmega162][avr-gcc] - Rezonator zegarkowy nie rusza

m2ichal 08 Mar 2013 21:12 1641 9
REKLAMA
  • #1 12034310
    m2ichal
    Poziom 9  
    Próbuję bezskutecznie uruchomić rezonator zegarkowy na uC AtMega162. Do mikrokontrolera rezonator zegarkowy podłączony jest do pinów TOSC1 i TOSC2. Ponadto używany jest jest zewnętrzny oscylator 7.3278MHz podłączony do XTAL1 i XTAL2 z kondensatorami 22pF. Napięcie zasilania 5V.

    Po uruchomieniu programu rejestry przyjmują wartości:
    TCNT2: 0
    ASSR: 0x0F

    Po dotknięciu nóżki rezonatora zegarkowego (np. śrubokrętem) do TCNT2 jest ładowana żądana wartość, a ASSR wynosi 0x80. Jednak licznik cały czas pozostaje już w takim stanie.

    Czy ktoś miał podobny problem?

    Poniżej kod programu:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 12034860
    netotron
    Poziom 26  
    Rozumiem że, do rezonatora "zegarkowego" też podłączyłeś 22..27p?
  • #3 12034871
    m2ichal
    Poziom 9  
    Nie, rezonator zegarkowy jest bezpośrednio podczepiony do uC, bez żadnych kondensatorów.
  • REKLAMA
  • #4 12034876
    netotron
    Poziom 26  
    Ja daje 27p i działa. Tak się przyzwyczaiłem :D
  • REKLAMA
  • #5 12034886
    m2ichal
    Poziom 9  
    Spróbuję, jednak w nocie jest dość jasno napisane:
    Cytat:

    For AVR microcontrollers with Timer/Counter Oscillator pins (TOSC1 and TOSC2), the crystal is connected directly between the pins. The Oscillator provides internal capacitors on TOSC1 and TOSC2, thereby removing the need for external capacitors. The internal capacitors have a nominal value of 10 pF.
  • REKLAMA
  • #6 12034899
    excray
    Poziom 41  
    W manualu na stronie 153 jest opisany sposób modyfikacji i odczytu rejestrów licznika w trybie asynchronicznym który ze względu na ten tryb jest nietypowy. Nie widzę nigdzie u Ciebie tych procedur.
  • #7 12034991
    m2ichal
    Poziom 9  
    Procedura zmiany trybu synchroniczny/asynchroniczny jest zachowana, odczyt rejestrów też jest prawidłowy, gdyż nie wykorzystywane są tryby uśpienia uC.

    Problem tkwi w tym, że wpisanie wartości do TCNT2, OCR2 i TCCR2 i odczekanie pewnego czasu nie powoduje czyszczenia flag w rejestrze ASSR. Czyli tak na prawdę te wartości nie są ładowane.

    Do przerwania od TIMER2 też nie dochodzi, bo licznik nie chodzi.

    Dodanie kondensatorów nie pomogło.
  • #8 12035039
    excray
    Poziom 41  
    Być może dotykając śrubokrętem nóżki uszkodziłeś wejście oscylatora. Możesz jeszcze spróbować z zewnętrznym generatorem podpiętym pod wejście oscylatora. Niemniej wartość 0x80 w rejestrze ASSR jest mocno nieprawdopodobna.
  • #9 12035055
    m2ichal
    Poziom 9  
    excray napisał:
    Niemniej wartość 0x80 w rejestrze ASSR jest mocno nieprawdopodobna.


    moja literówka, powinno być oczywiście 0x08

    Już od początku TIMER2 nie działał, więc uszkodzenie raczej wykluczam.
  • #10 12067393
    excray
    Poziom 41  
    Jak postępy? Próbowałeś z dodatkowymi kondensatorami 10pF między TOSC a masą?
REKLAMA