Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega48 i external clock

ponulaczek 05 Gru 2011 20:41 1974 8
  • #1 05 Gru 2011 20:41
    ponulaczek
    Poziom 2  

    Witam!

    Mam problem z procesorem Atmega48. Żeby zbudować profesjonalny układ, postanowiłem skorzystać z zewnętrznego kwarcu 12MHz. Przy odliczaniu czasu naprawdę są różnice jeśli chodzi o wewnętrzny oscylator.

    Jak pisze w dokumentacji, przestawiłem CKSEL na 0000 i podłączyłem miedzy XTAL1 i XTAL2 kwarc. Do tych dwóch nóżek podpiąłem też po kondensatorze 22pf, który idzie do masy.

    Procesor od tej pory nie odpowiada. Bardzo zależy mi na nim bo akurat bym coś zrobił a tak to musiałbym zamawiać znowu. Chciałbym żeby mi to zaczęło działać może coś nie wiem a nauczyłbym się. Na internecie nic nie znalazłem i robię według schematu kwarc i dwa kondensatory + fusebity.

    Mógłby mi ktoś wytłumaczyć, jak to działa??

    0 8
  • Pomocny post
    #2 05 Gru 2011 20:46
    piotrva
    Moderator Mikrokontrolery

    1. External clock to nie to samo co external crystal oscilator:
    A ) External clock - taktowanie prostokątnych przebiegiem podawanym na XTAL1
    B ) External cristal oscilator - taktowanie kwarcem (poprzez odpowiednie załączone struktury w procesorze)
    2. Ty wybrałeś opcję A, więc na razie:
    a) odepnij kwarc i kondensatory, podepnij do XTAL1 sygnał prostokątny 1MHz TTL (np. z NE555)
    b) przeprogramuj fusebity na external cristal oscilator
    c) znów podłącz kwarc i kondensatory
    d) powinno działać

    0
  • Pomocny post
    #3 06 Gru 2011 21:03
    stopi
    Poziom 28  

    Powiedz mi czy kwarc masz w dużej obudowie czy w małej?

    Ciebie interesuje External Cristal Oscillator - zewnętrzny rezonator kwarcowy. W/g dokumentacji jest to Full Swing Oscillator (str.29) i bity CKSEL[3..1] powinny wynosić 011 (dla rezonatorów od 0.4 do 20MHz) a bit CKSEL[0] 1 lub 0. Sprawdź zatem opcje CKSEL[3..0] = 0110 oraz 0111. Przy którejś z nich powinno na pewno zadziałać.

    Jeśli nie zadziała to sprawdź opcje z tabelki 6-3 dokumentacji. CKSEL[3..1] = 111 dla kwarcu od 8 do 16MHz.

    0
  • #4 07 Gru 2011 10:38
    ponulaczek
    Poziom 2  

    Hej! Kwarc jest taki mały w kształcie prostokąta może ma 1cm x 4mm. A czym się one różnią??
    Tak, raczej nie wiedziałem czym się to różni. Nie wiem jeszcze co to jest sygnał prostokątny. Tego sposobu z NE555 nie spróbuję bo nie mam ;P a nie wiedziałbym jak podłączyć nawet hehe.

    Dziękuję za odpowiedź! Jak przyjdą nowe procesory może pojutrze nowe to napisze czy działa :) Czyli CKSEL3 = 0, CKSEL2 = 1, CKSEL1 = 1 i CKSEL0 = 0 lub 1

    0
  • #6 07 Gru 2011 10:58
    ponulaczek
    Poziom 2  

    Low 0x69 lub 0x68
    High 0xDF

    Dzięki spróbuję :P Super kalkulator!!

    EDIT:

    Nie no załamałem się. Kolejny procesor do wyrzucenia ;/
    Wpisałem do lFuse 0x69. Jak to w końcu ma być. Pomoże mi ktoś??


    Proszę używać przycisku "zmień", a nie pisać kolejnego postu - poprawiłem.
    [zumek]

    0
  • Pomocny post
    #7 08 Gru 2011 19:01
    stopi
    Poziom 28  

    Cytat:
    Kolejny procesor do wyrzucenia ;/

    Nie jest do wyrzucenia, nawet, jeśli zapisałeś bit SPIEN=1. Można odblokować go przez programowanie równoległe.

    Cytat:
    Czyli CKSEL3 = 0, CKSEL2 = 1, CKSEL1 = 1 i CKSEL0 = 0 lub 1

    Zgadza się, czyli heksadecymalnie 6 lub 7.

    Tak to powinno bitowo wyglądać:

    Cytat:
    CKSEL[3..0] = 0110 lub 0111


    Po zamianie na hex te bity to: 0x6 oraz 0x7

    Lewą część bajtu przepisz jak była (CKDIV...SUT0).
    Zmieniaj tylko drugą połowę bajtu, pierwszą zostaw jak była fabrycznie w procku. Tylko te bity cię interesują.

    W zasadzie to powinieneś mieć cały bajt Low [CKDIV..CKSEL0] = 0x66 lub 0x67 (11100110 lub 11100111), a bajt High [RSTDISBL..BODLEVEL0] = 0xD9. Z taką konfiguracją procek powinien działać na zewn. rezonatorze 12MHz i mieć możliwość komunikacji przez ISP.

    Jak to nie pomoże to sprawdź opcję jeszcze, jak napisałem wcześniej CKSEL[3..1] = 111, a CKSEL[0] = 1 lub 0, czyli cały bajt 0x6E lub 0x6F (lewa część bajtu zawsze 6, jak poprzednio)

    Broń cię boże zmieniać bit [SPIEN]. Ten bit zablokuje możliwość odczytu procka przez ISP. Możesz to zmienić potem tylko w programatorze równoległym. Szeregowo już nic nie zrobić jak ustawisz ten bit. Jak bajt Fuse High zmienisz na np. 0xF9 a nie D9 to już klapa - ISP masz wtedy wyłączone.

    Dodano po 15 [minuty]:

    Może to cię też zainteresuje - obszerny wątek o ustawieniach FUSE BIT w mikrokontrolerach AVR.

    https://www.elektroda.pl/rtvforum/topic1060355.html

    0
  • Pomocny post
    #9 08 Gru 2011 20:45
    mmacura
    Poziom 17  

    Albo mi się zdaje albo ktoś coś źle policzył
    Low byte = 0x69 to faktycznie external oscylator ale o częstotliwości z zakresu 0,4 - 0,9MHz
    Aby ustawić 12MHz trzeba wpisać Low byte = 0x7F jeśli ma być z podziałem zegara przez 8, lub = 0xFF jeśli ma praccować na 12MHz (nie są to jedyne możliwości - jest jeszcze kilka innych dla różnych startu time.

    Marek

    0