User Tools

Site Tools


pl:avrc:art:0x05

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:
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.
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.

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 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 CRC1) dla kontroli transmisji
<util/parity.h> Dostarcza makro obliczające parzystość zmiennej
<util/twi.h> Narzędzia do transmisji TWI2)

Informacje dodatkowe

1)
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.
2)
TWI - Two Wire Interface lub I²C - Inter Integrated Circuit
pl/avrc/art/0x05.txt · Last modified: 2012/11/17 20:03 by mkucia