====== Fusebity ====== Jak zaznaczałem wielokrotnie zabawa fusebitami może skutecznie zablokować nasz układ. Jednak są one bardzo ważne. Jeżeli otworzymy stronę [[http://www.engbedded.com/fusecalc/]] i wybierzemy układ Atmega8A zobaczymy taką listę **Opcje podkreślone mogą zablokować programowanie układu! Należy je sprawdzić 3 razy przed programowaniem**: \\ {{ :pl:avrc:art:fusebits.jpg }}\\ Po kolei objaśniam znaczenie wszystkich pól wyboru: ^ Pierwsza lista - lista wyboru źródła sygnału taktującego ^ |Ext. Clock - Sygnał zegarowy doprowadzamy do pinu XTAL1, XTAL2 nie podłączony (z jakiegoś generatora)| |**Int. RC Osc. - Sygnał z wewnętrznego oscylatora RC [opcja domyślna]**| |Ext. RC Osc. - Sygnał z zewnętrznego oscylatora RC.| |** Ext. Crystal - Sygnał z zewnętrznego oscylatora kwarcowego.**| ^__Brown-out detection enabled__ ^ |Jeżeli zaznaczymy to pole w układzie zostanie aktywowany układ monitorujący napięcie zasilania. Jeżeli spadnie ono do określonego poziomu, układ wejdzie w stan resetu który zostanie zwolniony dopiero po ponownym uzyskaniu wymaganego napięcia.| ^__Brown-out...__^ |Wybieramy czy układ ma pracować od napięcia zasilania 2.7 czy 4 [V].| ^__Boot Reset vector Enabled__ ^ | Zaznaczamy jeżeli układ posiada bootloader.| ^__Boot Flash ...__ ^ | Wybieramy pozycję bootloadera w pamięci.| ^__Preserve EEPROM memory through the Chip Erase cycle__ ^ | Operacja kasowania układu nie będzie kasowała zawartości pamięci EEPROM.| ^__CKOPT fuse (operation dependent of CKSEL fuses)__ ^__Serial program downloading (SPI) enabled__ ^ | Odczyt programu z układu możliwy tylko jeżeli ta opcja jest aktywna.| ^__Watch-dog Timer always on__ ^ | Jeżeli to zaznaczymy to watchdog będzie aktywowany po resecie.| ^__Reset Disabled (Enable PC6 as i/o pin)__ ^ | W małych układach pinów IO jest mało, możemy użyć pinu nr 1 jako portu we/wy ale tracimy możliwość programowania| Na razie zrozumienie wszystkich wymienionych opcji nie jest konieczne. ===== Zmiana częstotliwości taktowania wewnętrznego generatora RC ===== W sekcji __Current Settings__ możemy zobaczyć wartości fusebitów oraz linię komendy dla AVRDude. Wartości domyślne to: LO 0xE1 HI 0xD9.\\ Zmieńmy na pierwszej liście częstotliwość na 8 [MHz] z wewnętrznego generatora RC (z +64 ms startup). Powinniśmy zobaczyć: -U lfuse:w:0xe4:m -U hfuse:w:0xd9:m A więc programujemy! avrdude -pm8 -cusbasp -U lfuse:w:0xe4:m -U hfuse:w:0xd9:m Ponieważ układy AVR mają moc obliczeniową 1 MIPS na 1 MHz po tej operacji mamy 8x większą moc obliczeniową! ===== Taktowanie zewnętrznym generatorem kwarcowym ===== Ponieważ wewnętrzny generator RC nie oferuje dużych częstotliwości taktowania a co gorsza jest niestabilny. Jeżeli będziemy pracować z interfejsami wymagającymi stabilnego taktowania (np USART) nie możemy opierać się na wewnętrznym generatorze.\\ {{:pl:avrc:art:cap_quartz.jpg|}} \\ Kondensatory jakie należy zastosować powinny mieć wartość 10 lub 22 [pF]. Zastosowanie oscylatora kwarcowego pozbawia nas jednak 2 portów IO. Aby układ zaczął pracować z oscylatorem należy zaprogramować fusebity analogicznie jak w powyższym przykładzie wybierając odpowiednie źródło. Zagadnieniom taktowania poświęcona jest cała sekcja 8 noty katalogowej __System Clock and Clock Options__. ====== avr libc ====== Po pierwsze i najważniejsze, dokumentacja [[http://www.nongnu.org/avr-libc/user-manual/index.html]]\\ AVR-libc jest częścią łańcucha narzędzi GNU, dostarcza funkcje z [[wp>C_standard_library|standardowej biblioteki C]] oraz funkcje specyficzne dla układów AVR. Warto zapoznać się z listą modułów na stronie [[http://www.nongnu.org/avr-libc/user-manual/modules.html]] ===== Nagłówki ===== Kilka modułów specyficznych dla AVR z którymi warto się zapoznać: ^ Nagłówek ^ Opis ^ | '''' | Podstawowy nagłówek. Zawiera definicje wszystkich rejestrów układu | | '''' | Dostarcza funkcji opóźniających w [ms] i [us] | | '''' | Zawiera definicje podstawowych typów danych oraz wartości maksymalnych/minimalnych | | '''' | Makra i narzędzia do obsługi przerwań | | '''' | Dostarcza makra do obliczania ustawień transmisji szeregowej | | '''' | Obsługa pamięci EEPROM | | '''' | Narzędzia do odczytu danych z pamięci programu | | '''' | Zarządzanie zasilaniem wewnętrznych układów procesowa | | '''' | Funkcje pozwalające wprowadzić procesor w tryb uśpienia | | '''' | Obsługa sprzętowego watchdoga | | '''' | Obliczenia CRC((CRC - Cyclic Redundancy Check: Cykliczny kod nadmiarowy, system sum kontrolnych wykorzystywany do wykrywania przypadkowych błędów pojawiających się podczas przesyłania i magazynowania danych binarnych.)) dla kontroli transmisji | | '''' | Dostarcza makro obliczające parzystość zmiennej | | '''' | Narzędzia do transmisji TWI((TWI - Two Wire Interface lub I²C - Inter Integrated Circuit)) | ====== Informacje dodatkowe ====== * [[http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf|Atmel AVR042: AVR Hardware Design Considerations]] - Nota aplikacyjna omawiająca zagadnienia: poprawnego zasilania, poprawnego podłączenia linii reset, interfejsu SPI do programowania oraz używania zewnętrznych oscylatorów.