Witam,
napędzam procek ATMEGA2560 kwarcem 18,432MHz. Czy jeśli na stałe w fusebitach wyłączę dzielenie sygnału zegarowego przez 8, to czy będę w stanie zaprogramować procek programatorem USBASP? Będzie wykrywalny?
Coś mi świta po głowie, że nie.
I drugie pytanie, wąłczenie fusebitu CKDIV8 powoduje ustawienie w CLKPS3:0 wartości 0011, czyli dzielnik przez 8. Jeśli wyłączę dzielnik programowo (0000), to czy po resecie ta wartość wróci do 0011, czyli dzielnika przez 8?
Wydaje się raczej oczywiste, że tak, ale wolę się upewnić, bo już nie raz miałem problemy z prockami z powodu fusebitów.
Pozdrawiam.
AVR 2560 CLKPS3:0 i CKDIV8 oraz 18,432MHz i programowanie
- siekierzyński
- Użytkownik
- Posty: 482
- Rejestracja: 01 cze 2010, 23:12
- Lokalizacja: Nareszcie Polska
1) Kiedyś UsbAsp miał limit rozmiaru pliku, max 64k albo 128k. Wydaje mi się że już jest to naprawione, ale nie jestem pewien.
UsbAsp w trybie wolnym jest w stanie programować 'surowe' procesory taktowane 1Mhz RC. Jeśli najpierw ustawisz taktowanie na kwarc zewnętrzny, później ustawisz dzielnik, wypadkowa częstotliwość taktowania będzie ponad 1Mhz, więc zaprogramujesz uC. Pytanie tylko ile to zajmie.
Jeśli najpierw ustawisz dzielnik i małą częstotliwość taktowania generatorem RC, to łączność może się zerwać, ale (z własnego doświadczenia wiem) bascom + port LPT + najprostszy programator pasywny przeprogramuje nawet uC taktowanego 256hz (kwarc zegarkowy + dzielnik 128).
2) W uC Atmega169 tak się dzieje. Koniec resetu ładuje do rejestru dzielnika wartość wybraną fusami, a dalej uC może dowolnie zmieniać taktowanie. Niestety wejście w reset (i w tryb programowania) odbywa się bez zmiany rejestru dzielnika taktowania, więc lepiej nie kombinuj z zbyt dużym dzielnikiem.
3) Dlaczego Atmega2560 a nie coś z gatunku XMega?
UsbAsp w trybie wolnym jest w stanie programować 'surowe' procesory taktowane 1Mhz RC. Jeśli najpierw ustawisz taktowanie na kwarc zewnętrzny, później ustawisz dzielnik, wypadkowa częstotliwość taktowania będzie ponad 1Mhz, więc zaprogramujesz uC. Pytanie tylko ile to zajmie.
Jeśli najpierw ustawisz dzielnik i małą częstotliwość taktowania generatorem RC, to łączność może się zerwać, ale (z własnego doświadczenia wiem) bascom + port LPT + najprostszy programator pasywny przeprogramuje nawet uC taktowanego 256hz (kwarc zegarkowy + dzielnik 128).
2) W uC Atmega169 tak się dzieje. Koniec resetu ładuje do rejestru dzielnika wartość wybraną fusami, a dalej uC może dowolnie zmieniać taktowanie. Niestety wejście w reset (i w tryb programowania) odbywa się bez zmiany rejestru dzielnika taktowania, więc lepiej nie kombinuj z zbyt dużym dzielnikiem.
3) Dlaczego Atmega2560 a nie coś z gatunku XMega?
- siekierzyński
- Użytkownik
- Posty: 482
- Rejestracja: 01 cze 2010, 23:12
- Lokalizacja: Nareszcie Polska
2) Nie możesz programowo zmienić wartości fusów.
Fus CKDIV8 definiuje jaka wartość zostanie wpisana do dzielnik CLKPR w momencie resetu, tylko tyle. Po resecie możesz dowolnie manipulować rejestrem CLKPR i zmieniać dzielnik w zakresie 1-256, niezależnie od tego jaki dzielnik był ustawiony. Zatem CKDIV8 nie ogranicza taktowania uC i można go programowo obejść.
Więcej w dataszicie Atmela, w wersji 2549P–AVR–10/2012 jest to strona 50
Dla początkujących: atmega8, 16 i inne z pierwszej serii atmeg nie mają możliwości programowej zmiany dzielnika zegara. Tylko wybrane modele z średniej półki (np. atmega169) oraz najnowsze/najbardziej wypasione modele mają programowy dostęp do rejestru CLKPR.
Fus CKDIV8 definiuje jaka wartość zostanie wpisana do dzielnik CLKPR w momencie resetu, tylko tyle. Po resecie możesz dowolnie manipulować rejestrem CLKPR i zmieniać dzielnik w zakresie 1-256, niezależnie od tego jaki dzielnik był ustawiony. Zatem CKDIV8 nie ogranicza taktowania uC i można go programowo obejść.
Więcej w dataszicie Atmela, w wersji 2549P–AVR–10/2012 jest to strona 50
Dla początkujących: atmega8, 16 i inne z pierwszej serii atmeg nie mają możliwości programowej zmiany dzielnika zegara. Tylko wybrane modele z średniej półki (np. atmega169) oraz najnowsze/najbardziej wypasione modele mają programowy dostęp do rejestru CLKPR.
- siekierzyński
- Użytkownik
- Posty: 482
- Rejestracja: 01 cze 2010, 23:12
- Lokalizacja: Nareszcie Polska
Dwa wilki chodzą do o koła jednej owcy 

EDIT:
Udało mi się ogarnąć te przestawianie prędkości,
W pierw trzeba ustawić CLKPCE na 1, resztę rejestru na 0. potem w ciągu 4 cykli wyzerować CLKPCE ustawiając jednocześnie CLKPS na żądaną wartość.
i tym sposobem zblokowałem se procek, bo przestawiłem dzielnik na 256... Nie zrobiłem wiatms przed przestawieniem częstotliwości...
Podmiana procka nic nie daje i nic dziwnego. A ten 'enable serial downloading' tyczy się ISP i UART?
O tym wiemErtew pisze:Nie możesz programowo zmienić wartości fusów.
Chodzi Ci za pewne, że jeśli fusebit CKDIV8 jest 'włączone', to przy starcie ukontroler wpisuje wartość 0011 do CLKPS, którą potem dowolnie można zmieniać.Ertew pisze:Zatem CKDIV8 nie ogranicza taktowania uC i można go programowo obejść.
EDIT:
Udało mi się ogarnąć te przestawianie prędkości,
Kod: Zaznacz cały
Clkpr = 128
Clkpr = 0i tym sposobem zblokowałem se procek, bo przestawiłem dzielnik na 256... Nie zrobiłem wiatms przed przestawieniem częstotliwości...
Podmiana procka nic nie daje i nic dziwnego. A ten 'enable serial downloading' tyczy się ISP i UART?