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

KontrollerLab ustawienie fuse bitów dla ATmega8 12MHz

20 Mar 2010 13:57 4567 10
  • Poziom 12  
    Witam,

    mam problem z ustawieniem zewnętrznego rezonatora 12MHz w procesorze ATmega8. Używam programu KontrollerLab i ustawiłem bity zgodnie ze stroną:
    Link
    Cytat:
    Zewnętrzny Rezonator Kwarcowy 1 - 16MHz

    W tej wersji ustawień, gdy bit CKOPT= "0" maksymalna częstotliwośc pracy wynosi 16MHz. Dla zewnętrznego rezonatora kwarcowego musimy przestawić bity CKSEL3..1 w zależności od jego częstotliwości. Dla częstotliwości 0,9-3MHz bity CKSEL3..1 powinny mieć wartość "110", natomiast dla 3-16MHz powinno być CKSEL3..1 = "111"
    W drugim kroku zajmujemy się ustawieniem bitu CKSEL0 i SUT1..0 ktore razem odpowiadają za czas powrotu mikrokontrolera do normalnej pracy po resecie lub trybie Power-Down itp. Najczęściej stosowane są trzy tryby. Pierwszy, wymagany gdy układ BOD jest aktywny uzyskamy dzięki ustawieniu CKSEL0 = "1" i SUT1..0 = "01". Drugi tryb stosowany jest gdy napięcie zasilające szybko narasta, jest realizowany przez ustawienie CKSEL0 = "1" i SUT1..0 = "10". Trzeci natomiast uruchamiamy stawiając CKSEL0 = "1" i SUT1..0 = "11", jest stosowany gdy napięcie zasilające powoli narasta.


    Zgodnie z instrukcją ustawiłem bity na procesorze:
    KontrollerLab ustawienie fuse bitów dla ATmega8 12MHz

    No i od razu avrdude wysyła komunikat, że nie może połączyć się z procesorem, czyli wygląda na to, że pozamiatane i trzeba kupić nowy procek. Pytanie jednak jak ustawić te bity w tym programie, żeby było dobrze?

    Używam programatora USBasp.
  • AM TechnologiesAM Technologies
  • Pomocny post
    Poziom 22  
    Witam,

    Jeżeli procesor jest zablokowany przez np Lock Bity, to pomoże mu programator HV (schematy znajdziesz na forum).

    Co do poprawnych ustawień dla Twojego przypadku to lfuse = 0xff, hfuse = 0xc9 czyli zaprogramowane tylko SPIEN, CKOPT, BOOTSZ1 oraz BOOTSZ2.

    Jeżeli nie masz doświadczenia z fuse'ami, to polecam użyć nakładki na avrdude, która bardzo obrazowo pozwala na wybór tego cco chce się zrobić - po prostu wybierasz opcje z listy (np zewnętrzny oscylator na wartość > 8MHz), wartościami fuse się nie musisz interesować. Tutaj masz link do wersji demo programu mkAVRCalculator napisanego przez kolegę mirekk36 z elektrody. Z tego co pamiętam, to wersja demo obsługuje m.in. Atmega8. Z innych sprawdzonych i znanych mi programów to Burn-O-Mat. Oba w/w programy współpracują z avrdude, ale można ich używać bez niego - np właśnie w celu odczytu poprawnych ustawień fuse bitów.
  • Poziom 12  
    Dzięki za odpowiedź. Znalazłem ten program, o którym mówisz niestety po wysłaniu mu fuse bitów:|. Nie wiem czy opłaci mi się budowanie programatora równoległego bo póki co to tylko jeden procek. Jak zablokuje sobie więcej procków (oby nie) to zastanowię się nad tą opcją.

    Ale tak dla pewności jak będą miał nowy procek to robię tak:
    1. Dołączam zewnętrzny rezonator 12 MHz wg schematu
    2. Przełączam zworkę procesora na programowanie układów powyżej 1.5MHz
    3. Wydaję komendę:
    Code:
    avrdude -c usbasp -p atmega8 -U lfuse:w:0xff:m -U hfuse:w:0xc9:m 

    i przynajmniej w teorii wszystko powinno być ok?

    Mam jeszcze pytanie jak programowałem procesor (programator usbasp) to trwało to dosyć długo tzn. 'writing' ok. 17s + 'reading' ok 15s co daje >30s. Czy mogło to mieć związek z taktowaniem kwarcu (na początku nie zmieniałem fuse bitów więc ustawione było na 1 MHz)?
  • AM TechnologiesAM Technologies
  • Pomocny post
    Poziom 22  
    Powinieneś mieć przy programatorze zworkę, która odpowiada za przyspieszenie transmisji (dla częstotliwości powyżej 1MHz) - domyślnie jest ona założona. Po przestawieniu fuse bita odpowiadającego za taktowanie na wyższy, można tą zworkę ściągnąć i wtedy sam się zdziwisz jak szybko to idzie :) W mkAVRCalculator, do którego linka podałem w poprzednim poście, nie trzeba się nawet bawić tą zworką - wszystko jest załatwione programowo.

    Co do Twojego pytania:

    1) Podłączasz procesor do programatora, przestawiasz mu fusy na zewnętrzny kwarc - kod który podałeś do avrdude jest poprawny. Zworka spowalniająca przy programatorze założona. Na tym etapie nie potrzebujesz mieć podłączonego kwarcu, ponieważ do momentu zakończenia zmiany fuse bita procesora jest taktowany 1MHz - aczkolwiek podłączony kwarc nie powinien w niczym przeszkadzać.

    2) Wyjmujesz zworkę spowalniającą (albo i nie - wtedy też zadziała, z tym że jak zauważyłeś programowanie trwa relatywnie długo) i programujesz.

    Tylko pamiętaj - po przestawieniu rezonatora na zewnętrzny przy każdym programowaniu/zmianie fuse bitów, stosowny kwarc musi być już podłączony, inaczej nie będziesz miał komunikacji z procesorem.

    Tak teraz pisząc te uwagi zastanawiam się właśnie nad powyższym... Czy w momencie pracy programatora, do procesora jest podłączony ten kwarc który ustawiłeś wcześniej? Jeżeli nie to nic dziwnego, że procesor nie odpowiada.
  • Poziom 12  
    Napiszę może jak to zrobiłem od początku:
    1. Załadowałem jakiś prosty program, żeby sprawdzić czy programator działa (bez zmieniania fuse bitów - domyślna częśtotliwość 1 MHz)
    2. Odłączam układ od zasilania, podłączam zewnętrzny kwarc, włączam. Program dalej się wykonuje (po kolei włączają się diody), ale wykonuje się wolniej.
    3. Ustawiam fuse bity tak jak w oknie powyżej (teraz wiem, że to jest złe ustawienie, bo myślałem, że bit zaznaczony oznacza bit=1 a jest odwrotnie)

    Właściwie to wysyłając te bity otrzymałem w oknie "target doesn't answer" więc pomyślałem, że coś ze zworkami na programatorze jest nie tak, ale do tej pory nie mam komunikacji z prockiem. Próbowałem trochę kombinować tzn. odłączać kwarc, zmieniać zworkę szybkości itp, ale nic nie pomogło. Zauważyłem też, że jak podłącze kwarc to świeci się dioda podpięta do portu PD0, tak jakby program powoli (bardzo powoli) się wykonywał, bo skąd niby stan wysoki na PB0.
    Teraz sobie myślę, że może te fusebity oznaczały jakiś inny kwarc niż ten który jest podłączony i dlatego procek się nie komunikuje
  • Pomocny post
    Poziom 22  
    Szczeh napisał:
    Teraz sobie myślę, że może te fusebity oznaczały jakiś inny kwarc niż ten który jest podłączony i dlatego procek się nie komunikuje


    Generalnie przy 12MHz to już nie ma znaczenia - jest ustawienie od 8MHz wzwyż i już. Zwróć uwagę, iż miałeś zaznaczonych część Lock Bitów - najprawdopodobniej przez to masz problem i bez programatora szeregowego raczej niewiele zdziałasz.
  • Pomocny post
    Poziom 26  
    Witam.Jeśli masz bity ustawione tak jak pokazałeś na obrazku to ustawiłeś je na zewnętrzny generator a nie kwarc .podłącz zewnętrzny generatorek pod XTAL1 i powinno być wszystko git.
    Polecam tę stronkę sam zawsze z niej korzystam gdyż głowa nie śmietnik i wszystkiego nie trzeba pamiętać.Link
  • Poziom 12  
    Co to jest ten zewnętrzny generator?
  • Pomocny post
    Poziom 26  
    Witam. Nie wiem jak inni koledzy ale ja mam kilka scalonych generatorów.Nie są one drogie a czasami ratują życie gdy się źle poustawia fusy.
    KontrollerLab ustawienie fuse bitów dla ATmega8 12MHz
  • Poziom 12  
    Chyba pierwszy raz coś takiego widzę:D
    Mógłbyś napisać jak się to podłącza (fajnie gdybyś miał jakiś schemat)? W ogóle jaką to generuje częstotliwość? Ustawia się ją przez dołączenie odpowiednich elementów, czy po prostu kupuje się generator z ustaloną częstotliwością jak w przypadku kwarcu? Jak o to zapytać w sklepie elektronicznym:D?
  • Poziom 26  
    Witam. Taki generator to kompletne urządzenie .Podłączasz zasilanie 5V o ile jest przystosowany do zasilania 5 voltami. podłączasz masę i masz wyjście sygnału prostokątnego. Co do częstotliwości to są one ustalone z góry przez producenta, ale przedział tych częstotliwości jest tak duży że zawsze można sobie coś dobrać . Ja mam 1 MHz , 4 MHz , 10MHz , 16MHz , 20MHz. Ale są dostępne nawet i 100MHz a może i więcej. Dokumentacja jest tutaj
    Link

    A tutaj masz wybór jakie chcesz Link