Fuse ბიტები AVR მიკროკონტროლერში

როგორ ვიცით avr მიკროკონტროლერებში მეხსიერების სამი ელემენტია: პროგრამული მეხსიერება ე.წ. ფლეშ მეხსიერება, ოპერატიული მეხსიერება SRAM და მუდმივ მონაცემთა მეხსიერება EEPROM. მაგრამ გარდა ამისა კიდევ არის მეხსიერების ძალზე მცირე ნაწილი (სულ რამოდენიმე ბაიტი), რომელიც მიკროკონტროლერის პროგრამირებისთვის და მუშაობისთვის ძირითადი საკვანძო ფუნქციების კონფიგურაციისთვის გამოიყენება. მგალითად როდესაც მიკროკონტროლერთან პირველათ გიწევს შეხება, შეიძლება არც იცოდე და არც გაინტერესებდეს Fuse ბიტები, რადგან  Fuse ბიტების ყოველგვარი ცვლილების გარეშე კონტროლერს დააპროგრამებ და იმუშავებს კიდეც უპრობლემოთ. მაგრამ მუშაობისას შეინიშნება ერთი შეხედვით გარკვეული უცნაურობები, მაგ. იმისდა მიუხედავთ, რომ მიკროკონტროლერის მაქსიმალური ტაქტური სიხშირე არის 20MHz-მდე და მიერთებული გაქვს მაგალითად 8MHz-ის კვარცული  რეზონატორი, კონტროლერი მუშაობს მაინც 1MHz სიხშირით და იმპულსების პერიოდიც არ არის სტაბილური. ალბათ უკვე მიხვდით რომ სწორედ ამ შემთვევაში ვჭირდება Fuse ბიტების კონფიგურაცია, ანუ მიკროკონტროლერის დაპროგრამების წინ პირველ რიგში გადავაპროგრამებთ Fuse ბიტებს, სასურველი ტაქტური სიხშირის თუ გენერატორის ტიპის მითითებისთვის. დამწყებები ხშირად ერიდებიან Fuse ბიტების პროგრამირებას და გარკვეული შიშიც კი აქვთ (ზოგი ქირურგიულ ოპერაციასაც კი ადარებს), რასაც მართლაც აქვს გარკვეული საფუძველი, რადგან არასწორი კონფიგურაციის შემთხვევაში შეიძლება მთლიანათ დაკარგოთ მიკროკონტროლერზე წვდომა, ასე მოვკალი attiny ერთ ერთი პროგრამირების დროს სადღაც შეცდომით დავაყენე კონფიგურაცია და პროგრამატორი ვეღარ ხედავდა. გაცოცხლების შანსი არის რათქმა უნდა, უბრალოთ  ISP (In-System programmer) პროგრამატორი ვერ ხედავს, თორე პარალელური პროგრამატორით შეიძლება გადაკონფიგურირება, რისი აწყობაც ბევრს დაეზარება 1 დოლარიანი მიკროკონტროლერის გულისთვის. ქვემოთ ნაჩვენებია ძირითადი Fuse პიტები. (კონფიგურაციის პროცესს განვიხილავთ ATtiny2313-ის მაგალითზე, სხვა კონტროლერების კონფიგურაციის ბიტები მსგავსია, შეიძლება იყო მცირე განსხვავება.)

Bit Low High Extended
7 CKDIV8
Divide clock by 8
DWEN
debugWIRE Enable
6 CKOUT
Clock output
EESAVE
EEPROM memory is preserved through chip erase
5 SUT1
Select start-up time
SPIEN
Enable Serial programming and Data Downloading
4 SUT0
Select start-up time
WDTON
Watchdog Timer Always On
3 CKSEL3
Select Clock Source
BODLEVEL2
Brown-out Detector trigger level
2 CKSEL2
Select Clock Source
BODLEVEL1
Brown-out Detector trigger level
1 CKSEL1
Select Clock Source
BODLEVEL0
Brown-out Detector trigger level
0 CKSEL0
Select Clock Source
RSTDISBL
External reset disable
SELFPRGEN
Self Programming Enable

