AVR 2560 CLKPS3:0 i CKDIV8 oraz 18,432MHz i programowanie

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
siekierzyński
Użytkownik
Posty: 486
Rejestracja: 01 cze 2010, 23:12
Lokalizacja: Nareszcie Polska

AVR 2560 CLKPS3:0 i CKDIV8 oraz 18,432MHz i programowanie

Post autor: siekierzyński » 16 lis 2014, 23:48

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.

Awatar użytkownika
Ertew
Użytkownik
Posty: 1418
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 17 lis 2014, 12:36

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?

Awatar użytkownika
siekierzyński
Użytkownik
Posty: 486
Rejestracja: 01 cze 2010, 23:12
Lokalizacja: Nareszcie Polska

Post autor: siekierzyński » 17 lis 2014, 13:20

3)

1. Nie mam jeszcze żadnego praktycznego doswiadczenia z tym prockiem
2. Układ mam zmontowany i szkoda mi czasu na przelutowanie ok. 90 przewodów. a do sylwestra zostalo nie dużo czasu.

2) Mi chodzi o zdjęcie dzielnika czyli z dzielenie przez 8 żeby dzielił przez 1, czyli bez dzielnika.

Awatar użytkownika
Ertew
Użytkownik
Posty: 1418
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 17 lis 2014, 22:10

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.

Awatar użytkownika
siekierzyński
Użytkownik
Posty: 486
Rejestracja: 01 cze 2010, 23:12
Lokalizacja: Nareszcie Polska

Post autor: siekierzyński » 17 lis 2014, 22:36

Dwa wilki chodzą do o koła jednej owcy :-)
Ertew pisze:Nie możesz programowo zmienić wartości fusów.
O tym wiem :-)
Ertew pisze:Zatem CKDIV8 nie ogranicza taktowania uC i można go programowo obejść.
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ć.

EDIT:

Udało mi się ogarnąć te przestawianie prędkości,

Kod: Zaznacz cały

Clkpr = 128
Clkpr = 0
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?

ODPOWIEDZ