User Tools

Site Tools


pl:avrc:art:0x05

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pl:avrc:art:0x05 [2012/09/29 13:46] – created mkuciapl:avrc:art:0x05 [2012/11/17 20:03] (current) mkucia
Line 1: Line 1:
 +====== 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ć: <code>-U lfuse:w:0xe4:m -U hfuse:w:0xd9:m</code> A więc programujemy! <code>avrdude -pm8 -cusbasp -U lfuse:w:0xe4:m -U hfuse:w:0xd9:m</code> 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 ^
 +| ''<avr/io.h>'' | Podstawowy nagłówek. Zawiera definicje wszystkich rejestrów układu |
 +| ''<util/delay.h>'' | Dostarcza funkcji opóźniających w [ms] i [us] |
 +| ''<stdint.h>'' | Zawiera definicje podstawowych typów danych oraz wartości maksymalnych/minimalnych |
 +| ''<avr/interrupt.h>'' | Makra i narzędzia do obsługi przerwań |
 +| ''<util/setbaud.h>'' | Dostarcza makra do obliczania ustawień transmisji szeregowej |
 +| ''<avr/eeprom.h>'' | Obsługa pamięci EEPROM |
 +| ''<avr/pgmspace.h>'' | Narzędzia do odczytu danych z pamięci programu |
 +| ''<avr/power.h>'' | Zarządzanie zasilaniem wewnętrznych układów procesowa  |
 +| ''<avr/sleep.h>'' | Funkcje pozwalające wprowadzić procesor w tryb uśpienia |
 +| ''<avr/wdt.h>'' | Obsługa sprzętowego watchdoga |
 +| ''<util/crc16.h>'' | 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 |
 +| ''<util/parity.h>'' | Dostarcza makro obliczające parzystość zmiennej |
 +| ''<util/twi.h>'' | 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.