აუცილებელია დავიმახსოვროთ რომ კომფიგურაციის ბიტში 0 -ის ჩაწერა ნიშნავს რომ მოცემული ფუნქცია ნება დართულია, ხოლო 1-ის ჩაწერით ხდება ბიტის წაშლა.        High ბიტებს რომლებიც წითლათ არის ნაჩვენები უკეთესი იქნება თუ არ შევეხებით,  მგალითად SPIEN ბიტის გასუფთავებით (ერთიანის ჩაწერით) გავაკეთებთ იმას რომ  მიმდევრობითი ISP პროგრამირებისთვის მიკროკონტროლერი მიუწვდომელი გახდება და გადაპროგრამებას ვეღარ შევძლებთ პარალელური პროგრამატორის გარეშე, RSTDISBL ბიტის დაპროგრამებით (ანუ 0-ის ჩაწერით) მიკროკონტროლერის RESET პინს აღარ ექნება რესეტის ფუნქცია და ასევე შეუძლებელი გახდება პროგრამირება, ასევე DWEN ბიტის დაპროგრამებით (0-ის ჩაწერით) უქმდება DebugWire-ის ფუნქცია, რაც თავის მხრივ შეთავსებულია RESET პინთან და მივიღებთ იგივე შედეგს რაც RSTDISBL პინის დაპროგრამებით. ყავისფერათ ნაჩვენები ბიტების კონფიგურაცია შეიძლება, მაგრამ აუცილებელია სიბრთხილე, რომელიმე მოცემული ბიტის არამიზანმიმართული კონფიგურაციის შემთხვეაში, მიკროკონტროლერს ექნება გარკვეული პრობლემები მუშაობის დროს. მაგალითად EESAVE ბიტის დაპროგრამებით (0-ის ჩაწერით) მიუწვდომელი გახდება EEPROM-ის პროგრამირება, რაც რათქმაუნდა არარის სასურველი და აუცილებლობაც ნაკლებია, რომ როდისმე დაგჭირდეს მოდემული ფუქცია. SELFPRGEN ბიტის დაპროგრამებით (0-ის ჩაწერით) შესაძლებელი ხდება მიკროკონტროლერისთვის თვითპროგრამირების ფუნქციის ამოქმედება, ანუ გარკვეული ბრძანებებით შესაძლებელია ავტომატურად მოხდეს პროგრამულ მეხსიერებიდან კოდის ატვირთვა და ჩამოტვირთვა. WDTON ბიტი გამოიყენება Watchdog ტაიმერის ჩასართავად, მოცემული ბიტის დაყენების შემდეგ (0-ის ჩაწერით), Watchdog ტაიმერი იქნება მუდმივად ჩართული და გარკვეული პროგრამული კოდის არარსებობის შემთხვევაში, მიკროკონტროლერის დარესეტება (ჩამოიყრა) მოხდება მუდმივათ რაიმე პერიოდით. BODLEVEL  ბიტები შედარებით უწყინარია, მოცემული სამი ბიტით ხდება მითითება თუ კვების ძაბვის (Vcc) რომელ დონეზე მოხდეს Brown_out რესეტი.

BODLEVEL2..0 VCC
111 Brown-out დეტექტორი გაუქმებულია
110 1.8ვ
101 2.7ვ
100 4.3ვ

ყველაზე ხშირად გამოიყენება Low ბიტების კონფიგურაცია, რადგან სწორედ მოცემული ბიტებით ხდება მიკროკოტროლერისთვის მითითება თუ როგორი ტიპის გენერატორი გამოიყენოს ტაქტური იმპულსებისთვის და რა სიხშირეზე იმუშაოს. მაგალითად CKDIV8 ბიტის გაწმენდით (1-ის ჩაწერით), საშუალება გვეძლევა ვამუშაოთ კონტროლერი 1MHz -ზე მეტი  ტაქტური სიხშირით. ATtiny2313-ის შემთხვევაში, თავდაპირველათ შიდა გენერატორი (როდესაც ჯერ არ არის გადაპროგრამირებული Fuse ბიტები) მუშაობს 8MHz ტაქტურ სიხშირეზე. ამასთან ერთად ასევე დაპროგრამებულია  CKDIV8 ბიტი, რითაც ხდება ტაქტური სიხშირის გაყოფა 8ჯერ. შედეგათ ვიღებთ მიკროკონტროლერის ტაქტურ სიხშირეს 1MHz-ს. ამიტომ თუ გვინდა რომ კონტროლერი ვამუშაოთ 1MHz-ზე მეტი ტაქტური იმპულსებით, პირველრიგში სწორედ მოცემული ბიტი უნდა გავწმინდოთ (ჩავწეროთ 1-იანი).

SUT (Select start-up time) ბიტებით ხდება მიკროკონტროლერის ჩატვირთვის დრიოს შერჩევა.

CKOUT ბიტის დაყენებით საშუალება ვეძლევა კონტროლერის ერთ-ერთ პინზე გამოვიყვანოთ ტაქტური იმპულსები.

Fuse ბიტებიდან ველაზე ხშირად კომფიგურირებადი CKSEL ბიტებია, სწორედ მოცემული ბიტებით ხდება ტაქტური იმპულსების გენერატორის სიხშირის განსაზღვრა და გარე ტაქტური იმპულსების გენერატორისთვის, კვარცული ან კერამიკული რეზონატორის თუ RC გენერატორის მითითება.

 გენერატორს ტიპი და ტაქტური სიხშირე CKSEL3..0
გარე ტაქტური პიმულსების წყარო 0000
4MHz-იანი შიდა RC გენერატორი 0010
8MHz-იანი შიდა RC გენერატორი 0100
Watchdog გენერატორი 128kHz 0110
გარე კვარცული გენერატორი / კერამიკული რეზონატორი 1000 – 1111
რეზერვირებული 0001/0011/0101/0111

დასასრულს ავღნიშნოთ, რომ კონფიგურაცია ყოველთვის კარგი იქნება თუ დატაშიტის მიხედვით მოხდება, გარდა ამისა არსებობს Fuse ბიტების რამოდემიმე კალკულატორი მაგლითად AVR Fuse Calculator რაც საკმაოდ კარგი დამახმარე საშუალებაა სხვადასხვა ტიპის პროგრამა პროგრამატორების გამოყენების დროს (მაგ. PonyProg, avrdude).

დამხმარე რესურსები

1. Fuse-биты – это не страшно.

2. Connecting External Crystal Oscillator to Atmega

3. Starting out with avrdude

4. ATtiny2313 Datasheet

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: