• Email
  • Forum

CKDIV8

Temat przewija się bardzo często..może zainteresować.

Jeśli programator nie wykrywa Ci nowego mikrokontrolera to może to być spowodowane jego fabryczną, niską prędkością.

Niżej napiszę jak sobie z tym poradzić

Mikrokontroler ma w sobie pamięć pewnych ustawień. Sam program najczęściej nie może na nie wpływać i żeby je zmienić musimy programatorem zmienić je dokonując zapisu nowych ustawień.

Całkiem nowy mikrokontroler ze sklepu ma pewne ustawienia które możesz chcieć zmienić bo nieco ograniczają Ci pole manewrów.
Takimi ustawieniami mogą być:

CKDIV8 - powoduje podział prędkości zegara przez osiem i nawet jeśli masz wybrane 8MHz to procesor pracuje na 1MHz. Trzeba go wyłączyć jeśli chce się pracować z pełną prędkością.
JTAGEN - włącza interfejs JTAG i nie pozwala w pełni korzystać z portu na którym jest. Na przykład w Atmega32 na porcie C piny oznaczone TDI, TDO, TMS, TCK. Trzeba go wyłączyć jeśli chce się pracować na całym porcie C w Atmega32 i kolejnych wyposażonych w JTAG.
M103C - Nazwa może być niejasna na pierwszy rzut oka. W Atmega128 oznacza włączenie trybu zgodności ze starą Atmega103 (stąd nazwa Mega103Compatibility -M103C). Powoduje wiele zmian. Niedostępne są w pełni wszystkie porty i nie zgadzają się adresy rejestrów więc programy napisane na Atmege128 nie działają właściwie.

Skupię się najpierw na CKDIV8

(W Mega8 nie znajdziemy takiej nazwy ale zasada jest podobna)

Atmega8 ze sklepu przychodzi z ustawioną prędkością 1MHz
Nie każdy ma MkAVRcalculator, i o tym za chwilę, ale dla Atmega8 i Attiny2313 możemy go śmiało użyć w wersji FREE.
Po ściągnięciu uruchamiamy go i przechodzimy najpierw na kartę "Ustawienia". Na dole klikamy "dyskietkę Instaluj" i w nowym oknie dialogowym wybieramy "Utwórz nowy folder" i tworzymy go na dysku C pod nazwą AVRDUDE (bez żadnych spacji ani polskich ogonków).

[Rozmiar: 76891 bajtów]


[Rozmiar: 87276 bajtów]


Jeśli nie było błędów to możemy przejść na zakładkę/kartę "Programator AVR" Naciskamy pomarańczowy przycisk "Sprawdź podłączony AVR" Powinna przedstawić się nam nasza Atmega8. Czasem jeśli w międzyczasie podłączałeś mikrokontroler może wystąpić błąd USBasp. Spróbuj wtedy na kilka chwil odłączyć programator od złącza USB po czym wetknij wtyk z powrotem. Odczyt powinien wyglądać jak na poniższym obrazku.

[Rozmiar: 93181 bajtów]



Przechodzimy na zakładkę "Fusy uproszczone" i wybieramy 8MHz wewnętrzny po czym wracamy na zakładkę/kartę programator.

[Rozmiar: 93181 bajtów]



Właśnie ze względu na użytkowników tego programu na moment się zatrzymam. Często widząc, że prędkość jest ustawiona na 8MHz myślą że tak jest w rzeczywistości.
Tymczasem mikrokontrolery się różnią. Jeden ma tylko pole wyboru prędkości a inny może mieć dodatkową "opcję" własnie w postaci "ptaszka" do wyłączenia bitu CKDIV8. Chcąc wyłączyć ten bit trzeba go odhaczyć, przejść na kartę "Programator", zaznaczyć "Zapis" oraz postawić ptaszek przy "Fuse bity", po czym nacisnąć "Wykonaj".

[Rozmiar: 81410 bajtów]


Zaznaczamy to ze chcemy zapisać nowe ustawienia do mikrokontrolera, zaznaczamy to ze będą to FuseBity po czym naciskamy "Wykonaj"

[Rozmiar: 93181 bajtów]



Co jeśli nie mamy MkAVRcalculatora...

Żaden problem! :D

Dla przykładu użyję ATmega328P często potrzebna ARDUINO`wcom :P

Możemy użyć darmowego programu BURN-o-mat.
Po instalacji trzeba mu na karcie ustawień pokazać gdzie mamy zainstalowany Avrdude. Dobrze jest mieć Avrdude w folderze bezpośrednio na dysku C. Folder w nazwie nie powinien mieć polskich znaków ani spacji. Po co sobie utrudniać. Nazwij folder AVRDUDE. W ustawieniach trzeba wskazać dwa pliki avrdude.exe i avrdude.conf, wybrać swój programator i dla najbardziej popularnego USBasp dopisać parametr spowalniający transmisję

[Rozmiar: 70940 bajtów]

Po wpisaniu parametru "-B 8" (minus B osiem) klikamy Apply i po wyjściu w ustawień wybieramy nasz mikrokontroler ATmega328P po czym klikamy "Fuses"
Zauważ że na dole w linii komend powinien już być dopisany parametr -B 8

[Rozmiar: 56950 bajtów]

Teraz bardzo ważne jest, żeby najpierw odczytać konfigurację z mikrokontrolera.
Nie zmienia się niczego dopóki nie uda się poprawnie odczytać konfiguracji. Częściowo można to rozpoznać po zahaczonych jub odhaczonych ptaszkach w polach wyboru. Nie może być tak że wszystkie są zaznaczone lub wszystkie są odznaczone. Powinny być zróżnicowane.
Jeśli tak jest to szukamy pola wyboru CKDIV8 i odznaczamy je.

[Rozmiar: 94533 bajtów]

Nie zmieniamy żadnego pola wyboru oznaczonego czerwonym kolorem. Jeśli mamy odznaczony ptaszek to możemy nacisnąć "Write Fuses". Po odłaczeniu mikrokontrolera na moment od zasilania powinien już uruchomić się z wybrana przez nas większą prędkością

[Rozmiar: 85494 bajtów]

Parametr -B8

Wyjaśnię krótko o co z nim chodzi.
Prędkość połączenia programatora nie powinna być szybsza niż jedna czwarta prędkości mikrokontrolera.
Jeśli więc pracuje on z fabryczną 1MHz to prędkość sygnału SCK dla programowania nie może być szybsza niż 250kHz.
1MHz = 1 000 000, 1000000 / 4 = 250 000, 250 tyś to 250 kHz
Parametr -B8 wybiera więc takie spowolnienie by prędkość nie przekroczyła 250kHz.
To samo tyczy się BASCOM`a. Poniższy obrazek pokazuje że nowy mikrokontroler nie został poprawnie wykryty.

[Rozmiar: 104779 bajtów]

Tutaj, po wybraniu wolniejszej prędkości bezproblemowo program wykrył podłączony mikrokontroler.

[Rozmiar: 104779 bajtów]


Poniżej przykładowe wybieranie prędkości 8MHz dla nowej Mega8.

[Rozmiar: 104779 bajtów]


Tutaj wyłączanie CKDIV8 w Tiny2313
[Rozmiar: 104779 bajtów]


Email

Jeśli mogę w czymś pomóc, napisz.