თვითპროგრამირება ავრ. რა არის საჭირო მიკროკონტროლერების დასაპროგრამებლად? სად და როგორ ვისწავლოთ


თანამედროვე სამოყვარულო რადიოს წარმოდგენა შეუძლებელია მიკროკონტროლერების გარეშე და ეს აშკარაა. ბოლო ათწლეულების განმავლობაში, სხვადასხვა მწარმოებლის მიკროკონტროლერები ფართოდ გავრცელდა ადამიანის საქმიანობის სხვადასხვა სფეროში. ისინი ხშირად გვხვდება ყველაზე მოულოდნელ მოწყობილობებსა და დიზაინებში. მე და შენ ვართ მოწმენი ჩვენს ირგვლივ მიმდინარე პროცესების კომპიუტერიზაციისა და ავტომატიზაციის. სიმართლე ის არის, რომ პროგრამირების საფუძვლების ცოდნის გარეშე, თითქმის შეუძლებელი გახდა თანამედროვე კონკურენტუნარიანი მოწყობილობების შექმნა...

თუ ამ სტატიას კითხულობთ, ალბათ გაგიჩნდებათ სურვილი გაიგოთ როგორ მუშაობენ მიკროკონტროლერები და, სავარაუდოდ, გაქვთ შეკითხვები:

4. რა ლიტერატურა უნდა შევისწავლო?

შევეცადოთ ამ კითხვებზე პასუხის გაცემა.

1. რომელი მიკროკონტროლერი ავირჩიო სამუშაოსთვის?

8-ბიტიანი მიკროკონტროლერები ძალიან პოპულარულია რადიომოყვარულებში. PICმიკროჩიპის ტექნოლოგია და AVRატმელი, 16 ბიტიანი MSP430 TI-დან, ასევე 32-ბიტიანი მიკროკონტროლერებიდან, არქიტექტურებიდან ARM.

ინდუსტრიაში, გარკვეულწილად განსხვავებულად, პირველ ადგილს იკავებს დიდი ზღვარი რენესას ელექტრონიქსიმეორეზე Freescale, მესამეზე სამსუნგი, მაშინ წადი მიკროჩიპიდა თ.ი., შემდეგ ყველა დანარჩენი.
პოპულარობა განისაზღვრება ფასითა და ხელმისაწვდომობით; ტექნიკური ინფორმაციის ხელმისაწვდომობა და პროგრამული უზრუნველყოფის მხარდაჭერის ღირებულება მნიშვნელოვან როლს თამაშობს.

შევისწავლით 8-ბიტიან AVR მიკროკონტროლერებს, ოჯახებს ATMEGA 8 და 16 სერიები. არჩევანი განისაზღვრა, ისევ ხელმისაწვდომობით, მრავალი სამოყვარულო განვითარების არსებობით და საგანმანათლებლო მასალის უზარმაზარი რაოდენობით. ამ ოჯახის სხვადასხვა ჩაშენებული კომპონენტების არსებობა და ფუნქციონირება.

2. განვითარების რომელი გარემო გამოვიყენო არჩეული მიკროკონტროლერის დასაპროგრამებლად?

AVR-სთვის შეიქმნა სხვადასხვა ინტეგრირებული განვითარების გარემო (IDE, ინტეგრირებული განვითარების გარემო).
IDEარის პროგრამული სისტემა, რომელსაც იყენებენ პროგრამისტები პროგრამული უზრუნველყოფის შესაქმნელად, რომელიც მოიცავს:
ტექსტის რედაქტორი,
შემდგენელი და/ან თარჯიმანი,
შეკრების ავტომატიზაციის ხელსაწყოები,
გამართვა

ყველაზე გავრცელებული AVRStudio, ATmelStudio, WINAVR, CodeVision, IAR ჩაშენებული სამუშაო მაგიდა.
პროგრამების დასაწერად ჩვენ გამოვიყენებთ უფასოს IDE ATmelStudio ვერსია 6და უფრო მაღალი.
თქვენ შეგიძლიათ ჩამოტვირთოთ Atmel Studio ოფიციალური ვებგვერდიდან რეგისტრაციის შემდეგ (რეგისტრაცია აბსოლუტურად უფასოა და არაფერზე არ გავალდებულებთ!)

ATmelStudio გაძლევთ საშუალებას შექმნათ პროექტები და დაწეროთ პროგრამები როგორც ასამბლერში, ასევე SI-ში.

თავიდან ყოველთვის ჩნდება კითხვა: რა პროგრამირების ენა უნდა ავირჩიო ეფექტური პროგრამების დასაწერად?

ჩემი პასუხი მარტივია: თქვენ უნდა შეძლოთ წერა მინიმუმ ორ ენაზე: ასამბლეის და SI. ასამბლეის ენა უბრალოდ აუცილებელია, როდესაც გჭირდებათ სწრაფი და კომპაქტური ქვეპროტეილებისა და მაკროების და სხვადასხვა მოწყობილობის დრაივერების დაწერა. მაგრამ, როდესაც თქვენ გჭირდებათ კომპლექსურ ალგორითმებზე აგებული დიდი პროექტის შექმნა, SI-ს ცოდნის გარეშე, ბევრი დრო შეიძლება დაიხარჯოს, განსაკუთრებით გამართვის პროცესში, და თუ არსებობს მისი სხვა პლატფორმაზე გადატანის სურვილი, მაგალითად PIC18. , ან STM, ის შეიძლება გადაუჭრელ პრობლემად იქცეს.
გარდა ამისა, ახლა გამოჩნდა აპარატურის გამოთვლითი პლატფორმები არდუინო, რომელთანაც მუშაობა მოითხოვს SI++ ენის ცოდნას.
ამიტომ, ჩვენ დავწერთ პროგრამებს როგორც ასამბლერში, ასევე SI-ში.

იმისათვის, რომ ნათლად ნახოთ თქვენი მუშაობის შედეგი შედუღების რკინის ან პურის დაფის გამოყენების გარეშე, უბრალოდ დააინსტალირეთ პროგრამა პროტეუსი.

3. როგორ გავანათოთ კონტროლერი და რა დამატებითი მოწყობილობები და აქსესუარებია საჭირო მათთან მოსახერხებელი მუშაობისთვის?

ჩვენ ვიყენებთ Datagorian-ს. გარდა ამისა, თქვენ უნდა შეიძინოთ პურის დაფები და ელექტრომომარაგება გამომავალი ძაბვით 5 ვოლტი. თქვენ შეგიძლიათ გამოიყენოთ იგი როგორც დაბალი ტალღის დენის წყარო 5 ვოლტიანი ზენერის დიოდის გამოყენებით.
შესაძლოა, დროთა განმავლობაში მე და იგორი შემოგთავაზოთ პროექტი გამართვის დაფის აწყობისთვის.

4. რა ლიტერატურა უნდა შევისწავლო?

მაგრამ, მაგალითად:
AVR-ის პრაქტიკული პროგრამირება ასამბლერში. რევიჩი, 2011 წ
1000 და ერთი მიკროკონტროლერის წრე ტ. 1-2. რიუმიკი, 2010-2011 წწ
10 პრაქტიკული მოწყობილობა AVR MK Book 1-2-ზე. კრავჩენკო, 2008-2009 წწ
გაკვეთილი მოწყობილობის დეველოპერისთვის AVR MK-ის გამოყენებით. ბელოვი, 2008 წ
MK AVR ოჯახები Tiny და Atmega. ეფსტიფეევი, 2008 წ
CodeVisionAVR. სახელმძღვანელო დამწყებთათვის. ლებედევი, 2008 წ
მოწყობილობების, ტირისტორების, რელეების მიკროპროცესორული კონტროლი. ბელოვი, 2008 წ
ანალოგური ინტერფეისები MK. სტიუარდი, ბურთი, 2007 წ
ჩვენ ვქმნით მოწყობილობებს AVR MK-ზე. ბელოვი, 2007 წ
MK AVR სამოყვარულო რადიო პრაქტიკაში. ATTINY2313-ის სრული ანალიზი. ბელოვი, 2007 წ
ქსელისა და ინტერნეტის მონაცემთა გაცვლა MK-თან. წადი, 2007 წელი
MK AVR. სემინარი დამწყებთათვის. ჰარტოვი, 2007 წ
AVR სქემების, ალგორითმების, პროგრამების გამოყენება. ბარანოვი, 2006 წ
AVR მიკროკონტროლერები. შესავალი კურსი. მორტონი, 2006 წ
გაზომვა, კონტროლი და რეგულირება AVR გამოყენებით. ტრამპპერტი, 2006 წ
პროგრამირება C ენაზე AVR და PIC MK-სთვის. შპაკი, 2006 წ
მოწყობილობების დიზაინი MK-ზე. ბელოვი, 2005 წ
MK - ეს მარტივია, ტომი 1-3. ფრუნზე, 2002-2003 წწ
C პროგრამირების ენა, მე-2 გამოცემა. კერნიგანი, რიჩი, 2009 წ
ATMEL მიკროკონტროლერების დაპროგრამება ენაზე S. Prokopenko, 2012 წ

5. ინტერნეტში სად შეიძლება კითხვების დასმა და კონკრეტული პასუხების მიღება?

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

ახლა მოდით უფრო ახლოს მივხედოთ ჩვენს ფავორიტს, ATMEGA 8 მიკროკონტროლერს

8-ბიტიანი, მაღალი ხარისხის, დაბალი სიმძლავრის AVR მიკროკონტროლერი
პროგრესული RISC არქიტექტურა
130 მაღალი ხარისხის ინსტრუქცია, ინსტრუქციების უმეტესობა შესრულებულია ერთი საათის ციკლში
32 8-ბიტიანი ზოგადი დანიშნულების სამუშაო რეგისტრი
სრულიად სტატიკური ოპერაცია
შესრულება უახლოვდება 16 MIPS-ს (16 MHz საათის სიჩქარით)
ჩამონტაჟებული 2-ციკლიანი მულტიპლიკატორი

არასტაბილური პროგრამა და მონაცემთა მეხსიერება
8 KB სისტემური თვითპროგრამირებადი ფლეშ მეხსიერება
გთავაზობთ 1000 წაშლის/ჩაწერის ციკლს
დამატებითი ჩატვირთვის კოდის სექტორი დამოუკიდებელი საკეტით
უზრუნველყოფს ერთდროულად წაკითხვის/ჩაწერის რეჟიმს (Read-While-Write)
512 ბაიტი EEPROM
გთავაზობთ 100000 წაშლის/ჩაწერის ციკლს
1 KB ჩიპზე SRAM
პროგრამირებადი ჩაკეტვა მომხმარებლის პროგრამული უზრუნველყოფის დასაცავად

ჩაშენებული პერიფერიული მოწყობილობები
ორი 8-ბიტიანი ტაიმერი/მრიცხველი ცალკე პრესკალერით, ერთი შედარების რეჟიმით
ერთი 16-ბიტიანი ტაიმერი/მრიცხველი ცალკე პრესკალერით და გადაღების და შედარების რეჟიმებით
რეალურ დროში მრიცხველი ცალკე გენერატორით
სამი PWM არხი
8-არხიანი A/D კონვერტორი (TQFP და MLF)
6 არხი 10 ბიტიანი სიზუსტით
6-არხიანი ანალოგური ციფრული გადამყვანი (PDIP პაკეტში)
4 არხი 10 ბიტიანი სიზუსტით
2 არხი 8 ბიტიანი სიზუსტით
ბაიტებზე ორიენტირებული 2 მავთულის სერიული ინტერფეისი
პროგრამირებადი სერიული USART
სერიული ინტერფეისი SPI (master/slave)
პროგრამირებადი მცველი ტაიმერი ცალკე ჩაშენებული ოსცილატორით
ჩამონტაჟებული ანალოგური შედარებითი

მიკროკონტროლერის სპეციალური ფუნქციები
ჩართვის გადატვირთვა და პროგრამირებადი გაფუჭების გამოვლენა
ჩამონტაჟებული კალიბრირებული RC ოსცილატორი
შიდა და გარე შეფერხების წყაროები
დაბალი მოხმარების ხუთი რეჟიმი: უმოქმედო, ენერგიის დაზოგვა, გამორთვა, ლოდინი და ADC ხმაურის შემცირება

I/O ქინძისთავები და კორპუსები
23 პროგრამირებადი I/O ხაზი
28-პინიანი PDIP პაკეტი, 32-პინიანი TQFP პაკეტი და 32-პინიანი MLF პაკეტი

ოპერაციული ძაბვები
2.7 - 5.5 ვ (ATmega8L)
4,5 - 5,5 ვ (ATmega8)

ოპერაციული სიხშირე
0 - 8 MHz (ATmega8L)
0 - 16 MHz (ATmega8)

განსხვავებები ATMEGA16-სა და 8-ს შორის
16 KB სისტემური თვითპროგრამირებადი ფლეშ მეხსიერება

JTAG ინტერფეისი (IEEE 1149.1 თავსებადი)
პერიფერიული სკანირების შესაძლებლობა შეესაბამება JTAG სტანდარტს
გაფართოებული მხარდაჭერა ჩაშენებული გამართვისთვის
პროგრამირება JTAG ინტერფეისით: Flash, EEPROM მეხსიერება, ჯემპრები და დაბლოკვის ბიტები

ოთხი არხი PWM/PWM

8-არხიანი 10-ბიტიანი ანალოგური ციფრული გადამყვანი
8 გაუწონასწორებელი არხი
7 დიფერენციალური არხი (მხოლოდ TQFP პაკეტი)
2 დიფერენციალური არხი პროგრამირებადი მომატებით 1x, 10x ან 200x (მხოლოდ TQFP პაკეტი)

ექვსი დაბალი მოხმარების რეჟიმი: უმოქმედო, ენერგიის დაზოგვა, გამორთვა, ლოდინი, გაფართოებული ლოდინი და ADC ხმაურის შემცირება

32 პროგრამირებადი I/O ხაზი

40-პინიანი PDIP პაკეტი და 44-პინიანი TQFP პაკეტი

AtmelStudio

თუ ახლახან იწყებთ, მაშინ უნდა ჩამოტვირთოთ და დააინსტალიროთ AtmelStudio პროგრამა ოფიციალური გვერდიდან atmel.com
AtmelStudio პროგრამის დაყენების შემდეგ შეგიძლიათ დაიწყოთ პროექტის შექმნა.
პროექტი- ეს არის თქვენი პროგრამა, რომელსაც ჩაწერთ, გამართავთ და გამოანათებთ, კომპილაციის შემდეგ, მიკროკონტროლერის მეხსიერებაში.

პროექტის შესაქმნელად, თქვენ უნდა გახსნათ პროგრამა, გამოჩნდება შემდეგი ეკრანმზოგი,

და გაიხსნება პროექტის შექმნის გვერდი

ახალი პროექტის შესაქმნელად, თქვენ უნდა დააჭიროთ "Ახალი პროექტი..."
ამ შემთხვევაში, გაიხსნება ახალი ფანჯარა, სადაც შეგიძლიათ აირჩიოთ პროგრამირების ენა, პროექტის სახელი, მისი მდებარეობა, პაკეტის სახელი პროექტის ფაილებით და სხვა ჯვარედინი პროექტებში შემდგომი გამოყენებისთვის დირექტორიის შექმნის შესაძლებლობა. . პროექტის შესაქმნელად, სადაც დავაპროგრამებთ ასამბლერში, უნდა აირჩიოთ - ასამბლერი, ამის შემდეგ ვცვლით პროექტის სახელს, მის მდებარეობას და ვირჩევთ ᲙᲐᲠᲒᲘ.

შემდეგი ფანჯარა გამოჩნდება

აირჩიეთ "megaAVR, 8-bit"და ვიპოვეთ ჩვენთვის საჭირო მიკროკონტროლერი, ჩვენ ავირჩიეთ ATmega8.ეკრანმზოგის მარჯვენა მხარეს გამოჩნდება მოწყობილობების სია, რომლებიც მუშაობენ ამ მიკროკონტროლერთან, რომელთაგან ერთ-ერთი ჩვენ შეგვიძლია დავაკავშიროთ. აირჩიეთ ᲙᲐᲠᲒᲘ.

ჩნდება ტექსტის რედაქტორის გვერდი, რომელიც საშუალებას გაძლევთ შეცვალოთ და გამართოთ პროგრამა. სანამ გვერდი ცარიელია, მითითებულია შექმნის დრო და თარიღი და პროექტის ფაილის სახელი, მომხმარებლის სახელი. არის დამატებითი I/O მოწყობილობების ფანჯარა და პროგრამის შედგენის ანგარიშების ფანჯარა. ახლა ჩვენ


ჩვენ შეგვიძლია დავაპროგრამოთ ასამბლერში.
ანალოგიურად იქმნება SI ენაზე პროგრამირების პროექტი.

მახასიათებლები:

  • AVR109 აპლიკაციის მაგალითის კოდი მოთავსებულია ნებისმიერი AVR მიკროკონტროლერის ჩატვირთვის ბლოკში
  • წაიკითხეთ და ჩაწერეთ EEPROM და Flash მეხსიერება
  • იყენებს AVRProg პროტოკოლს
  • უსაფრთხოების ბიტების კითხვა და წერა

შესავალი

აპლიკაციის ეს მაგალითი აღწერს, თუ როგორ უნდა დააკონფიგურიროთ AVR მიკროკონტროლერები თვითპროგრამისთვის Save Program Memory (SPM) ბრძანებების გამოყენებით. AVR მიკროკონტროლერებს შეუძლიათ UART-ის საშუალებით დაუკავშირდნენ პერსონალურ კომპიუტერებს, რომლებიც მუშაობენ AVRprog პროგრამირების პროგრამაში. ეს საშუალებას გაძლევთ დაპროგრამოთ მიკროკონტროლერები Flash და EEPROM მეხსიერებით გარე აპარატურის პროგრამისტის დახმარების გარეშე.

ჩამტვირთავი პროგრამა მდებარეობს ფლეშ მეხსიერების ჩატვირთვის ზონაში. ეს პროგრამა ამყარებს კომუნიკაციას მასპინძელ პერსონალურ კომპიუტერთან და ხელს უწყობს მიკროკონტროლერის Flash და EEPROM მეხსიერების დაპროგრამებას. დაპროგრამების შემდეგ, დაცვის სხვადასხვა დონე შეიძლება ინდივიდუალურად იქნას გამოყენებული აპლიკაციის პროგრამის ჩატვირთვის და Flash მეხსიერების დასაპროგრამებლად. ამრიგად, AVR მიკროკონტროლერებს აქვთ უნიკალური უნარი უზრუნველყონ სხვადასხვა ხარისხის დაცვა ჩიპზე არსებული მეხსიერების ზონებისთვის.

SPM დისკუსია

ქვემოთ მოცემულია სხვადასხვა მოსაზრებები AVR მიკროკონტროლერების თვითპროგრამირების უნარის უკეთ გასაგებად.

მეხსიერების ორგანიზაცია

AVR მიკროკონტროლერების Flash მეხსიერება იყოფა ორ სფეროდ: აპლიკაციის პროგრამის განყოფილება და ჩამტვირთველი პროგრამის განყოფილება. აპლიკაციის პროგრამის ზონა შეიცავს ძირითადი აპლიკაციის პროგრამის კოდს, ხოლო ჩატვირთვის ზონა შეიცავს პროგრამის კოდს, რომელიც საშუალებას აძლევს მიკროკონტროლერის თვითდაპროგრამებას. SPM ბრძანებების შესრულება შესაძლებელია მხოლოდ ჩატვირთვის ზონიდან. (შენიშვნა: თუმცა, ჩატვირთვის ზონა შეიძლება გამოყენებულ იქნას როგორც ჩვეულებრივი აპლიკაციის მეხსიერება.)

ფლეშ მეხსიერება დაყოფილია გვერდებად, თითოეული შეიცავს 32, 64 ან 128 სიტყვას. გვერდების დანიშნულება და გამოყენება მოგვიანებით იქნება ახსნილი. მთელი მეხსიერება (როგორც აპლიკაციის პროგრამის, ასევე ჩამტვირთველის მეხსიერება) დაყოფილია გვერდებად. მაგალითად, მიკროკონტროლერს, რომელსაც აქვს 8 კილობაიტი Flash მეხსიერება და გვერდის ზომა 32 სიტყვა (64 ბაიტი) ექნება 128 გვერდი. მეხსიერების ორგანიზაცია ნაჩვენებია სურათზე 1.

სურათი 1. მეხსიერების ორგანიზაცია

ჩამტვირთველის მეხსიერების არეალის ზომა შეიძლება დაყენდეს ორი სპეციალური კონფიგურაციის ბიტის BOOTSZx გამოყენებით. ისინი საშუალებას გაძლევთ აირჩიოთ ჩამტვირთველის მეხსიერების არეალის ოთხი შესაძლო ზომადან ერთი. BOOTSZx ბიტების დაყენება შესაძლებელია სერიული ან პარალელური პროგრამისტის გამოყენებით. ეს უფრო დეტალურად არის განხილული AVR მიკროკონტროლერების ტექნიკურ აღწერილობაში.

თუ ჩამტვირთავი დანერგილია, მისი გამოძახება შესაძლებელია აპლიკაციის პროგრამიდან Call ან Jump ბრძანებების შესრულებით ან სპეციალური კონფიგურაციის ბიტის BOOTRST-ის დაყენებით. თუ BOOTRST ბიტი დაყენებულია, მაშინ ყოველი გადატვირთვის შემდეგ მიკროკონტროლერი, იმის ნაცვლად, რომ გადავიდეს პროგრამის შესრულებაზე დაწყებული სააპლიკაციო პროგრამის მეხსიერების მისამართიდან ნულიდან, ახორციელებს ჩატვირთვის პროგრამას, რომელიც მდებარეობს ჩამტვირთველის ზონაში. BOOTRST ბიტი შეიძლება შეიცვალოს პარალელური ან სერიული პროგრამისტის გამოყენებით.

წაკითხვის-ჩაწერის შესაძლებლობა

მეხსიერების შერჩევითი დაყოფის გარდა აპლიკაციისა და ჩატვირთვის მეხსიერებაში, ჩაშენებული Flash მეხსიერება ასევე იყოფა ორ ნაწილად ფიქსირებული ზომებით. პირველი სექცია არის წაკითხვა-ჩაწერის (RWW) განყოფილება. მეორე არის წაკითხვადი-ჩაწერის (NRWW) დანაყოფი. NRWW დანაყოფის ზომა ყოველთვის უდრის ჩამტვირთველის მეხსიერების ყველაზე დიდი შესაძლო ფართობის ზომას. აქედან გამომდინარე, ჩამტვირთველის დანაყოფი იკავებს მთელ NRWW დანაყოფს ან მხოლოდ მის ნაწილს. მეხსიერების დაყოფა RWW და NRWW სექციებად ნაჩვენებია სურათზე 2.


სურათი 2. მეხსიერების დაყოფა RWW და NRWW დანაყოფებად

განსხვავება ამ სექციებს შორის არის ის, რომ NRWW განყოფილება ხელმისაწვდომია RWW განყოფილების განახლებისას. RWW განყოფილების წვდომა შეუძლებელია განახლების დროს. როდესაც NRWW განყოფილება განახლდება (მაგალითად, თავად ჩამტვირთველის კოდის განახლებით), გამოთვლითი ბირთვი ჩერდება. სხვა სიტყვებით რომ ვთქვათ, არ არის შესაძლებელი წაკითხვა NRWW განყოფილების წერისას, მაგრამ შესაძლებელია წაკითხვა RWW განყოფილების წერისას. ეს უფრო დეტალურად არის განხილული მიკროკონტროლერების ტექნიკურ აღწერილობაში.

ეს ფუნქცია აპლიკაციას საშუალებას აძლევს განაგრძოს შესრულება, როდესაც განახლდება RWW განყოფილება. გთხოვთ გაითვალისწინოთ, რომ ამ პროგრამის კოდი უნდა იყოს შეტანილი NRWW განყოფილებაში (აუცილებლად არ არის ჩამტვირთველის განყოფილებაში). ეს უფრო დეტალურად განიხილება ქვემოთ განყოფილებაში, რომელიც აღწერს შეფერხებებს.

ATmega163 და ATmega323 მიკროკონტროლერებს არ აქვთ NRWW და RWW სექციები - მათ აქვთ მხოლოდ დაყოფა ჩამტვირთავ მეხსიერებად და აპლიკაციის პროგრამის მეხსიერებად. ამ მიკროკონტროლერების Flash მეხსიერების ნებისმიერი განახლება იწვევს მათი გამოთვლითი ბირთვის გაჩერებას.

SPM ბრძანების გამოყენებით

ყველა თვითპროგრამირების მოქმედება ხორციელდება SPM ბრძანების გამოყენებით. რეჟიმის შერჩევა ხორციელდება SPMCR რეესტრის გამოყენებით. ამ რეესტრის სტრუქტურა ნაჩვენებია სურათზე 3.

სურათი 3. SPMCR რეგისტრი

SPM ფუნქციის გამოყენებისას, SPMEN ბიტი უნდა იყოს დაყენებული არაუმეტეს ოთხი ციკლისა SPM ინსტრუქციის შესრულებამდე. ეს აუცილებელია Flash მეხსიერების უნებართვო განახლების თავიდან ასაცილებლად. აპლიკაციის პროგრამამ უნდა უზრუნველყოს, რომ არ მოხდეს შეფერხების რუტინების გამოძახება SPMEN ბიტის დაყენებასა და SPM ინსტრუქციის შესრულებას შორის. დანარჩენი ოთხი ბიტი, რომელიც ხაზგასმულია ფერში, აირჩიეთ SPM რეჟიმი. რეჟიმის დასასრულს, SPMEN ბიტი ავტომატურად აღდგება ფუნქციის ბიტთან ერთად. SPM ფუნქციები აღწერილია ქვემოთ.

წაშალე გვერდი

მთელი Flash მეხსიერება განახლებულია გვერდების მიხედვით. ახალი მონაცემების ჩაწერამდე გვერდი უნდა წაიშალოს.

Z რეგისტრი გამოიყენება წასაშლელი გვერდის შესარჩევად. იგი განკუთვნილია წაშლილი გვერდის ნომრის მითითებით. დაბალი რიგის ბიტები, რომლებიც ირჩევენ სიტყვას გვერდზე, იგნორირებულია. მაგალითად, მიკროკონტროლერში, რომელსაც აქვს გვერდის ზომა 32 სიტყვა (64 ბაიტი), Z რეგისტრის ყველაზე ნაკლებად მნიშვნელოვანი ექვსი ბიტი იგნორირებულია.

გვერდის წასაშლელად, თქვენ უნდა დააყენოთ PGERS და SPMEN ბიტები SPMCR რეესტრში და გასცეთ SPM ბრძანება.

სანამ გვერდზე ჩაწერთ ახალ მონაცემებს, გვერდის ბუფერი ჯერ უნდა წაიშალოს. გვერდის ბუფერი არის მხოლოდ ჩასაწერი, ცალკე, არა ოპერატიული მეხსიერება, რომელიც შეიცავს ერთ დროებით გვერდს. გვერდები უნდა შეიყვანოთ თანმიმდევრობით. გვერდის ბუფერის გადაწერა Flash მეხსიერებაში ხდება ერთი ოპერაციის დროს.

Z რეგისტრი გამოიყენება ბუფერში ჩასაწერი სიტყვის შესარჩევად. Z რეგისტრის LSB-ები იგნორირებულია, რადგან ყველა სიტყვა იწერება ერთ ოპერაციაში. ამრიგად, შეუძლებელია მხოლოდ ერთი ბაიტის არჩევა. გვერდის ბუფერის დაწერისას, Z რეგისტრის ყველაზე მნიშვნელოვანი ბიტები იგნორირებულია. Z რეგისტრის სტრუქტურა 32 სიტყვიანი (64 ბაიტი) გვერდიანი მიკროკონტროლერისთვის ნაჩვენებია სურათზე 4. უფრო დიდი ზომის გვერდის მქონე მიკროკონტროლერები უფრო მეტ ბიტს იყენებენ სიტყვების შესარჩევად.


სურათი 4. გვერდის ბუფერზე ჩაწერა

იმისათვის, რომ სიტყვა ჩაწეროთ გვერდის ბუფერში, თქვენ უნდა ჩატვირთოთ იგი რეგისტრებში R1:R0. დასაწერად საჭიროა მხოლოდ დაწეროთ სწორი სიტყვა და დააყენოთ SPMEN ბიტი SPMCR რეესტრში. ოთხი ციკლის შემდეგ SPM ბრძანება უნდა შესრულდეს.

გვერდის ჩანაწერი

მონაცემები, გვერდის ბუფერში ჩატვირთვის შემდეგ, უნდა ჩაიწეროს Flash მეხსიერებაში. ამისათვის აუცილებელია, როგორც ზემოთ აღწერილია გვერდის წაშლის ალგორითმის აღწერილ აბზაცში, დააყენოთ Z რეგისტრი. შემდეგ დაყენებულია PGERS და SPMEN ბიტები SPMCR რეესტრში, შემდეგ კი SPM ბრძანება უნდა გაიცეს ოთხი ციკლის განმავლობაში. რეგისტრების R1:R0 შიგთავსი იგნორირებულია. Z რეგისტრის გამოყენება მიკროკონტროლერისთვის 32 სიტყვიანი (64 ბაიტი) გვერდით ნაჩვენებია სურათზე 5.


სურათი 5. გვერდის ჩაწერა Flash მეხსიერებაში

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

RWW დაკავებული დროშის განყოფილება

RWW განყოფილების გვერდების დაწერისა და წაშლისას, RWWSB დროშა დაყენებულია აპარატურის მიერ, რაც მიუთითებს, რომ სექცია მიუწვდომელია. RWWSB დროშა უნდა გაიწმინდოს პროგრამული უზრუნველყოფის საშუალებით SPM რეჟიმის ბოლოს. ეს მიიღწევა SPMCR რეესტრში RWWSRE და SPMEN ბიტების დაყენებით და შემდეგ SPM ბრძანების გაცემით. ამ დროშის გასუფთავება ასევე შესაძლებელია გვერდის ბუფერის ჩატვირთვის გააქტიურებით. RWWSB დროშა შეიძლება გამოყენებულ იქნას აპლიკაციის პროგრამის სხვა ნაწილების მიერ RWW განყოფილების ხელმისაწვდომობის გასაკონტროლებლად. ეს უფრო დეტალურად არის განხილული მიკროკონტროლერების ტექნიკურ აღწერილობაში.

გაითვალისწინეთ, რომ Z რეგისტრის შიგთავსი და R1:R0 რეგისტრები იგნორირებულია RWWSRE ფუნქციის გამოყენებისას.

ასევე უნდა აღინიშნოს, რომ თუ ჩაწერის ან წაკითხვის ოპერაციის შესრულების შემდეგ, RWW განყოფილება ხელახალი გააქტიურების გარეშე გახდება ხელმისაწვდომი, მაშინ RRW განყოფილებაში ყველა მისამართი იკითხება როგორც 0xFFFF. ეს მოხდება Flash მეხსიერების წაკითხვის შემდეგ LPM-ის გამოყენებით და დარეკვის ან RWW განყოფილებაში გადასვლის შემდეგ. RWW განყოფილებაში გადასვლის გარეშე მისი ხელახალი გააქტიურება გამოიწვევს ბრძანებას, რომელიც მდებარეობს მისამართზე 0xFFFF, შესრულდება და ყველა წინა ბრძანება, რომელიც უნდა შესრულებულიყო, გამოტოვებული იქნება.

ჩატვირთვის ბლოკირების ბიტები

აპლიკაციის პროგრამის სექციები და ჩატვირთვის პროგრამა შეიძლება დაცული იყოს სხვადასხვა დონეზე. ორივე განყოფილებისთვის არის დაცვის ოთხი დონე. ამ რეჟიმების მოკლე აღწერა მოცემულია ცხრილში 1.

ცხრილი 1. ჩატვირთვის დაბლოკვის რეჟიმები

გთხოვთ გაითვალისწინოთ, რომ ყველა ამ ბიტის შეცვლა შესაძლებელია მხოლოდ სერიული ან პარალელური პროგრამისტის გამოყენებით. მაგალითად, მიკროკონტროლერისთვის, რომლის აპლიკაციის პროგრამა განახლდება, აუცილებელია დააყენოთ რეჟიმი 1 განაცხადის პროგრამის განყოფილებისთვის და რეჟიმი 4 ჩამტვირთველის განყოფილებისთვის. ეს ხელს უშლის ჩამტვირთველ პროგრამას აპლიკაციის პროგრამიდან წვდომას და საშუალებას აძლევს ჩამტვირთველს წვდომა ჰქონდეს აპლიკაციის პროგრამის ნაწილზე. განახლების შემდეგ, ჩამტვირთველი დააინსტალირებს მესამე რეჟიმს აპლიკაციის პროგრამისთვის, რომელიც დაბლოკავს მასზე შემდგომ წვდომას.

ჩატვირთვის გამორთვის ბიტების დასაპროგრამებლად, ჩატვირთეთ შესაბამისი მონაცემები R0 რეესტრში, დააყენეთ BLBSET და SPMEN ბიტები SPMCR რეესტრში და შეასრულეთ SPM ინსტრუქცია ოთხი ციკლისთვის. Z რეესტრის შინაარსი იგნორირებულია.

SPM ბრძანების ნაცვლად LPM ბრძანების გამოყენება ბიტების წაკითხვის საშუალებას მისცემს.

შეწყვეტა

RWW განყოფილების დაწერისას შესაძლებელია შეფერხების გამოყენება, მაგრამ შეწყვეტის რუტინამ არ უნდა შეარჩიოს სხვა RWW სექცია. სხვა სიტყვებით რომ ვთქვათ, შეფერხების რუტინები, მათ შორის შეფერხების ვექტორები, რომლებიც შესრულდება RWW განყოფილების განახლებისას, უნდა განთავსდეს NRWW განყოფილებაში.

ორი განსხვავებული შეფერხების ვექტორული ცხრილის შესარჩევად, აპლიკაციის პროგრამამ უნდა გამოიყენოს GICR რეგისტრის IVSEL ბიტი. RWW განყოფილების განახლებისას გამოყენებული უნდა იყოს ერთი აპლიკაციის პროგრამის განყოფილება და ერთი ჩატვირთვის პროგრამის სექცია. ეს საშუალებას აძლევს აპლიკაციას განაგრძოს ისეთი კრიტიკული პროცესები, როგორიცაა უსაფრთხოების პოლიტიკის მონიტორინგი თავად პროგრამირებისას. ეს უფრო დეტალურად არის განხილული მიკროკონტროლერების ტექნიკურ აღწერილობაში განყოფილებაში, სადაც აღწერს შეფერხებები და IVSEL დროშები.

თუ მეორე შეფერხების ვექტორი არ არის გამოყენებული, მაშინ შეფერხების სექციები უნდა გამორთოთ RWW-ის განახლებისას.

SPM შეწყვეტა

ყველა მიკროკონტროლერისთვის, რომელიც მხარს უჭერს თვითპროგრამირების რეჟიმს, გარდა ATmega163 და ATmega323 მიკროკონტროლერებისა, შესაძლებელია Flash მეხსიერების განახლების პროცესის კონტროლი შეფერხებების გამოყენებით. SPMIE ბიტის დაყენება SPMCR რეესტრში საშუალებას მისცემს SPM შეფერხების გენერირებას. მისი გამოყენება შესაძლებელია SPM რეჟიმის დასასრულის თვალყურის დევნებისთვის.

EEPROM მეხსიერების კონფლიქტები

გთხოვთ გაითვალისწინოთ, რომ EEPROM ჩაწერის ყველა ოპერაცია უნდა დასრულდეს SPM ბრძანების შესრულებამდე და პირიქით. Flash და EEPROM მეხსიერების ჩაწერა/წაშლა ერთდროულად შეუძლებელია.

ტიპიური განახლების პროცედურები

სურათი 6 გვიჩვენებს განახლების ორ სტანდარტულ პროცედურას. ამ ფიგურაში მარცხენა ბლოკის დიაგრამა აღწერს Flash მეხსიერების მცირე ნაწილების "წაკითხვა-შეცვლა-ჩაწერა" ალგორითმს, მაგალითად, Flash მეხსიერებაში შემავალ მუდმივებს. მარჯვენა დიაგრამა აღწერს გვერდის ჩაწერის ალგორითმს, რომელიც გამოიყენება გვერდის დასაწერად მისი შინაარსის წინასწარ წაკითხვის გარეშე, როგორიცაა UART-დან მონაცემების ჩაწერა.


სურათი 6. სტანდარტული განახლების პროცედურების სქემები

ჩამტვირთველი პროგრამის მაგალითი

ამ აპლიკაციაში ნაჩვენები ჩატვირთვის პროგრამის ნიმუში იყენებს AVRprog პროგრამას, რომელიც ხელმისაწვდომია www.atmel.com-ზე, როგორც მომხმარებლის ინტერფეისი. ეს ჩამტვირთავი პროგრამა საშუალებას გაძლევთ წაიკითხოთ ან განაახლოთ არჩეული მიკროკონტროლერის Flash და EEPROM მეხსიერება. ის ასევე საშუალებას გაძლევთ წაიკითხოთ და განაახლოთ Lock and Fuse bits.

Ოქმი

ჩატვირთვის მაგალითში გამოყენებული პროტოკოლი შექმნილია AVRprog პროგრამისტთან მუშაობისთვის, თუმცა ჩამტვირთველი არ უჭერს მხარს ბრძანებების მთელ კომპლექტს. მხარდაჭერილი ბრძანებების სია მოცემულია ცხრილში 2. ყველა ბრძანება იწყება ერთი და იგივე ასოთი. ბრძანების შესრულების შემდეგ, პროგრამისტი აბრუნებს მნიშვნელობას 13d (carriage return) ან საჭირო მონაცემებს. უცნობი ბრძანებებისთვის, მნიშვნელობა "?" ბრუნდება.

ცხრილი 2. AVRProg ბრძანებები

გუნდი ჩანაწერი წამყვანის მიერ წაიკითხა ოსტატი
ID მონაცემები მონაცემები
პროგრამირების რეჟიმში შესვლა "P" 13d
მისამართის ავტომატური გაზრდა "ა" დდ
მისამართის დაყენება "A" აჰ ალ 13d
დაბალი ბაიტის ჩაწერა პროგრამულ მეხსიერებაში "c" დდ 13d
მაღალი ბაიტის ჩაწერა პროგრამულ მეხსიერებაში "C" დდ 13d
გვერდის ჩანაწერის დასასრული "მ" 13d
წაიკითხეთ დაბლოკვის ბიტები "რ" დდ
პროგრამის მეხსიერების კითხვა "რ" დდ (დდ)
მონაცემთა მეხსიერების კითხვა "დ" დდ
ჩაწერეთ მონაცემთა მეხსიერება "დ" დდ 13d
კრისტალის წაშლა "ე" 13d
ჩაწერეთ საკეტის ბიტები "ლ" დდ 13d
დაწერეთ Fuse Bits "ვ" დდ 13d
Fuse Bits-ის კითხვა "F" დდ
Fuse-ის ყველაზე მნიშვნელოვანი ნაწილების კითხვა "N" დდ
პროგრამირების რეჟიმიდან გასვლა "L" 13d
მიკროკონტროლერის ტიპის არჩევა "T" დდ 13d
ხელმოწერის ბაიტების კითხვა "ს" 3*დ
მხარდაჭერილი მიკროკონტროლერის კოდის დაბრუნება "ტ" n*dd 00d
პროგრამის ID-ის დაბრუნება "S"
პროგრამის ვერსიის დაბრუნება "V" დდ დ.დ
ტექნიკის ვერსიის დაბრუნება "v" დდ დ.დ
პროგრამისტის ტიპის დაბრუნება "პ" დდ
LED-ის ჩართვა "x" დდ 13d
LED-ის გამორთვა "y" დდ 13d

შესრულებისას, AVRprog.exe ეძებს ნებისმიერ მხარდაჭერილ პროგრამისტს ნებისმიერ ხელმისაწვდომ COM პორტზე. კომუნიკაციისთვის გამოიყენება 8N1 ფორმატის 19.2 კბიტ/წმ ინტერფეისი (8 საინფორმაციო ბიტი, პარიტეტის შემოწმების გარეშე და ერთი გაჩერების ბიტი). ამიტომ, UART მიმღები ასევე უნდა იყოს კონფიგურირებული, რომ იმუშაოს ამ სიჩქარით და ამ რეჟიმში.

ATmega161 მიკროკონტროლერთან მუშაობისას, პროგრამისტის განსაზღვრისას მოქმედებების თანმიმდევრობა შემდეგია:

AVRprog:4 "ESC": UART ბუფერების გასუფთავება. AVRprog:"S" - პროგრამის იდენტიფიკატორის მოთხოვნა MegaAVR:"AVRB161" (ჩამტვირთავი). AVRprog იღებს ნებისმიერ შვიდ სიმბოლოიან სტრიქონს, რომელიც იწყება ასოებით "AVR". AVRprog: "a" - მეგაAVR მისამართის ავტომატურად გაზრდის მოთხოვნა: "y" - დიახ AVRprog: "t" - მოთხოვნა მხარდაჭერილი მიკროკონტროლერების შესახებ megaAVR: "60" mega161-ისთვის და "00" AVRprog სიის დასასრულის მითითებისთვის: " T "and" 60" - მითითება პროგრამისტისთვის, რომ არჩეულია ATmega161 AVRprog მიკროკონტროლერი: "y "+dd "y" +dd "y" + dd "x" +dd - LED-ების გააქტიურება.

პროგრამირების დროს ბრძანებების თანმიმდევრობა:

AVRprog:3 "ESC": UART ბუფერების გასუფთავება. AVRprog:"T" და "60" - მითითება პროგრამისტისთვის, რომ ATmega161 მიკროკონტროლერი არჩეულია AVRprog:"P" - პროგრამირების ნებართვა AVRprog:"e" - წაშლა აპლიკაციის პროგრამის არეალის AVRprog:"P" - პროგრამირების ნებართვა AVRprog:" A" - ინსტალაციის მისამართები 0x0000 AVRprog: "A" - პროგრამირების საწყისი მისამართის დაყენება AVRprog: "c" - მონაცემთა დაბალი ბაიტის გადაცემა AVRprog: "C" - მონაცემთა მაღალი ბაიტის გადაცემა

როდესაც დროებითი ბუფერი სავსეა:

AVRprog:"A" - გვერდის მისამართის დაყენება AVRprog:"m" - გვერდის ჩაწერა ამის შემდეგ პროგრამირება გრძელდება: AVRprog:"c" - მონაცემთა დაბალი ბაიტის გადაცემა AVRprog:"C" - მონაცემთა მაღალი ბაიტის გადაცემა

ყველა ბაიტის გადაცემის შემდეგ შესრულდება შემდეგი ბრძანებები:

AVRprog:"A" - ბოლო გვერდის მისამართის დაყენება AVRprog:"m" - ბოლო გვერდის ჩაწერა AVRprog:"L" - პროგრამირების რეჟიმიდან გასვლა

ბრძანებების თანმიმდევრობა მონაცემების შემოწმებისას:

AVRprog:"P" - პროგრამირების ნებართვა AVRprog:"A" - მისამართის დაყენება AVRprog:"R" - ATmega161 პროგრამის მეხსიერების კითხვა: ორმაგი ბაიტი მონაცემები.

AVRprog აგრძელებს "R"-ის გაგზავნას ყველა მონაცემის წაკითხვამდე, რის შემდეგაც ის აგზავნის "L"-ს პროგრამირების რეჟიმიდან გასასვლელად.

პროგრამის აღწერა

ძირითადი პროგრამა გაშვებულია პროგრამირების შესრულების გასაკონტროლებლად ან თუ მათი აპლიკაციის პროგრამის განყოფილების პროგრამა უნდა შესრულდეს. ამ აპლიკაციაში ეს განისაზღვრება PIND მნიშვნელობით. თუ D პორტის მომხმარებლის მიერ განსაზღვრული პინი იმყოფება გადატვირთვისას, პროგრამა გადავა პროგრამირების რეჟიმში (პინი განსაზღვრულია main.c წყაროს კოდში). თუ ეს პინი მაღალი იყო, პროგრამა დაიწყებს შესრულებას 0000$ მისამართიდან (როგორც ჩვეულებრივი გადატვირთვის შემთხვევაში).

პროგრამირების რეჟიმში საკონტროლო პროგრამა იღებს ბრძანებებს AVRprog-დან UART-ის საშუალებით. თითოეული ბრძანება ააქტიურებს შესაბამისი დავალების შესრულებას. ეს პროგრამა არ იყენებს ბრძანებებს LED- ის მუშაობის გასაკონტროლებლად, მაგრამ ისინი ხორციელდება AVRprog პროგრამისტის მიერ სინქრონიზაციის დაკარგვის თავიდან ასაცილებლად. ნებისმიერი ბრძანება, რომელიც არ არის აღიარებული პროგრამის მიერ, იწვევს AVRprog პროგრამისტის დაბრუნებას "?" სიმბოლოს.

პროგრამა main.c ამყარებს კავშირს მასპინძელ პერსონალურ კომპიუტერთან და ასრულებს მიღებულ ბრძანებებს. ნახაზი 7 გვიჩვენებს ამ პროგრამის ოპერაციული ალგორითმის ბლოკ დიაგრამას.


სურათი 7. ძირითადი პროგრამის მუშაობის ალგორითმის ბლოკ-სქემა

გთხოვთ გაითვალისწინოთ, რომ ამ პროგრამიდან გასვლა შესაძლებელია მხოლოდ მიკროკონტროლერის გადატვირთვის გზით.

UART პროგრამა (serial.c) უბრალოდ გამოკითხავს UART რუტინას. როგორც უკვე აღვნიშნეთ, ამ რუტინის პერიოდული გამოკითხვის მიზეზი არის ის, რომ ჩატვირთვის ზოგიერთი პარამეტრი ჩატვირთვის ჩამტვირთველის პროგრამაში ბიტების გათიშვის საშუალებას არ იძლევა.

SPM-ის გამოყენებით ყველა რუტინა დაწერილია ასამბლეის ენაზე. ეს კეთდება კოდში კონფლიქტების თავიდან ასაცილებლად. SPM ბრძანებები მოითხოვს მონაცემების განთავსებას Z რეგისტრში (r31:r30) და რეგისტრის წყვილში r1:r0. ეს შეიძლება განხორციელდეს C-ში, მაგრამ უფრო ადვილია კონტროლის განხორციელება ასამბლეის ენაზე და ასევე საშუალებას გაძლევთ შეამციროთ C კოდის გადატვირთვა.

შეკრების პროცედურის გამოძახება

იმისდა მიხედვით, თუ რა პარამეტრებს გადაეცემა ასამბლეის პროცედურის გამოძახებისას, იგი ასრულებს ერთ-ერთ ორ ფუნქციას:

void write_page (ხელმოუწერელი მთელი რიცხვის მისამართის მნიშვნელობა, ხელმოუწერელი ფუნქციის სტრიქონის მნიშვნელობა); პირველი გადაცემული პარამეტრი არის გვერდის მისამართი, რომელიც უნდა ჩაიწეროს. მეორე პარამეტრი განსაზღვრავს ფუნქციას, რომელიც უნდა შესრულდეს. თუ მნიშვნელობას გადასცემთ 0x05, მაშინ მითითებული გვერდი დაიწერება, ხოლო თუ 0x03, მაშინ წაიშლება. ხელმოუწერელი მთელი რიცხვი read_program_memory(ხელმოუწერელი მთელი მისამართი, ხელმოუწერელი ფუნქციის სტრიქონი);

ამ ქვეპროგრამაში პირველი პარამეტრი არის გვერდის მისამართი, რომელიც უნდა წაიკითხოთ. მეორე პარამეტრი განსაზღვრავს ფუნქციას, რომელიც უნდა შესრულდეს. ფუნქციის მნიშვნელობის 0x00 გადაცემის შემთხვევაში, ქვეპროგრამა დააბრუნებს მითითებულ მისამართზე მდებარე მონაცემებს. თუ გადასცემთ მნიშვნელობას 0x09, როგორც მეორე პარამეტრს, და 0x0000, 0x0001 ან 0x0003, როგორც მისამართი, მაშინ რუტინა დააბრუნებს Fuse, Lock Bit ან Fuse High ბიტების მნიშვნელობებს. ამ შემთხვევაში, მთავარი პროგრამა უგულებელყოფს დაბრუნებული მთელი რიცხვის ყველაზე მნიშვნელოვან 8 ბიტს.

ქვემოთ მოცემულია ასამბლეის რუტინის ჩამონათვალი.

NAME ასამბლეა(16) RSEG კოდი(0) RSEG UDATA0(0) PUBLIC fill_temp_buffer PUBLIC write_page PUBLIC write_lock_bits PUBLIC read_program_memory EXTERN ?CL0T_1_40_L08 RSEG CODE #1:1h RV03, RMO1, RV1 ჩაწერა. 16 ; მისამართის გადატანა z რეესტრში (R31=ZH R30=ZL) OUT SPMCR,R20 ; მეორე SPM ფუნქციის გამოძახების შესაბამისი პარამეტრის დაყენება; გვერდის ჩაწერა RET fill_temp_buffer: MOV R31,R21 MOV R30,R20 ; მისამართის გადატანა z რეგისტრში (R31=ZH R30=ZL) MOV R1,R17 MOV R0,R16 ; მონაცემთა გადაცემა რეგისტრებში 0 და 1 LDI R18,0x01 OUT SPMCR,R16 SPM; მეხსიერების დაპროგრამება RET read_program_memory: MOV R31,R17 ; R31=ZH R30=ZL MOV R30,R16 ; მისამართის გადატანა z რეესტრში SBRC R20,0; უსაფრთხოების ბიტების დათვლა? (მეორე არგუმენტი = 0x09) OUT SPMEN,R20; თუ "დიახ", მაშინ დააყენეთ მეორე არგუმენტი SPMEN LPM რეესტრში; წაიკითხეთ LSB MOV R16,R0 INC R30 LPM MOV R17,R0 ;წაიკითხეთ SSB (იგნორირებულია უსაფრთხოების ბიტის წაკითხვისას) RET write_lock_bits: MOV R0,R16 LDI R17,0x09 OUT SPMCR,R17 SPM ; ჩაწერის დაცვის ბიტები RET END

სპეციალური შენიშვნები

  1. ATmega161 და ATmega163 მიკროკონტროლერებზე ჩატვირთვის პროგრამის განყოფილება განთავსებულია მეხსიერებაში $3C00 მისამართიდან $3FFF მისამართიდან, ამიტომ ლინკერის ფაილმა უნდა შეცვალოს პროგრამა ისე, რომ ის მდებარეობდეს ამ ზონაში. ამისათვის შეცვალეთ "პროგრამის მისამართების სივრცის" მნიშვნელობა შემდეგი მნიშვნელობით:
    // პროგრამის მისამართის სივრცე (შიდა Flash მეხსიერება) -Z(CODE)INTVEC,RCODE,CDATA0,CDATA1,CCSTR,SWITCH, FLASH,CODE=3C00-3FFF შედეგად, კოდი განთავსდება ჩატვირთვის ბლოკში. გარდა ამისა, გადატვირთვის ვექტორის მისამართის დასაყენებლად $1E00 Fuse, BOOTRST ბიტი უნდა იყოს დაყენებული.
  2. ჩამტვირთველის რუტინას უნდა შეეძლოს განსაზღვროს რეჟიმი, რომელშიც მიკროკონტროლერი უნდა მუშაობდეს გადატვირთვის შემდეგ (პროგრამირების რეჟიმი ან აპლიკაციის პროგრამის შესრულების რეჟიმი).
    ეს ხორციელდება გადატვირთვისას კონკრეტული პინის მდგომარეობის შემოწმებით. თუ ყველა პინი არის მაღალ მდგომარეობაში, მაშინ ჩამტვირთავი პროგრამა აგრძელებს ძირითადი პროგრამის შესრულებას. ეს შეიძლება განხორციელდეს C-ში ბრძანებების შემდეგი თანმიმდევრობის გამოყენებით: ცარიელი (*funcptr) (ცარიელი) = 0x0000; // ფუნქციის მაჩვენებელი funcptr (); // გადადით მითითებულ მისამართზე
  3. თუ გადატვირთვისას მომხმარებლის მიერ განსაზღვრული პინი დაბალია, პროგრამირების რეჟიმი შედის. პროგრამირების რეჟიმიდან გამოსვლა შეუძლებელია. ნორმალურ რეჟიმში დასაბრუნებლად, ეს პინი უნდა იყოს დაყენებული მაღალი და მიკროკონტროლერი უნდა გადატვირთოს.
  4. ჩატვირთვის დაცვის ბიტების გარკვეულ პირობებში, შეფერხებები შეიძლება არ იყოს ხელმისაწვდომი ჩატვირთვის სექციის Flash მეხსიერებიდან ბრძანებების შესრულებისას. ამ მიზეზით, აღწერილი დემო პროგრამაში განხორციელებული UART პროგრამა იყენებს პერიოდულ გამოკითხვას შეწყვეტის სერვისის რუტინის ნაცვლად.
  5. Z რეგისტრი გამოიყენება SPM ინსტრუქციის შესრულებისას გვერდის მისამართის/დროებითი ბუფერული მისამართის მითითებისთვის. ეს რეესტრი ასევე გამოიყენება როგორც მონაცემთა მაჩვენებელი IAR შემდგენელის მიერ. ეს იწვევს კონფლიქტებს. ამიტომ, SPM-თან დაკავშირებული ყველა რუტინა დაწერილია ასამბლეის ენაზე.
  6. პირდაპირი კონტროლის გაზრდა მოითხოვს C-ში დაწერილი პროცედურების სირთულის გაზრდას. ეს კიდევ ერთი მიზეზია რუტინების დასაწერად, რომლებიც ასრულებენ SPM-ს ასამბლეის ენაზე.
  7. პროგრამის ზომაა 504 ბაიტი, ამიტომ მისი განთავსება შესაძლებელია მხოლოდ მიკროკონტროლერებში ჩატვირთვის სექტორის ზომა 512 ბაიტი ან მეტი.

კოდის ზომის შესამცირებლად, საჭიროა ოპტიმიზაცია ქვემოთ მოცემული რეკომენდაციების მიხედვით:

  • გამოიყენეთ if, then, else კონსტრუქცია case ბრძანების ნაცვლად.
  • გამოიყენეთ For (;;) () კონსტრუქცია while (1) () ნაცვლად.
  • CSTARTUP.S90 ფაილში ყველა გამოუყენებელი მითითება წაიშალა. ეს ეხება "__low_level_init" მითითებებს, "#if #endif" ბრძანებას და C _EXIT მოდულს.
  • ყველა ცვლადს უნდა ჰქონდეს რაც შეიძლება მცირე ზომა.
  • შეძლებისდაგვარად გამოიყენეთ ხელმოუწერელი ცვლადები.

შეგიძლიათ გაიგოთ მეტი C-ში დაწერილი კოდის ეფექტურობის გაუმჯობესების შესახებ აპლიკაციის მაგალითში "AVR035: ეფექტური C კოდირება AVR-ისთვის".

პროგრამები და მონაცემები გამოყოფილია (განსხვავებით კლასიკური არქიტექტურისგან
ფონ ნეუმანი ჩვეულებრივ კომპიუტერებში, სადაც მეხსიერება იზიარებს). ცალკე საბურავები ამისთვის
მეხსიერების ეს სფეროები მნიშვნელოვნად აჩქარებს პროგრამის შესრულებას: მონაცემები და
გუნდების შერჩევა შესაძლებელია ერთდროულად.

32 ზოგადი დანიშნულების რეგისტრი (RON). Atmel იყო პირველი კომპანია, შორს
წავიდა გამოთვლითი ბირთვის კლასიკური მოდელიდან, რომელშიც
ბრძანების გადაცემა ითვალისწინებს მონაცემთა გაცვლას ALU-სა და საცავს შორის
უჯრედები საერთო მეხსიერებაში. RON-ის დანერგვა ასეთი რაოდენობით (გახსოვდეთ, რომ ქ
არქიტექტურა X 86 ასეთი მხოლოდ ოთხი რეესტრია და ქ x 51 RON-ის კონცეფცია, როგორც ასეთი,
არ არსებობს) ზოგიერთ შემთხვევაში შესაძლებელს ხდის გლობალური მდებარეობის მთლიანად მიტოვებას
ბურთი და ლოკალური ცვლადები RAM-ში და სტეკის გამოყენებით, ოპერაციები
რომლებიც ართულებენ და აჭიანურებენ პროგრამას. შედეგად, აგებულების სტრუქტურა
ნიმუშის პროგრამა უფრო ახლოს არის მაღალი დონის ენების პროგრამებთან.
მართალია, ამან გამოიწვია ბრძანების სისტემის, ნომენკლატურის გარკვეული გართულება
რომელთაგან მეტია AVR-ისთვის, ვიდრე სხვა RISC ოჯახებში (თუმცა მნიშვნელოვანი
ზოგიერთი ინსტრუქცია არის მეტსახელი).

ფლეშ პროგრამის მეხსიერება(10000 წაშლის/ჩაწერის ციკლი) შესაძლებლობით
სისტემაში გადაპროგრამირება და ჩამოტვირთვა სერიული საშუალებით
არხი პირდაპირ მზა წრეში. ამ მიდგომის უპირატესობების შესახებ, რომელიც ახლა გახდა
ზოგადად მიღებული, დეტალურად აღწერილი ადმინისტრირებას.

არასტაბილური მეხსიერების ცალკე ზონა(EEPROM, 100,000 ციკლი
წაშლა/ჩაწერა) მონაცემთა შესანახად, პროგრამული უზრუნველყოფის საშუალებით ჩაწერის შესაძლებლობით
მიერ ან გარე ჩამოტვირთვა SPI ინტერფეისით.

ჩაშენებული ანალოგური სიგნალის დამუშავება: ანალოგი
შედარებითი და მრავალარხიანი 10-ბიტიანი ADC.

მცველი ტაიმერიავტომატური გადატვირთვის საშუალებას
კონტროლერი გარკვეული ინტერვალებით (მაგალითად, გასასვლელად
"ძილის რეჟიმი).

სერიული SPI ინტერფეისები, TWI (მე

C) და UART (USART), Ნებას გრთავ-

შეუძლია კომუნიკაცია უმეტეს სტანდარტულ სენსორებთან და
სხვა გარე მოწყობილობები (მათ შორის, როგორიცაა პერსონალური კომპიუტერები)
აპარატურა.

ტაიმერ-მრიცხველებიწინასწარ დაყენებული და დათვლის წყაროს არჩევის შესაძლებლობით -
nal pulses: ჩვეულებრივ ერთი ან ორი 8-bit და მინიმუმ ერთი
16-ბიტიანი, მათ შორის, რომლებსაც შეუძლიათ მუშაობა მრავალარხიან 8-, 9-,
10-, 16-ბიტიანი პულსის სიგანის მოდულაცია (PWM).

საათის სიჩქარით მუშაობის უნარი 0 ჰც-დან 16-20 მჰც-მდე.

მიწოდების ძაბვის დიაპაზონი 2.7-დან 5.5 ვ-მდე(ზოგიერთ შემთხვევაში 1.8-დან ან
6.0 ვ-მდე).

მრავალრიცხოვანი ენერგიის დაზოგვის რეჟიმებიგანსხვავდება კვანძების რაოდენობით,
დაკავშირებული რჩება. "ძილის" რეჟიმიდან გასვლა დამკვირვებლის გამოყენებით
ტაიმერი ან გარე შეფერხებები.

ჩამონტაჟებული დენის მონიტორი- ძაბვის ვარდნის დეტექტორი (Brown-out
გამოვლენა).

აქ არ არის ჩამოთვლილი სხვადასხვა მოდელებისთვის დამახასიათებელი ყველა მახასიათებელი.
AVR. ზოგიერთს გავიცნობთ როგორც სამომავლოდ, ასევე პრაქტიკაში.
მოდით, უფრო დეტალურად განვიხილოთ ზემოთ. მაგრამ ჯერ ზოგადი აღწერა მივცეთ
სხვადასხვა AVR ოჯახები მათი ძირითადი დანიშნულების თვალსაზრისით.

AVR ოჯახები

2002 წელს Atmel-მა დაიწყო 8-ბიტიანი MK-ების ახალი ქვეოჯახების გამოშვება.
AVR ბირთვები. მას შემდეგ ამ ოჯახის ყველა MK იყოფა სამ ჯგუფად (ქვეოჯახი
va): კლასიკური, თინი და მეგა. კლასიკური ოჯახის MK (AT90S xxxx) აღარ იწარმოება;
ის, რომელიც ყველაზე დიდხანს დარჩა წარმოებაში, იყო ძალიან წარმატებული (მარტივი, კომპაქტური და
მაღალსიჩქარიანი მოდელი) AT90S2313, მაგრამ ის ასევე შეიცვალა 2005 წელს
ATtiny2313. ყველა "კლასიკური" AVR სახელწოდებით პირველი ნომრებით 2 და 8
მოდელებს (რაც ნიშნავს პროგრამის მეხსიერების რაოდენობას კილობაიტებში) აქვთ ანალოგები
თინის და მეგას ოჯახები. მეგასთვის პროგრამირების დროს შესაძლებელია სპეციალური
cial თავსებადობის ბიტი, რომელიც იძლევა გამოყენების საშუალებას ყოველგვარი ცვლილების გარეშე
გამოიყენეთ კლასიკური ოჯახისთვის შექმნილი პროგრამები. აქედან გამომდინარე, უამრავი მაგალითია
პრეზენტაციის გამარტივების მიზნით, ეს წიგნი წარმოდგენილია ოჯახისთვის ვერსიით
კლასიკური.
AVR ჩიპების წარმოების სხვადასხვა ტიპის შემთხვევების მაგალითები,
ნაჩვენებია ნახ. 1.1. დამატებითი ინფორმაცია ამ თემაზე შეგიძლიათ იხილოთ აქ
დანართი 1(ცხრილი A1.2), ასევე მოწყობილობების ტექნიკურ დოკუმენტაციაში.
გაითვალისწინეთ, რომ სამოყვარულო რადიო საჭიროებისთვის და პროტოტიპებისთვის ყველაზე მოსახერხებელია მიკრო-
სქემები PDIP პაკეტებში, მაგრამ ყველა MK მოდელი არ იწარმოება ასეთ პაკეტებში.
ყველა ოჯახს შეიძლება ჰქონდეს ორი მოდიფიკაცია: ასო "L" აღნიშვნაში ნათქვამია
გაფართოებული სიმძლავრის დიაპაზონის შესახებ 2,7–5,5 ვ, ასეთი ასოს არარსებობა ნიშნავს
სიმძლავრის დიაპაზონი 4,5–5,5 ვ. კონკრეტული ტიპის მიკროსქემის არჩევისას, თქვენ უნდა
ფრთხილად, რადგან L-ვერსიები ასევე ნაკლებად სწრაფად მოქმედებს,
მათ უმეტესობას აქვს მაქსიმალური საათის სიჩქარე 8 MHz.
"რეგულარული" ვერსიებისთვის მაქსიმალური სიხშირეა 16 ან 20 MHz. თუმცა, როგორ
როგორც წესი, L-ჩიპების გაშვებისას მიწოდების ძაბვით 5 ვ 10–მდე სიხშირეზე.
12 MHz პრობლემები არ უნდა იყოს მოსალოდნელი (მსგავსი ვერსია L ასოს გარეშე, საკმაოდ
შეუძლია იმუშაოს მიწოდების ძაბვაზე დაახლოებით 3 ვ, რა თქმა უნდა, არა უკიდურესად
სიხშირის მნიშვნელობები), თუმცა, მაღალი საიმედო მოწყობილობების დიზაინის დროს
კომპანიებმა უნდა გაითვალისწინონ ეს მოთხოვნა.
პაწაწინა ჩიპებს აქვთ პროგრამების Flash ROM 1-8 კბაიტიანი სიმძლავრით და განლაგებულია მასში
ძირითადად შეფუთვაში 8-20 ქინძისთავით (გარდა ATtiny28-ისა), ანუ ისინი ძირითადად განკუთვნილია
განკუთვნილია მარტივი და იაფი მოწყობილობებისთვის. ეს არ ნიშნავს რომ ისინი შესაძლებელია -
თვისებები ყველა შემთხვევაში უფრო შეზღუდულია, ვიდრე მეგას ოჯახის. Მაგალითად,
$2-ზე ნაკლები ფასით, ATtiny26 შეიცავს მაღალსიჩქარიან PWM ტაიმერს
რეჟიმი (სხვა მოდელებს ეს არ აქვთ), ასევე 11-არხიანი ADC შესაძლებლობით
დიფერენციალურ რეჟიმში მუშაობის შესაძლებლობა, რეგულირებადი შეყვანის გამაძლიერებლით

ნაწილი I. Atmel AVR-ის დიზაინისა და ექსპლუატაციის ზოგადი პრინციპები

და ჩაშენებული საცნობარო ძაბვის წყარო, რომელიც დამახასიათებელია მაღალი სიმძლავრისთვის
გაზიარება. ATtiny2313 ჩიპი, როგორც უკვე აღვნიშნეთ, გაუმჯობესებულია
ერთ-ერთი ყველაზე მრავალმხრივი და მოსახერხებელი "კლასიკური" AVR-ის ახალი ვერსია
AT90S2313.

ბრინჯი. 1.1. AVR MCU-ების სხვადასხვა ტიპის კორპუსების მაგალითები

მეგა ქვეოჯახი აღჭურვილია პროგრამების Flash ROM-ით 8–256 კბ ტევადობით და საცხოვრებლით.
თავად 28–100 ქინძისთავით. ზოგადად, ამ ჯგუფის MKs უფრო დახვეწილია, ვიდრე
პატარა, აქვს ჩაშენებული მოწყობილობების უფრო ფართო სისტემა უფრო მოწინავე
ფუნქციონირება.
ცხრილები ზოგიერთი Tiny და Mega მოდელების ძირითადი მახასიათებლებით
ყველაზე პოპულარული ჩამოთვლილია დანართი 1. აქ ასევე მოცემულია რამდენიმე ზოგადი ტექნიკა.
AVR ოჯახის ტექნიკური მახასიათებლები. უფრო დეტალური ინფორმაციის მიღება შეგიძლიათ
საწყისი და საკუთრების ტექნიკური დოკუმენტაცია, რომელიც ხელმისაწვდომია ვებგვერდზე
Atmel ყველა მოდელისთვის.
გარდა ამ სამი ოჯახისა, სპეციალიზებული იწარმოება AVR ბირთვის საფუძველზე
მიკროსქემები USB ინტერფეისთან მუშაობისთვის (AT90USB xxxx), სამრეწველო ინ-
CAN ინტერფეისი (AT90CAN xxx), LCD დისპლეების კონტროლისთვის (ATmega329 და ა.შ.),
უკაბელო IEEE 802.15.4 (ZigBee) ინტერფეისით ვაჭრობისთვის და
ზოგიერთი სხვა. ცოტა ხნის წინ, Tiny-ის ზოგიერთმა მიკროკონტროლერმა და
მეგამ დაიწყო წარმოება ულტრა დაბალი მოხმარების ვერსიებში (ტექნოლოგიით
picoPower მიწოდების ძაბვით 1.8 ვ, ამ სერიის MK-ის სახელის ბოლოს
დამატებულია ასო "P") და მაღალი ტემპერატურა საავტომობილო გამოყენებისთვის
ინდუსტრია (საავტომობილო ვერსიები). XMega ოჯახი ძაბვით გამოჩნდა
კვების ბლოკი 1,8–3,6 ვ, გაზრდილი სიჩქარე (საათის სიხშირე 32 MHz–მდე),

თავი 1. Atmel AVR მიკროკონტროლერების მიმოხილვა

12-ბიტიანი 16-არხიანი ADC და 2-4 არხიანი DAC (ჯერ კიდევ სტრუქტურაში
AVR ისინი დაკარგული იყო), რამდენიმე UART არხი და სხვა სერიალი
პორტები (და ოფლაინ რეჟიმში მუშაობის შესაძლებლობით, როდესაც შეჩერებულია
ბირთვი), ჩაშენებული კრიპტოგრაფიის მხარდაჭერა, გაფართოებული რეჟიმი
picoPower და სხვა ზარები და სასტვენები. ასევე არის ცალკე ოჯახი 32-ჯერ
in-line MK AVR32, განკუთვნილია მაღალსიჩქარიანი აპლიკაციებისთვის, როგორიცაა
როგორიცაა ვიდეო ნაკადის დამუშავება ან რეალურ დროში გამოსახულების ამოცნობა.

თავისებურებები
MK AVR-ის პრაქტიკული გამოყენება

AVR-ის გამოყენებისას წარმოიქმნება მთელი რიგი პრაქტიკული საკითხები, იგნორირება
რომლის შესწორებამ ზოგჯერ შეიძლება გამოიწვიოს მოწყობილობის უფუნქციობა ან გაუმართაობა.
გროვდება (და ზოგიერთ შემთხვევაში - მისი დაპროგრამების შეუძლებლობაც კი).
მაგალითად, ერთ-ერთი ასეთი პრობლემაა EEPROM-ის შინაარსის დაკარგვის შესაძლებლობა
დენის გამორთვისას. ამ და მსგავს პრობლემებს დეტალურად განვიხილავთ
შესაბამისი თავები. აქ რამდენიმე ზოგად საკითხზე შევჩერდებით
AVR MK-ის ჩართვა.

მოხმარების შესახებ

AVR MCU მოიხმარს საშუალოდ 5-15 mA-ს (გარე მოწყობილობების მოხმარების გამოკლებით).
როი MK-ის დასკვნების მეშვეობით). მიმდინარე მოხმარება დამოკიდებულია არა მხოლოდ "ნავო-
მოდელის "ტერმინი", არამედ საათის სიხშირეზე და მიწოდების ძაბვაზე. ნახ. 1.2
გვიჩვენებს დენის მოხმარების დამოკიდებულების ტიპურ დიაგრამას მიწოდების ძაბვაზე
სიხშირე და საათის სიხშირე მეგას ოჯახის ახალგაზრდა მოდელებისთვის.
მდებარეობა ნახ. 1.2, კერძოდ, აქედან გამომდინარეობს, რომ მოხმარება შეიძლება მნიშვნელოვნად შემცირდეს
საათის სიხშირის შემცირება იმ შემთხვევებში, როდესაც პროგრამის შესრულების დრო არ არის
კრიტიკული. ეს საშუალებას გაძლევთ გაამარტივოთ პროგრამა ენერგიის რეჟიმების აღმოფხვრის გზით
დაზოგვა: მაგალითად, 32,768 ჰც კვარცის "საათის" დაყენებისას, როგორც ასე-
ტირაციული MK მოხმარება შეიძლება იყოს 200-300 μA-მდე.

შენიშვნები ზღვარზე

მიმდინარე მოხმარების მნიშვნელობა 1-2 mA ან ნაკლები შეიძლება ჩაითვალოს პირობითად მისაღები
ბატარეის მოწყობილობები, რომლებიც განკუთვნილია გრძელვადიანი უწყვეტი მუშაობისთვის
მუშაობა. AA ზომის ელემენტებს (ტუტე ტიპის, ანუ ტუტე) აქვს ტევადობა
იტენება დაახლოებით 2000 mAh, ანუ მოწყობილობა ამ ელემენტებიდან მითითებული მოხმარებით
მუშაობს მინიმუმ 1000 საათი (სინამდვილეში ცოტა მეტიც) ან 40 დღეზე მეტი. დრო
მუშაობა D ზომის ბატარეებზე ენერგეტიკული ტევადობით დაახლოებით 15-18,000 mAh
დაახლოებით ერთი წელი სჭირდება, რაც საკმარისია პრაქტიკული აპლიკაციების უმეტესობისთვის.
აირჩიეთ ასეთი მოწყობილობების ჩართვა (განსაკუთრებით ისინი, რომლებიც პერიოდულად ჩართულია)
მოკლე დროში) ეს არის ტუტე ელემენტები, რომლებიც უნდა იქნას გამოყენებული, რადგან მათ აქვთ დიდი
ტევადობა, არ გაჟონოს გადატვირთვისას და, რაც მთავარია, აქვს მნიშვნელოვნად გახანგრძლივებული მომსახურების ვადა
შენახვა (დაახლოებით 7 წელი) სხვა ტიპის ელემენტებთან შედარებით.

მაგრამ საკითხის ფრთხილად განხილვა აჩვენებს, რომ ეს არის ზუსტად ის, რაც ამარტივებს
პროგრამა - უმეტეს შემთხვევაში, სარგებელი მეტია

ნაწილი I. Atmel AVR-ის დიზაინისა და ექსპლუატაციის ზოგადი პრინციპები

დაბალი საათის სიჩქარე და შეზღუდულია. გრაფიკები ნახ. აქედან გამომდინარე, 1.2 წრფივია
აქედან გამომდინარეობს, რომ საათის სიხშირის შემცირების პროპორციულად იზრდება შესრულების დრო
ბრძანებებს. ამრიგად, პროცედურა, რომლის შესრულებაც საათის სიხშირეზე
4 MHz დასჭირდება 100 μs, საათის სიჩქარით 32,768 Hz გაგრძელდება 12 ms-ზე მეტს.
ადვილი გამოსათვლელია, რომ ორივე შემთხვევაში მოხმარებული ენერგიის რაოდენობა თითოზე
ამ პროცედურის შესრულება იგივე იქნება.

ბრინჯი. 1.2.დენის მოხმარების დიაგრამა მიწოდების ძაბვის მიმართ

და საათის სიხშირე მეგას ოჯახის ახალგაზრდა მოდელებისთვის

აქედან გამომდინარე, შეგვიძლია შემდეგი ზოგადი დასკვნის გაკეთება: თუ არ გინდა ჩაღრმავება
ენერგიის დაზოგვის რეჟიმების დახვეწილობას და არ განახორციელოთ ისინი პროგრამაში, შემდეგ ზოგადად
მოხმარების შესამცირებლად, თქვენ უნდა აირჩიოთ რაც შეიძლება დაბალი საათის სიხშირე (at
პრაქტიკაში, როგორც წესი, საკმარისია მნიშვნელობის შეზღუდვა 1 MHz-მდე, რადგან შემდგომში
შემცირებას დიდი ალბათობით არავითარი ეფექტი არ ექნება გარეგანი დამატებითი მოხმარების გამო
მათი სქემები, გარდაუვალია ყველა წრეში). თუ თქვენ გაქვთ გაფრთხილება
ჩვენ გადავხედეთ ენერგიის დაზოგვის ერთ-ერთ „ღრმა“ რეჟიმს (იხ. თავი 4), შემდეგ საათი
სიხშირე მთლიანი მოხმარების თვალსაზრისით პრაქტიკულად შეუსაბამოა.
კიდევ ერთი რამ არის მიწოდების ძაბვის არჩევანი, რომლის გაკეთებაც სასურველია მაქსიმალურად
ნაკლები, თუ გარე მოწყობილობები ამის საშუალებას იძლევა. მიმდინარე მოხმარების დამოკიდებულება
მიწოდების ძაბვა, როგორც ადვილად გასაგებია ნახ. 1.2, არაწრფივი: ზრდით
ძაბვის მატებასთან ერთად, დენის მოხმარება სწრაფად იზრდება. ამიტომ, შეამცირეთ
მიწოდების ძაბვა უმეტესობისთვის საათის სიხშირის შეზღუდვის გათვალისწინებითაც კი
VA AVR მოდელები (არაუმეტეს 8 MHz 2.7 V მიწოდებით) კვლავ მომგებიანია. Მაგალითად,
მოწყობილობა 3 ვ ელექტრომომარაგებით 8 მჰც სიხშირით, ნახ. 1.2, იქნება
მოიხმარენ დაახლოებით 3 mA ან, სიმძლავრის ერთეულების თვალსაზრისით, 9 mW; პროცედურისთვის -

თავი 1. Atmel AVR მიკროკონტროლერების მიმოხილვა

ru-ს ხანგრძლივობით 100 μs დასჭირდება ენერგია 0,9 μJ. 16 MHz სიხშირეზე იგივე პრო-
პროცედურა დასჭირდება 50 μs, მაგრამ მოხმარება საჭირო მიწოდების ძაბვაზე 5 ვ
იქნება დაახლოებით 14 mA, ანუ 70 mW; მთლიანობაში ენერგია დასჭირდება პროცედურის დასრულებას
3.5 μJ, თითქმის 4-ჯერ მეტი.
ყველა გარე ციფრული მოწყობილობისთვის, ძალიან მცირე გამონაკლისის გარდა, შეგიძლიათ
მიიღეთ თანამედროვე ანალოგი, რომელიც შექმნილია 2.7– ძაბვაზე მუშაობისთვის.
3.0 ვ (და კიდევ უფრო დაბალი, თუ კონტროლერის მოდელი ამის საშუალებას იძლევა), ასე რომ, ამ მხარეს
შეზღუდვების გარეშე; რომ მაგალითების უმეტესობა ამ წიგნშია ორიენტირებული
მიწოდების ძაბვა არის 5 ვ, არსებობს მხოლოდ ტრადიციის ხარკი. უფრო მეტიც, ეს მაგალითები მსგავსია
როგორც წესი, ისინი გულისხმობენ ელექტრომომარაგებას ქსელიდან, სადაც მოხმარება არ არის ძალიან მნიშვნელოვანი.
საკითხავი. LED ინდიკატორებს შეუძლიათ შეზღუდონ მიწოდების ძაბვის შემცირება
ტორები (იმის გამო, რომ პირდაპირი ძაბვის ვარდნა თავად LED-ებზეა
არის დაახლოებით 2 ვ, ხოლო დიდი ინდიკატორებისთვის კი 5 ვ-ია, რომ აკონტროლოთ ქვედა
ზუსტად), მაგრამ ასეთ მოწყობილობებში კონტროლერის მოხმარება დიდ როლს აღარ თამაშობს
როლები: ოთხი შვიდსეგმენტიანი ციფრი თავად მოიხმარს დენს
100 mA ან მეტი. სხვა შემთხვევა წარმოდგენილია ანალოგური სქემებით, სადაც ზრდა
მიწოდების ძაბვა მომგებიანია სიგნალ-ხმაურის თანაფარდობის გაზრდის თვალსაზრისით.
გაითვალისწინეთ, რომ AVR ქინძისთავებს შეუძლიათ მნიშვნელოვანი გრძელვადიანი წარმოება
დენი (20-40 mA-მდე), მაგრამ არ დაივიწყოთ საერთო საერთო შეზღუდვა
მოხმარებისთვის გამომავალი სიმძლავრის მიხედვით (იხ . მაგიდა P1.3). ისიც უნდა აღინიშნოს, რომ
ADC შეყვანებზე ანალოგური ძაბვის გამოყენებისას, შეყვანის ციფრული CMOS-
ელემენტი (შესაბამისი პორტის შეყვანა) არ არის გამორთული და ამის მნიშვნელობით
ძაბვა ელემენტის რეაგირების ზღურბლთან ახლოს, ამან შეიძლება გამოიწვიოს გაზრდა
მოხმარება გამომავალი ეტაპების გავლით დენის გადინების გამო
CMOS (მათ შორის ხანდახან, როცა მიკროცირკულა ძილის რეჟიმშია,
სმ. თავი 14). PicoPower ტექნოლოგიით მიკროსქემებს ეს ნაკლი არ აქვთ.

AVR სქემებში გამოყენების ზოგიერთი მახასიათებელი

MK ქინძისთავების უმეტესობას აქვს ჩაშენებული დანამატი „აწევა“
(ე.ი. დაკავშირებული დენის ავტობუსთან) რეზისტორი, რომელიც, როგორც ჩანს, გადაჭრის ერთ-ერთს
მიკროსქემის საერთო პრობლემები, როდესაც საჭიროა ასეთი რეზისტორის არსებობა
ორი პინიანი ღილაკების ან "ღია კოლექტორის" გამოსასვლელების დასაკავშირებლად.
თუმცა, კრიტიკულ შემთხვევებში გარე რეზისტორი, რომლის წინააღმდეგობაა 2–
5 kOhm (მოხმარების კრიტიკულ შემთხვევებში 10-30 kOhm-მდე).
ასაწევი რეზისტორი უნდა დამონტაჟდეს არა მხოლოდ /RESET პინზე
(რაზეც იქნება განხილული თავი 2), არამედ იმ შემთხვევაში, როდესაც SCK, MOSI და MISO ქინძისთავები
შესაბამისი პორტები გამოიყენება პროგრამირებისთვის და დაკავშირებულია
ISP პროგრამირების კონექტორი (იხ თავი 5), ასევე გარე შეფერხებების გამოსვლებიდან
ვანია, თუ ისინი მონაწილეობენ. თუ ეს დასკვნები არ არის "გაყვანილი" ძაბვამდე
ელექტრომომარაგება დამატებითი რეზისტორებით (თუმცა ეს არ არის მითითებული ტექნიკურში
დოკუმენტაცია), მაშინ არ არის გამორიცხული გარე შეფერხებების ცრუ გააქტიურება,
სისტემის გადატვირთვა და ძალიან ძლიერი ჩარევით - მეხსიერების პროგრამის დაზიანებაც კი -
ამ პროგრამებს. მეორეს მხრივ, პროგრამირებისას გამომავალი ასევე ემსახურება როგორც

ნაწილი I. Atmel AVR-ის დიზაინისა და ექსპლუატაციის ზოგადი პრინციპები

ჩვეულებრივი პორტების უმეტესობა კონფიგურირებულია გამოსასვლელად და მოწყობილობა იყენებს
ენერგიის დაზოგვის რეჟიმები, "გაყვანის" რეზისტორების არსებობამ შეიძლება გამოიწვიოს
არასაჭირო დენის მოხმარებამდე (რეზისტორის საშუალებით გამომავალი ლოგიკურ ნულზე დაყენებისას
მხარეს, დენი მიედინება დენის წყაროდან MK-ის შესასვლელში). თუ ერთ-ერთი ხელახლა
ენერგიის დაზოგვის რეჟიმები, თქვენ უნდა ყურადღებით გაანალიზოთ წრე, რომ გამოიყენოთ
მოიცავს სიტუაციებს, როდესაც დენი გადის ამ რეზისტორებში.
ასევე ყოველთვის უნდა დააინსტალიროთ გარე რეზისტორები MK ქინძისთავებზე მუშაობისას
საერთო ავტობუსი, როგორც ინტერფეისში I

C (ან უბრალოდ MK შეყვანის დაკავშირებით

სხვა ღია კოლექტორის მოწყობილობის გამომავალი, როგორიცაა ელექტრომომარაგების მონიტორები
განვითარებული მოვლენები აღწერილია თავი 3), ორ პინიან ღილაკებთან დაკავშირებისას (განსაკუთრებით
თუ არის გარე შეფერხება, იხილეთ თავი 4და 5 ). ჩამონტაჟებული წინააღმდეგობა
რეზისტორი (სინამდვილეში, რა თქმა უნდა, საველე ეფექტის ტრანზისტორი)
ასეთ შემთხვევებში ძალიან დიდია ელექტრომაგნიტური ჩარევისთვის ("on-
არაყი“) ეფექტურად „ისხდნენ“ მასზე.
AVR ჩიპები, ისევე როგორც ნებისმიერი CMOS ლოგიკა, მათი მაღალი ზღურბლის გამო
საკინძები ეფექტურად არის დაცული მიწისქვეშა ავტობუსში ჩარევისგან. თუმცა ისინი იქცევიან
გაცილებით უარესი ჩარევით დენის ავტობუსში. ამიტომ, არ დაივიწყოთ გაშლა-
დენის კონდენსატორები, რომლებიც უნდა დამონტაჟდეს პირდაპირ კვების წყაროს ქინძისთავებზე
tania (კერამიკული 0,1–0,5 μF), ასევე ქსელის გამსწორებლების ხარისხის შესახებ და
სტაბილიზატორები.

C H A P T E R

ზოგადი მოწყობილობა
მეხსიერების ორგანიზაცია,
დაკვრა, გადატვირთვა

AVR MK-ის შიდა სტრუქტურის ზოგადი სტრუქტურა ნაჩვენებია ნახ. 2.1. Ამაში
დიაგრამაზე ნაჩვენებია AVR-ის ყველა ძირითადი კომპონენტი (გარდა JTAG მოდულისა);
ზოგიერთ მოდელში, ზოგიერთი კომპონენტი შეიძლება აკლია ან განსხვავებული -
მახასიათებლები, მხოლოდ საერთო 8-ბიტიანი პროცესორი რჩება უცვლელი
ახალი ბირთვი (GPU, ზოგადი დამუშავების განყოფილება). მოდით მოკლედ აღვწეროთ ყველაზე მნიშვნელოვანი კომპონენტები
ნენტები, რომელთა უმეტესობას მოგვიანებით დეტალურად განვიხილავთ.
დავიწყოთ მეხსიერებით. AVR სტრუქტურაში მეხსიერების სამი ტიპია: ფლეშ-
პროგრამის მეხსიერება, ოპერატიული მეხსიერება (SRAM) დროებითი მონაცემებისთვის და არასტაბილური მეხსიერებისთვის
მეხსიერება (EEPROM) მუდმივებისა და მონაცემების გრძელვადიანი შენახვისთვის. მოდით შევხედოთ მათ
ცალკე.

პროგრამის მეხსიერება

პროგრამების ჩაშენებული ფლეშ მეხსიერების მოცულობა AVR კონტროლერებში მერყეობს
1 KB ATtiny11-სთვის 256 KB-მდე ATmega2560-ისთვის. სახელის პირველი ნომერი შეიძლება -
გაყოფა შეესაბამება ამ მეხსიერების მნიშვნელობას სერიიდან: 1, 2, 4, 8, 16, 32, 64, 128 და
256 კბაიტი. პროგრამის მეხსიერებას, ისევე როგორც ნებისმიერ სხვა ფლეშ მეხსიერებას, აქვს გვერდი
ორგანიზაცია (გვერდის ზომა, მოდელის მიხედვით, მერყეობს 64-დან
256 ბაიტი). გვერდის დაპროგრამება შესაძლებელია მხოლოდ მთლიანობაში. ციკლების რაოდენობა
რეპროგრამირება 10 ათასს აღწევს.
პროგრამისტის თვალსაზრისით, პროგრამის მეხსიერება შეიძლება ჩაითვალოს აგებულად
ცალკეული უჯრედები - ორი ბაიტის სიტყვები. პროგრამის მეხსიერების მოწყობილობა (და მხოლოდ
ეს მეხსიერება) ორმაგი ბაიტი სიტყვებით - ძალიან მნიშვნელოვანი წერტილი, რომელიც უნდა იყოს
მტკიცედ დაჯექი. ეს ორგანიზაცია განპირობებულია იმით, რომ ნებისმიერი გუნდი AVR-ში
არის ზუსტად ორი ბაიტის სიგრძე. გამონაკლისი არის გუნდები

და ზოგიერთი

სხვები (მაგალითად,

), რომლებიც მუშაობენ 16 ბიტიანი და მეტი

მისამართები, ამ ბრძანებების სიგრძე ოთხი ბაიტია და ისინი გამოიყენება მხოლოდ
8 კბაიტზე მეტი პროგრამის მეხსიერების მოდელებში (დამატებითი ინფორმაციისთვის იხ თავი 5). In
ყველა სხვა შემთხვევაში, ბრძანების მრიცხველი გადაინაცვლებს, როდესაც შესრულდება შემდეგი.

ნაწილი I. Atmel AVR-ის დიზაინისა და ექსპლუატაციის ზოგადი პრინციპები

ბრძანებები ორ ბაიტად (ერთი სიტყვა), ამიტომ მეხსიერების საჭირო მოცულობა მარტივია
დათვლა, იცოდე გამოყენებული ბრძანებების რაოდენობა. აბსოლუტური მისამართები მეხსიერებაში
გრამი (მითითებულია, მაგალითად, შეფერხების ვექტორულ ცხრილებში ტექნიკურ
MK-ის აღწერა) ასევე ითვლება სიტყვებით.

ბრინჯი. 2.1. AVR მიკროკონტროლერების ზოგადი ბლოკ-სქემა

შენიშვნები ზღვარზე

მოვიყვანოთ საინტერესო მიმართვის შემთხვევის მაგალითი, რომელიც წარმოადგენს
ბრძანება მუდმივების წაკითხვისთვის LPM მეხსიერებიდან (ასევე ELPM MK-ში პროგრამის მეხსიერებით
128

კბაიტი ან მეტი). ეს ბრძანება მოიცავს წაკითხვას ბაიტიმითითებული მისამართი -

nomu ორ უმაღლეს RON-ში (ე.წ. Z რეგისტრის ფორმირება, იხილეთ ქვემოთ). თუმცა, იმისათვის რომ არ
არღვევს პროგრამის მეხსიერების ორგანიზების კონცეფციის „სიწმინდეს“, დეველოპერების აზრით
დააბნია ეს მარტივი კითხვა აღწერილობაში მითითებით, რომ LPM ბრძანების გამოძახებისას ძველი
Z რეგისტრის მისამართის შემდეგი 15 ბიტი სიტყვამეხსიერებაში და ირჩევს ყველაზე ნაკლებად მნიშვნელოვან ციფრს
დაბალი ან მაღალი ბაიტი (თუ ბიტი უდრის 0-ს ან 1-ს, შესაბამისად).

სიტყვები. თუმცა ადვილი შესამჩნევია, რომ მეხსიერების ბაიტი და სიტყვის ორგანიზაცია როცა
com მიდგომა ექვივალენტურია.

არსებული პროგრამის მეხსიერების ბოლო მისამართი კონკრეტული მოდელისთვის
აღინიშნება მუდმივით

ნაგულისხმევად, ყველა AVR კონტროლერი ყოველთვის არის

დაიწყეთ პროგრამის შესრულება $0000 მისამართზე. თუ პროგრამაში შეფერხება არ არის
ny, მაშინ აპლიკაციის პროგრამა შეიძლება დაიწყოს ამ მისამართიდან. წინააღმდეგ შემთხვევაში

ჩაი ამ მისამართზე არის ე.წ. მაგიდა შეწყვეტის ვექტორები, დეტალები
რაზეც ვისაუბრებთ თავები 4და 5 . აქ მხოლოდ აღვნიშნავთ, რომ პირველი
ეს ცხრილი (იმავე მისამართზე $0000) ყოველთვის შეიცავს გადატვირთვის ვექტორს

რაც მიუთითებს MK-ის გადატვირთვისას ჩატარებულ პროცედურაზე (მათ შორის
დენის ჩართვისას).

ᲨᲔᲜᲘᲨᲕᲜᲐ

AVR ასამბლერში შეგიძლიათ წარმოადგინოთ თექვსმეტობითი რიცხვები "პასკალში"
სტილი, რომელსაც წინ უძღვის $ ნიშანი, ხოლო C ენის სტილი (0x00) ასევე მოქმედებს, მაგრამ
"ინტელის" მეთოდი (00 სთ) არ მუშაობს. წაიკითხეთ მეტი სხვადასხვა რიცხვების აღნიშვნების შესახებ
რიცხვითი სისტემები AVR ასამბლერში, იხ თავი 5.

მეგა ოჯახის კონტროლერების ბოლო პროგრამის მეხსიერების მისამართები შეიძლება შეიცავდეს
ტყუილი ე.წ მტვირთავი- სპეციალური პროგრამა, რომელიც მართავს დატვირთვას და
აპლიკაციის პროგრამების გადმოტვირთვა ძირითადი მეხსიერებიდან. Ამ შემთხვევაში,
გადატვირთვის ვექტორის მდებარეობა და მთელი შეფერხების ვექტორული ცხრილი (ე.ი. რეალურად ჩართულია-
საწყისი მისამართი, საიდანაც იწყება პროგრამის შესრულება) შეიძლება შეიცვალოს
შეუძლებელია სპეციალური კონფიგურაციის უჯრედების დაყენებით (იხ. თავი 5).

მონაცემთა მეხსიერება (RAM, SRAM)

პროგრამის მეხსიერებისგან განსხვავებით, მონაცემთა მეხსიერების მისამართის სივრცე არის მისამართით
ბაიტი ბაიტი (არა სიტყვა სიტყვით). მიმართვა არის სრულიად წრფივი, ყოველგვარი დაყოფის გარეშე
გვერდებზე, სეგმენტებში ან ქილებში, როგორც ეს ჩვეულებრივ ზოგიერთ სხვა სისტემაშია.
თინიების ოჯახის უმცროსი MKs (მათ შორის Tiny1 Xდა Tiny28) მონაცემთა მეხსიერება, როგორიცაა
ყვირიან, ისინი არა, შემოიფარგლება მხოლოდ რეგისტრის ფაილით (RON) და შეყვანის რეგისტრებით
დიახ-გამომავალი (RVV). სხვა მოდელებში ჩაშენებული SRAM-ის რაოდენობა მერყეობს
128 ბაიტი Tiny ოჯახის წევრებში (მაგალითად, ATtiny2313) 4-8 კბაიტამდე
მეგას ძველი მოდელებისთვის.
სტატიკური მონაცემთა მეხსიერების (SRAM) მისამართის სივრცე პირობითად იყოფა
რამდენიმე სფერო ნაჩვენებია ნახ. 2.2. ნაწილი დან
დაკავშირებულია თავად ჩაშენებულ SRAM-თან, მანამდე მისამართების თანმიმდევრობით განლაგებულია
მაგრამ რეგისტრების მისამართის სივრცე (პირველი 32 ბაიტი იკავებს RON-ს, კიდევ 64 -
RVV). ძველი მეგა მოდელებისთვის რთული სტრუქტურით (მაგალითად, ATmega128)
64 I/O რეგისტრი შეიძლება არ იყოს საკმარისი, ამიტომ დამატებითი
დამატებით RVV-ებს ეთმობა ცალკე მისამართის სივრცე ($60-დან მაქს.
მაქსიმალური შესაძლო მნიშვნელობა $FF ბაიტის მისამართით, ასეთი რეგისტრების საერთო რაოდენობა შეიძლება
შესაძლოა მხოლოდ 160).

შენიშვნები ზღვარზე

AVR MK-ის არქიტექტურაში „შემავალი-გამომავალი“ კონცეფცია გამოიყენება ორი მნიშვნელობით: პირველ რიგში.

პირველი, არის „შესვლის/გამოსვლის პორტები“ (I/O პორტები), რომლებშიც განვიხილავთ თავი 3.
მეორეც, "შემავალი-გამომავალი რეგისტრები" (IO) AVR სტრუქტურაში არის რეგისტრები
რომლებიც უზრუნველყოფენ წვდომას დამატებით კომპონენტებზე გარედან

GPU-სთან კავშირი, RAM-ის გარდა (მათ შორის I/O პორტები). ასეთი ქვე-
განცალკევება აახლოებს AVR MK-ის სტრუქტურას პერსონალის ნაცნობ კონფიგურაციასთან
კომპიუტერი, სადაც წვდომა აქვს ნებისმიერ გარედან ცენტრალურ პროცესორზე
მეხსიერების გარდა სხვა კომპონენტებზე წვდომა ხდება I/O პორტების მეშვეობით.

ნაწილი I. Atmel AVR-ის დიზაინისა და ექსპლუატაციის ზოგადი პრინციპები

ზოგიერთი მეგა მოდელისთვის (ATmega8515, ATmega162, ATmega128, ATmega2560
და ა.შ.) შესაძლებელია გარე მეხსიერების დაკავშირება მდე
64 კბ, რომელიც შეიძლება იყოს ნებისმიერი სტატიკური
მრავალფეროვნება (SRAM, Flash ან EEPROM) პა-
პარალელური ინტერფეისი.
გაითვალისწინეთ, რომ RON და RVV მისამართები არ წაიღეთ
მონაცემთა RAM-ის სივრცე (გარდა მიერთებულისა
მოსალოდნელი გარე მეხსიერება ძველი მეგა მოდელებისთვის,
რომლის მაქსიმალური მისამართი შეზღუდულია მნიშვნელობით
$FFFF): ასე რომ, თუ კონკრეტულ MK მოდელს აქვს
512 ბაიტი SRAM და რეგისტრის სივრცე იკავებს
ჯერ 96 ბაიტი (მისამართამდე $60), შემდეგ SRAM მისამართები
დაიკავებს მისამართების ადგილს $0060-დან $025F-მდე
(ანუ 96-დან 607-ე უჯრედის ჩათვლით). Დასასრული
ჩაშენებული მონაცემთა მეხსიერება მითითებულია მუდმივით

ბრინჯი. 2.2.მისამართების სივრცე

სტატიკური მონაცემთა მეხსიერება (SRAM)

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

მეხსიერების წაკითხვის/ჩაწერის ოპერაციები ერთნაირად მუშაობს ნებისმიერი მისამართიდან
ბლაგვი სივრცე და SRAM-თან მუშაობისას ფრთხილად უნდა იყოთ: ნაცვლად
მეხსიერების ჩაწერით, თქვენ შეგიძლიათ მარტივად „მოხვიდეთ“ ზოგიერთ რეესტრში. Მაგალითად,
დაარეგისტრირე მნიშვნელობა დატვირთვის ბრძანება

რეესტრში

) ექვივალენტია

წერს SRAM მისამართზე ნულოვანი (

). მისამართი RON sov-სთვის

ეცემა მისი ნომრით. ამავდროულად, მისი მიხედვით RVV-ში პირდაპირი შესვლისთვის
მისამართი მეხსიერებაში უნდა დაემატოს 20$ რეგისტრის ნომერს: ამგვარად, დროშის რეგისტრი

რომელიც მოდელების უმეტესობისთვის მდებარეობს RVV ცხრილის ბოლოს
$3F, აქვს მისამართი $5F მეხსიერებაში. დააინსტალირეთ RON და RVV პირდაპირი მისამართით pa-
არასასიამოვნოა დამახსოვრება: ასეთი ჩანაწერი ყოველთვის იღებს ორ ზოლს ერთის ნაცვლად, როგორც წესი
გამოიყენეთ სხვა ბრძანებების უმეტესობა, თუმცა ეს ზოგჯერ შეიძლება გვერდის ავლით შეზღუდვებს
ზოგიერთი RVV-ის მანიპულირება. მაგრამ თუ არის მზა პროგრამა, მე ვმუშაობ -
SRAM-ით, მაშინ პროცესორის მოდელების ძველით შეცვლისას თქვენ უნდა იყოთ
ფრთხილად, იმის გამო, რომ მათში დაბალი SRAM მისამართები შეიძლება გადაფარდეს
დამატებითი RVV.

თავი 2. ზოგადი სტრუქტურა, მეხსიერების ორგანიზაცია, დათვლა, გადატვირთვა

არასტაბილური მონაცემთა მეხსიერება (EEPROM)

ყველა AVR MK მოდელს (გარდა შეწყვეტილი ATtiny11-ისა) აქვს ჩაშენებული
EEPROM მუდმივებისა და მონაცემების შესანახად, როდესაც ელექტროენერგია გამორთულია.
სხვადასხვა მოდელებში მისი მოცულობა მერყეობს 64 ბაიტიდან (ATtiny1x) 4 კბაიტამდე (უფრო მაღალი).
მეგა მოდელები). EEPROM-ის დასასრული მითითებულია მუდმივით

(ეს აღნიშნავს

ეს დანერგილია მხოლოდ მოგვიანებით AVR მოდელებისთვის, ამიტომ გამოყენებისას
ზოგჯერ თავად მოგიწევთ ამ მუდმივის განსაზღვრა). გადატვირთვის ციკლების რაოდენობა
EEPROM პროგრამირებამ შეიძლება მიაღწიოს 100 ათასს.
შეგახსენებთ, რომ EEPROM განსხვავდება Flash-ისგან შერჩევითი პრო-
ბაიტი-ბაიტი პროგრამირება (პრინციპში, ცოტ-ცოტა, მაგრამ ეს მეთოდი მიუწვდომელია
მომხმარებელი). თუმცა, EEPROM ოჯახის ძველ მოდელებში, როგორიცაა ფლეშ მეხსიერება
პროგრამები, აქვს გვერდების ორგანიზაცია, თუმცა ეს გვერდები მცირეა - მდე
თითო 4 ბაიტი. პრაქტიკაში, როგორც EEPROM-ის სერიულად დაპროგრამებისას
სხეულის არხი (ანუ SPI პროგრამირების ინტერფეისის საშუალებით) და ჩაწერისას და
პროგრამიდან EEPROM-ის წაკითხვისას, ამ ფუნქციას მნიშვნელობა არ აქვს და წვდომა არის
ნაჩვენებია ბაიტი ბაიტი.
EEPROM-დან კითხვა ხორციელდება ერთი მანქანური ციკლის ფარგლებში (თუმცა
პრაქტიკაში, ის გადაჭიმულია ოთხ ციკლზე, მაგრამ პროგრამისტმა უნდა თვალყური ადევნოს ამას.
არ არის საჭირო). მაგრამ EEPROM-ზე წერა გაცილებით ნელია,
და, უფრო მეტიც, ზუსტად განუსაზღვრელი სიჩქარით: ერთი ბაიტის ჩაწერის ციკლი
მიიღოს 2-დან ~4 ms-მდე ან მეტი. ჩაწერის პროცესი რეგულირდება ჩაშენებული რ.-
გენერატორი, რომლის სიხშირე არასტაბილურია (დაბალი მიწოდების ძაბვაზე
შეგიძლიათ ველით, რომ ჩაწერის დრო უფრო გრძელი იქნება). ასეთ დროს ნორმალურ პირობებში,
მაღალ სიხშირეებზე MK ახერხებს რამდენიმე ათასი ბრძანების შესრულებას, ამიტომ პროგრამა
ჩაწერის პროცედურა მოითხოვს ზრუნვას: მაგალითად, თქვენ უნდა უზრუნველყოთ ეს
ისე, რომ ჩაწერის დროს შეფერხება არ "გაჭედოს" (დაწვრილებით ამის შესახებ იხ. გლა-
შენ 4
და 9 ).
EEPROM-თან მუშაობისას მთავარი სირთულე არის მისი კომპონენტების დაზიანების შესაძლებლობა.
ტარდება მაშინ, როდესაც მიწოდების ძაბვა არ მცირდება საკმარისად სწრაფად
გათიშვა ეს გამოწვეულია იმით, რომ როდესაც მიწოდების ძაბვა მცირდება
გარკვეული ბარიერი (სტაბილური მუშაობის ზღურბლზე ქვემოთ, მაგრამ არასაკმარისი სრული
გამორთვა) ძაბვის რყევების გამო, MK იწყებს თვითნებურ შესრულებას
ნარი ბრძანებები, მათ შორის EEPROM-ზე წერის პროცედურის განხორციელების შესაძლებლობა. თუ
გაითვალისწინეთ, რომ ტიპიური AVR MK ბრძანება შესრულებულია მიკროწამის მეათედში,
მაშინ ცხადია, რომ ვერც ერთი რეალური ენერგიის წყარო ვერ უზრუნველყოფს შემცირებას
საჭირო დროში ძაბვა ნულამდე. ავტორის გამოცდილებით, როდესაც იკვებება ჩვეულებრივი
სტაბილიზატორი ტიპის LM7805 ტევადობის რეკომენდებული მნიშვნელობებით
შეყვანისა და გამოსვლისას EEPROM-ის შიგთავსი აუცილებლად დაზიანდება იმის გამო
დაახლოებით ნახევარი დროის.
ეს პრობლემა არ უნდა არსებობდეს, თუ მუდმივები ჩაიწერება EEPROM-ში
MK-ის დაპროგრამებისას, მაგრამ პროგრამაში ჩაწერის პროცედურა არ არის (დაახლოებით
როგორ გენერირება მონაცემთა ფაილი EEPROM, იხ განყოფილება "დირექტივები და ფუნქციები"
მე-5 თავის ტიონში
). მონაცემთა უფრო მაღალი უსაფრთხოება ასეთ შემთხვევებში დასტურდება ემ-

ნაწილი I. Atmel AVR-ის დიზაინისა და ექსპლუატაციის ზოგადი პრინციპები

პირიული დაკვირვებები და ის ფაქტი, რომ EEPROM-ში ჩაწერის ნებართვა პროცედურულია
ra ორეტაპიანი (იხ. თავი 9). ყველა სხვა შემთხვევაში (და არის, ცხადია,
აბსოლუტური უმრავლესობა - მომხმარებლის პარამეტრები ყველაზე ხშირად ინახება EEPROM-ში
ახალი და მიმდინარე კონფიგურაცია დენის გამორთვისას) უნდა იქნას მიღებული
სპეციალური ზომები. მათგან ყველაზე კარდინალური და უნივერსალური დებულებაა
ახალი გარე მონიტორი, რომელიც ინახავს MK-ს გადატვირთვის მდგომარეობაში, როდესაც
მიწოდების ძაბვა მცირდება ზღვრული მნიშვნელობის ქვემოთ. იგივე მიზანს ემსახურება
ჩაშენებული ძაბვის ვარდნის დეტექტორი (Brown-out Detection, BOD), ხელმისაწვდომია
თითქმის ყველა Tiny და Mega მოდელში, მაგრამ ტექნიკური დოკუმენტაცია არ გამორიცხავს
ამავდროულად, აუცილებელია მისი დუბლირების საიმედოობის უზრუნველყოფა გარე დენის მონიტორით.
დამატებითი ინფორმაციისთვის BOD მიკროსქემისა და MK გადატვირთვის რეჟიმების შესახებ იხ მოგვიანებით ამ თავშიდა პროგრამის შესახებ
EEPROM-ის ინსტალაციისა და მისი გამოყენებისას სიფრთხილის ზომების შესახებ იხ თავი 9.

საათის მეთოდები

MK-ის დაკვრის კანონიკური მეთოდი არის კვარცის რეზონატორის დაკავშირება
შესაბამისი დასკვნები (ნახ. 2.3, ). სიმძლავრე C1 და C2 კონდენსატორები ტიპიური
შემთხვევა უნდა იყოს 15-22 pF (შეიძლება გაიზარდოს 33-47 pF-მდე ერთიდან
მოხმარების დროებითი ზრდა). თინის და მეგა მოდელების უმეტესობას აქვს
არსებობს სპეციალური კონფიგურაციის ბიტი

რომელიც მორგების საშუალებას გაძლევთ

მოხმარება. როდესაც ეს ბიტი დაყენებულია 1-ზე (დაპროგრამებული მდგომარეობა)
გენერატორის რხევების დიაპაზონი მცირდება, მაგრამ ამავე დროს შესაძლებელია
სიხშირის დიაპაზონი და ზოგადი ხმაურის იმუნიტეტი, ამიტომ გამოიყენეთ ეს რეჟიმი
Არარეკომენდირებული. ასევე შეიძლება შეირჩეს დაბალი სიხშირის კვარცის რეზონატორი
(მაგალითად, "საათობრივი" 32,768 ჰც), ხოლო C1 და C2 კონდენსატორები შეიძლება არ იყოს -
vat, რადგან ინსტალაციის დროს

მნიშვნელობა 0 მოიცავს მათში ჩართულს

MK შიდა კონდენსატორები 36 pF სიმძლავრით.
კვარცის რეზონატორი შეიძლება შეიცვალოს კერამიკულით. ამ სტრიქონების ავტორმა მოახერხა
გაუშვით MK არასტანდარტულ სიხშირეებზე, კვარცის ნაცვლად იმავე ქვე-ში.
მინიატურული ინდუქციის ჩათვლით (მისი მნიშვნელობით 4,7 μH და სიმძლავრეებით
91 pF კონდენსატორი, სიხშირე დაახლოებით 10 MHz), რაც ამავდროულად საშუალებას იძლევა ცოტა
წრედის ზომების შემცირება.
ბუნებრივია, MC-ის დაკვრა შესაძლებელია გარე გენერატორიდანაც (ნახ. 2.3, ). ოსო-
ეს განსაკუთრებით მოსახერხებელია, როდესაც საჭიროა MK-ის სინქრონიზაცია გარე კომპონენტებთან
ან მიიღეთ ძალიან ზუსტი საათის სიხშირე შესაბამისის არჩევით
აფეთქების გენერატორი (მაგალითად, Epson SG-8002 სერია).
პირიქით, როდესაც სიზუსტე არ არის საჭირო, შეგიძლიათ დააკავშიროთ გარე რ.- ჯაჭვი
(ნახ. 2.3, ). ამ წრეში ტევადობა C1 უნდა იყოს მინიმუმ 22 pF და რეზისტორი R1
არჩევა 3.3-100 kOhm დიაპაზონიდან. სიხშირე განისაზღვრება ფორმულით
= 2/3 რ.. თქვენ საერთოდ არ გჭირდებათ C1-ის დაყენება, თუ ჩაწერთ ჟურნალს. 0 კონფიგურაციაში -
tion უჯრედი

ამგვარად აკავშირებს შიდა 36 pF კონდენსატორს.

საბოლოოდ, შეგიძლიათ მთლიანად მიატოვოთ გარე კომპონენტები და დაკმაყოფილდეთ ჩაშენებული
ნომ რ.- გენერატორი, რომელსაც შეუძლია იმუშაოს დაახლოებით ოთხზე

თავი 2. ზოგადი სტრუქტურა, მეხსიერების ორგანიზაცია, დათვლა, გადატვირთვა

სიხშირის მნიშვნელობები (1, 2, 4 და 8 MHz). ზოგიერთი მოდელი იძლევა შესაძლებლობას
ამ გენერატორის სიხშირის რეგულირება (დამატებითი ინფორმაციისთვის იხილეთ ან ტექნიკური აღწერა
კონკრეტული მოდელები). ეს შესაძლებლობა საუკეთესოდ გამოიყენება
ახალგაზრდა Tiny მოდელები, წარმოებული 8-პინიან პაკეტში - შემდეგ დასკვნები
შექმნილია რეზონატორის ან გარე გენერატორის დასაკავშირებლად, შეგიძლიათ
გამოიყენეთ სხვა მიზნებისთვის, როგორიცაა ჩვეულებრივი I/O პორტები.

ბრინჯი. 2.3. AVR მიკროკონტროლერის დაკვრის მეთოდები: - კვარცის რეზონატორი;

- გარე გენერატორი; - რ.- ჯაჭვები

კლასიკური ჩაშენებული ოჯახი რ.- არ აქვს გენერატორი, მაგრამ სპეციალური კონფიგურაცია-

ამ MK-ებს აქვთ მნიშვნელოვნად ნაკლები tion უჯრედები და ზოგადად მათი გამოყენება შეუძლებელია

ყურადღების მიქცევა. სხვა ოჯახებში ეს ასე არ არის. ნაგულისხმევი MK ოჯახები

თინი და მეგა მზად არიან იმუშაონ ჩაშენებული გენერატორით
სიხშირე 1 MHz (

0001), ასე რომ, სხვა რეჟიმებისთვის საჭიროა შესაბამისი

დააინსტალირეთ კონფიგურაციის უჯრედები სწორად

(იხ. ცხრილი 2.1). სადაც

გასათვალისწინებელია, რომ უჯრედების მდგომარეობა

0000 (სარკისებური მიმართებით

ყველაზე ხშირად გამოყენებული მნიშვნელობა კვარცის რეზონატორისთვის 1111) არის ხელახალი

აყენებს MK-ს საათის რეჟიმში გარე გენერატორიდან და ამავე დროს არ შეუძლია

თუნდაც პროგრამა გარე სიხშირის მიწოდების გარეშე. რეკომენდებული პარამეტრების შესახებ

კონფიგურაციის უჯრედებისა და მათი პროგრამირების მახასიათებლებისთვის იხილეთ ასევე

თავი 5.

ცხრილი 2.1.კონფიგურაციის უჯრედების დაყენება CKSEL

დამოკიდებულია საათის რეჟიმებზე

CKSEL3...0

საათის წყარო

სიხშირე

გარე სიხშირე

ჩაშენებული რ.- გენერატორი

ჩაშენებული რ.- გენერატორი

ჩაშენებული რ.- გენერატორი

ჩაშენებული რ.- გენერატორი

გარე რ.- ჯაჭვი

ნაწილი I. Atmel AVR-ის დიზაინისა და ექსპლუატაციის ზოგადი პრინციპები

ცხრილი 2.1(დამთავრებული)

CKSEL3...0

საათის წყარო

სიხშირე

გარე რ.- ჯაჭვი

0.9... 3.0 MHz

გარე რ.- ჯაჭვი

3.0... 8.0 MHz

გარე რ.- ჯაჭვი

8.0... 12 MHz

დაბალი სიხშირის რეზონატორი

კვარცის რეზონატორი

0.4... 0.9 MHz

კვარცის რეზონატორი

0.9... 3.0 MHz

კვარცის რეზონატორი

3.0... 8.0 MHz

1xxx (CKPOT=0)

კვარცის რეზონატორი

გადატვირთვა

გადატვირთვა (RESET) არის MK-ის საწყისი მუშაობის რეჟიმის დაყენება. სადაც
ყველა RVV დაყენებულია ნაგულისხმევ მდგომარეობაში - როგორც წესი, ეს არის ნულები
ყველა კატეგორია, რამდენიმე გამონაკლისის გარდა (მაგრამ RON-ს შეუძლია მიიღოს წარმოება
უფასო მნიშვნელობები, ასე რომ, საჭიროების შემთხვევაში, დაიწყეთ კონკრეტულით
ცვლადი მნიშვნელობები უნდა იყოს მითითებული პროგრამის დასაწყისში იძულებით).
გადატვირთვის შემდეგ, პროგრამა იწყებს შესრულებას საწყისი მისამართიდან (ნაგულისხმევად
ეს არის მისამართი $0000).
გადატვირთვა ყოველთვის ხდება დენის ჩართვისას. გარდა ამისა, გადატვირთვის წყაროები
შეიძლება მოხდეს შემდეგი მოვლენები: ტექნიკის გადატვირთვა, ანუ დაბალი დონის მიწოდება
ძაბვა RESET შეყვანაზე (უფრო სწორია მისი აღნიშვნა ინვერსიით: /RESET, რადგან
აქ აქტიური დონე დაბალია და ჩვენ დავიცავთ ამ წესს); დაასრულა
დაყენებული მაკონტროლებელი ტაიმერის ინტერვალის ათვლა; მიკროსქემის გააქტიურება
ბოდ. სტატუსის რეესტრის ყველაზე ნაკლებად მნიშვნელოვანი ოთხი ბიტის მნიშვნელობა

უნდა სიგნალი

ინფორმაცია წყაროს შესახებ, საიდანაც განხორციელდა გადატვირთვა წინა ჯერზე (დაინსტალირებული
ახალი 1 ბიტი 0 - ჩართვის გადატვირთვა, ბიტი 1 - აპარატურის გადატვირთვა, ბიტი 2 - დან
BOD სქემები, ბიტი 3 - დამკვირვებლის ტაიმერიდან). პრაქტიკაში, ავტორის გამოცდილების მიხედვით, შესაბამისად
ამ რეესტრის მდგომარეობები საიმედოდ განსხვავდება ყველა დანარჩენისგან მხოლოდ შტატებში
ტაიმერის გადატვირთვა (სხვა დროშები შეიძლება დაყენდეს ერთდროულად)
დროებით). მიუხედავად ამისა, ეს ინფორმაცია შეიძლება სასარგებლო იყოს, მაგალითად, ანალიზის დროს
მთელი საათის განმავლობაში მომუშავე მოწყობილობების მუშაობის შეფერხების მიზეზების ანალიზი (იხ. თავი 12).
Tiny ოჯახის უმცროსი MK-ებს (გარდა ATtiny28-ისა) არ აქვთ ჩაშენებული „აწევა“
th" რეზისტორი /RESET პინზე, ამიტომ საიმედო მუშაობისთვის სიფრთხილის ზომები უნდა იქნას მიღებული
იხილეთ 2-5 kOhm გარე რეზისტორის კავშირი ამ პინიდან
მიწოდების ძაბვა. ავტორი ასევე მკაცრად გირჩევთ ინსტალაციას
შესაფერისი რეზისტორი ნებისმიერი AVR მოდელისთვის, რადგან ჩაშენებულ რეზისტორის აქვს დიდი
მაღალი ნომინალური მნიშვნელობა (100-500 kOhm) და მასზე შეიძლება იყოს გამოწვეული ხმაური, რამაც შეიძლება გამოიწვიოს
არაპროგნოზირებად გადატვირთვამდე. ასევე (თუმცა ტექნიკურ აღწერილობებში ასეთი

თავი 2. ზოგადი სტრუქტურა, მეხსიერების ორგანიზაცია, დათვლა, გადატვირთვა

შეკეთება და არ შეიცავს) 0,1–0,5 μF კონდენსატორის დაყენება არ დააზარალებს
/გადასატვირთეთ გამომავალი მიწაზე - ეს არბილებს ძაბვის გარდაუვალ ვარდნას და
ძაბვის ამომავალი კიდე /RESET პინზე ოდნავ გრძელია ვიდრე
მიწოდების ძაბვის გაზრდით: როდესაც მიკროსქემის რეაგირების ზღვარი მიიღწევა
გადატვირთეთ, უკვე დამყარდება მთელი MK-ის მიწოდების ძაბვა.
Tiny მოდელებში, წარმოებული 8-პინიან პაკეტში (ATtiny11–ATtiny15),
თუ გარე გადატვირთვა არ არის საჭირო, /RESET პინს შეუძლია ფუნქციების ნორმალურად შესრულება
I/O პორტი. მხოლოდ ერთი გაფრთხილებით: ამის კონფიგურაციისას
გამომავალთან კონტაქტი, ის მუშაობს როგორც ღია კოლექტორის გამოსავალი და არა როგორც ჩვეულებრივი
nal ლოგიკური ელემენტი (პორტის ქინძისთავების კონფიგურაციისთვის იხ თავი 3).
ჩართვის გადატვირთვის ორგანიზების ყველაზე სასურველი გზა შემდეგია:
უკვე აღვნიშნეთ ადრე - გარე დენის მონიტორის დაყენება. მაგალითად, როდის
5 ვოლტიანი ელექტრომომარაგებისთვის შესაფერისია პოპულარული MC34064 მიკროსქემა ტრიგერის ზღურბლით.
4.6 ვ და ტიპიური მოხმარება დაახლოებით 300 μA ან უფრო თანამედროვე
ანალოგი (მაგალითად, MAX803L 12 μA მოხმარებით). სამი ვოლტიანი ელექტრომომარაგებისთვის
შესაფერისი წრე MAX803R (2.6 V) ან DS1816-ის შესაფერისი ვერსია შესაბამისი
მიმდინარე ძაბვა. ყველა ჩამოთვლილი მიკროსქემა არის სამპინიანი (ძალა, დამიწება
la", გადატვირთვის კონტროლის პინი) და აქვს ღია კოლექტორის გამომავალი, ე.ი.
უზრუნველყოს ასაწევი რეზისტორის დაყენება. ტიპიური რეაგირების დრო
ამ მიკროსქემების ხანგრძლივობა, როდესაც ძაბვა მცირდება, არის მიკროწამები, რაც უზრუნველყოფს
მონაცემთა უსაფრთხოება EEPROM-ში. როდესაც ძაბვა იზრდება, ისინი უზრუნველყოფენ
დიდი დროის დაყოვნება (წამის წილადების თანმიმდევრობით), რაც საიმედოობის საშუალებას იძლევა
გადატვირთეთ MK დარტყმის გარეშე.
ჩამონტაჟებული BOD წრე უზრუნველყოფს რეაგირების დროებს მიკროწამების რიგითობით
ძაბვის აღდგენის შემდეგ სამუშაო მდგომარეობაში დაბრუნების დაგვიანება, ოპ-
განისაზღვრება იგივე პარამეტრებით, როგორც გადატვირთვის შეფერხება (უჯრედები

საათის სიხშირე 4 MHz) და მისი მაქსიმალური შესაძლო მნიშვნელობაც კი ~68 ms შეუძლია
აღმოჩნდება არასაკმარისი ძაბვის კლების დროს წარმოქმნილი ჭორების გვერდის ავლით
ავტონომიური წყაროს ელექტრომომარაგების ძაბვა. BOD მუშაობის რეჟიმის შესარჩევად გამოიყენეთ
დააჭირეთ სამი კონფიგურაციის უჯრედს

რომელსაც აქვს შემდეგი მდგომარეობები:

111 (ნაგულისხმევი პარამეტრი) - BOD წრე გამორთულია;

101 - ჩართავს BOD 2.7 ვ ოპერაციულ ზღურბლზე;

100 - შეესაბამება ზღურბლს 4.0 ვ.

გაითვალისწინეთ, რომ ოპერაციული საიმედოობის თვალსაზრისით, მით უფრო მცირეა განსხვავება
კვების მონიტორის მიწოდების ძაბვა და ბარიერი (გარე ან
ჩაშენებული BOD წრე, არ აქვს მნიშვნელობა), მით უკეთესი - მცირე დენის ტალღებით,
არ არის მგრძნობიარე მონიტორის მიმართ, თუმცა, შეიძლება მოხდეს ყველა სახის უხერხულობა.
სასიამოვნო, როგორიცაა სპონტანური გარეგანი შეფერხება. ერთი-
თუმცა, ეს განსხვავება გასათვალისწინებელია მოწყობილობის ბატარეებიდან კვებისას: მაგალითად,
ოთხი AA ტუტე ბატარეისთვის და დენის მონიტორისთვის, გამოთვალეთ
tannoy 4.7 V-ზე, ნარჩენი ძაბვა ელემენტებზე მონიტორის გაშვების შემდეგ

2015 წლის დეკემბერი

1. შემოთავაზებული მეთოდის უპირატესობები

მიკროკონტროლერებზე (MCU) დაფუძნებული მოწყობილობის სქემები, როგორც წესი, გამოირჩევიან ორი რთულად კომბინირებული თვისების კომბინაციით: მაქსიმალური სიმარტივე და მაღალი ფუნქციონირება. გარდა ამისა, ფუნქციონალობა შეიძლება შეიცვალოს და გაფართოვდეს მომავალში წრეში ცვლილებების შეტანის გარეშე - მხოლოდ პროგრამის შეცვლით (მოციმციმე). ეს მახასიათებლები აიხსნება იმით, რომ თანამედროვე მიკროკონტროლერების შემქმნელები ცდილობდნენ ერთ ჩიპზე მოეთავსებინათ ყველაფერი, რაც შეიძლება სჭირდებოდეს ელექტრონული მოწყობილობის დეველოპერს - მინიმუმ მაქსიმალურად. შედეგად, აქცენტი გადაინაცვლა სქემიდან და ინსტალაციისგან პროგრამულ უზრუნველყოფაზე. MK-ის გამოყენებით, ახლა ნაკლებია საჭირო მიკროსქემის ნაწილებით „დატვირთვა“ და კომპონენტებს შორის ნაკლები კავშირია. ეს, რა თქმა უნდა, ხდის წრეს უფრო მიმზიდველს გამეორებისთვის როგორც გამოცდილი, ისე დამწყები ელექტრონიკის ინჟინრებისთვის. მაგრამ, როგორც ყოველთვის, თქვენ უნდა გადაიხადოთ ყველაფერი. ეს ასევე არ იყო სირთულეების გარეშე. თუ თქვენ იყიდით ახალ MK-ს, დააინსტალირეთ ის სამსახურებრივი ნაწილებისგან სწორად აწყობილ წრეში და გამოიყენებთ ენერგიას, მაშინ არაფერი იმუშავებს - მოწყობილობა არ იმუშავებს. მიკროკონტროლერს სჭირდება პროგრამა.

როგორც ჩანს, ამითაც ყველაფერი მარტივია - ინტერნეტში შეგიძლიათ იპოვოთ მრავალი სქემა უფასო firmware-ით. მაგრამ აქ არის ერთი დაჭერა: firmware როგორმე უნდა იყოს "ატვირთული" მიკროკონტროლერში. მათთვის, ვისაც ეს აქამდე არასდროს გაუკეთებია, ასეთი დავალება ხშირად ხდება პრობლემა და მთავარი საძაგელი ფაქტორი, ხშირად აიძულებს მათ უარი თქვან MK–ს გამოყენების სიამოვნებაზე და მოძებნონ სქემები, რომლებიც დაფუძნებულია „ფხვიერ“ და ხისტ ლოგიკაზე. მაგრამ ყველაფერი არ არის ისეთი რთული, როგორც ერთი შეხედვით შეიძლება ჩანდეს.

ინტერნეტში პუბლიკაციების გაანალიზების შემდეგ, ხედავთ, რომ ეს პრობლემა ყველაზე ხშირად წყდება ორიდან ერთი გზით: მზა პროგრამისტის ყიდვა ან ხელნაკეთი პროგრამის დამზადება. ამავდროულად, ხელნაკეთი პროგრამისტების გამოქვეყნებული სქემები ძალიან ხშირად არაგონივრულად რთულია - ბევრად უფრო რთული, ვიდრე ეს ნამდვილად საჭიროა. რათქმაუნდა თუ MK-ის ჩართვას ყოველდღე გეგმავთ, ჯობია გყავდეთ "მაგარი" პროგრამისტი. მაგრამ თუ ასეთი პროცედურის საჭიროება ჩნდება იშვიათად, დროდადრო, მაშინ შეგიძლიათ საერთოდ პროგრამისტის გარეშე გააკეთოთ. არა, რა თქმა უნდა, ჩვენ არ ვსაუბრობთ იმაზე, რომ ვისწავლოთ ამის გაკეთება აზროვნების ძალით. ეს ნიშნავს, რომ იმის გაგებით, თუ როგორ ურთიერთქმედებს პროგრამისტი მიკროკონტროლერთან, როდესაც წერს და კითხულობს ინფორმაციას მის პროგრამირების რეჟიმში, ჩვენ შეგვიძლია შევასრულოთ ხელმისაწვდომი ხელსაწყოები უფრო ფართო მიზნისთვის. ამ ხელსაწყოებს მოუწევთ პროგრამისტის როგორც პროგრამული, ასევე აპარატურის ნაწილების შეცვლა. აპარატურა უნდა უზრუნველყოფდეს MK მიკროსქემთან ფიზიკურ კავშირს, მის შეყვანებზე ლოგიკური დონის გამოყენების და მისი გამომავალი მონაცემების წაკითხვის შესაძლებლობას. პროგრამულმა ნაწილმა უნდა უზრუნველყოს ალგორითმის მოქმედება, რომელიც აკონტროლებს ყველა საჭირო პროცესს. ჩვენ ასევე აღვნიშნავთ, რომ MK-ში ინფორმაციის ჩაწერის ხარისხი არ არის დამოკიდებული იმაზე, თუ რამდენად "მაგარია" თქვენი პროგრამისტი. არ არსებობს ისეთი რამ, როგორიცაა "უკეთესი ჩაწერილი" ან "უარესი". არსებობს მხოლოდ ორი ვარიანტი: "რეგისტრირებული" და "არ არის რეგისტრირებული". ეს აიხსნება იმით, რომ კრისტალის შიგნით ჩაწერის პროცესს უშუალოდ თავად MK აკონტროლებს. თქვენ უბრალოდ უნდა მიაწოდოთ მას მაღალი ხარისხის სიმძლავრე (ჩარევის ან ტალღის გარეშე) და სწორად მოაწყოთ ინტერფეისი. თუ ტესტის წაკითხვის შედეგები არ გამოავლენს შეცდომებს, მაშინ ყველაფერი რიგზეა - შეგიძლიათ გამოიყენოთ კონტროლერი მისი დანიშნულებისამებრ.

იმისათვის, რომ პროგრამა MK-ში ჩავიწეროთ პროგრამისტის გარეშე, გვჭირდება USB-RS232TTL პორტის გადამყვანი და ასევე. USB-RS232TTL გადამყვანი საშუალებას გაძლევთ გამოიყენოთ USB პორტი COM პორტის შესაქმნელად, რომელიც განსხვავდება "ნამდვილისგან" მხოლოდ იმით, რომ მისი შეყვანა და გამომავალი იყენებს TTL ლოგიკურ დონეებს, ანუ ძაბვას დიაპაზონში 0-დან 5 ვოლტამდე ( მეტი შეგიძლიათ წაიკითხოთ სტატიაში ""). ნებისმიერ შემთხვევაში, ასეთი კონვერტორი სასარგებლოა თქვენს "საყოფაცხოვრებო სახლში", ასე რომ, თუ ჯერ არ გაქვთ ის, ნამდვილად ღირს შეძენა. რაც შეეხება ლოგიკურ დონეებს, ჩვენს შემთხვევაში TTL არის უპირატესობაც კი ჩვეულებრივ COM პორტთან შედარებით, რადგან ასეთი პორტის შეყვანა და გამომავალი შეიძლება პირდაპირ დაუკავშირდეს ნებისმიერ მიკროკონტროლერს, რომელიც იკვებება 5 ვ, მათ შორის ATtiny და ATmega. მაგრამ არ შეეცადოთ გამოიყენოთ ჩვეულებრივი COM პორტი - ისინი იყენებენ ძაბვებს -12-დან +12 ვ-მდე (ან -15...+15 ვ) დიაპაზონში. ამ შემთხვევაში მიკროკონტროლერთან პირდაპირი კავშირი მიუღებელია!!!

Perpetuum M პროგრამისთვის სკრიპტის შექმნის იდეა, რომელიც ახორციელებს პროგრამისტის ფუნქციებს, გაჩნდა მას შემდეგ, რაც წაიკითხა ინტერნეტში მრავალი პუბლიკაცია, რომელიც გვთავაზობს გარკვეულ გადაწყვეტილებებს MK firmware-ისთვის. თითოეულ შემთხვევაში გამოვლინდა სერიოზული ხარვეზები ან გადაჭარბებული სირთულეები. ხშირად ვხვდებოდი პროგრამისტების სქემებს, რომლებიც შეიცავდნენ მიკროკონტროლერს და ამავდროულად, საკმაოდ სერიოზულად იძლეოდნენ რჩევებს, როგორიცაა: "... და ამ პროგრამისტისთვის მიკროკონტროლერის დასაპროგრამებლად დაგვჭირდება... ეს ასეა - სხვა პროგრამისტი!" შემდეგი, შესთავაზეს მეგობართან წასვლა, ფასიანი სერვისის ძებნა და ა.შ. ამ მიზნებისათვის ქსელში განაწილებული პროგრამული უზრუნველყოფის ხარისხი ასევე არ იყო შთამბეჭდავი - ბევრი პრობლემა შეინიშნებოდა როგორც ფუნქციონალურობით, ასევე მომხმარებლის ინტერფეისის „მოღრუბლულობით“. ხშირად დიდი დრო სჭირდება იმის გაგებას, თუ როგორ გამოიყენოთ პროგრამა - ის უნდა იქნას შესწავლილი თუნდაც უმარტივესი მოქმედებების შესასრულებლად. სხვა პროგრამას შეუძლია რაღაცის გაკეთება დიდი ხნის განმავლობაში და გულმოდგინედ, მაგრამ მომხმარებელი გაიგებს, რომ არაფერი იწერება MK-ზე მხოლოდ მას შემდეგ, რაც მთლიანი პროგრამული უზრუნველყოფა დასრულებულია და შემდგომი ტესტის წაკითხვა მოხდება. ასევე ჩნდება შემდეგი პრობლემა: მომხმარებელი ცდილობს შეარჩიოს თავისი MK მხარდაჭერილი კრისტალების სიიდან, მაგრამ ის არ არის სიაში. ამ შემთხვევაში, თქვენ ვერ შეძლებთ პროგრამის გამოყენებას - დაკარგული MK-ების სიაში ჩართვა, როგორც წესი, არ არის გათვალისწინებული. გარდა ამისა, სიიდან კონტროლერის ხელით არჩევა უცნაურად გამოიყურება, იმის გათვალისწინებით, რომ პროგრამისტს ხშირ შემთხვევაში შეუძლია თავად განსაზღვროს MK-ის ტიპი. ეს ყველაფერი ნათქვამია არა იმისთვის, რომ ტალახი გადაყაროს არსებულ პროდუქტებზე, არამედ იმისთვის, რომ ახსნას ამ სტატიაში აღწერილი Perpetuum M პროგრამის სკრიპტის გამოჩენის მიზეზი. პრობლემა ნამდვილად არსებობს და ის, პირველ რიგში, დამწყებთათვის ეხება, რომლებიც ყოველთვის არ ახერხებენ ამ „კედლის“ გადალახვას, რათა პირველი ნაბიჯი გადადგან მიკროკონტროლერების სამყაროში. შემოთავაზებული სკრიპტი ითვალისწინებს სხვა პროგრამებში აღმოჩენილ ხარვეზებს. დანერგილია ალგორითმის მოქმედების მაქსიმალური „გამჭვირვალობა“, უაღრესად მარტივი მომხმარებლის ინტერფეისი, რომელიც არ საჭიროებს სწავლას და არ ტოვებს დაბნეულობის და „არასწორ ნივთზე დაწკაპუნების“ შანსს. თუ საჭირო MK არ არის მხარდაჭერილთა შორის, შეგიძლიათ თავად დაამატოთ მისი აღწერა, აიღოთ საჭირო მონაცემები MK დეველოპერის ვებსაიტიდან გადმოწერილი დოკუმენტაციისგან. და, რაც მთავარია, სცენარი ღიაა შესწავლისა და მოდიფიკაციისთვის. ნებისმიერს შეუძლია ტექსტის რედაქტორში გახსნა, შეისწავლოს და დაარედაქტიროს საკუთარი შეხედულებისამებრ, შეცვალოს არსებული ფუნქციები თავისი გემოვნებით და დაამატოს დაკარგული.

სცენარის პირველი ვერსია შეიქმნა 2015 წლის ივნისში. ეს ვერსია უზრუნველყოფს მხოლოდ Atmel-ის ATtiny და ATmega სერიის მიკროკონტროლერების მხარდაჭერას ფლეშ მეხსიერების ჩაწერის/წაკითხვის, კონფიგურაციის ბიტების დაყენებისა და კონტროლერის ტიპის ავტომატურად ამოცნობის ფუნქციებით. EEPROM-ის ჩაწერა და კითხვა არ განხორციელებულა. იყო გეგმები სკრიპტის ფუნქციონირების დამატება. : დაამატეთ EEPROM-ის ჩაწერა და წაკითხვა, PIC კონტროლერების მხარდაჭერის დანერგვა და ა.შ. ამ მიზეზით სკრიპტი ჯერ არ გამოქვეყნებულა, მაგრამ დროის უქონლობის გამო გეგმის განხორციელება შეფერხდა და რომ საუკეთესო არ გახდეს სიკეთის მტერი გადაწყდა არსებული ვერსიის გამოქვეყნება თუ უკვე დანერგილი ფუნქციები არ იქნება საკმარისი გთხოვთ არ ინერვიულოთ ამ შემთხვევაში შეგიძლიათ თავად სცადოთ სასურველი ფუნქციის დამატება. არ დავმალავ: ამ სკრიპტის შექმნის იდეას თავდაპირველად ასევე აქვს საგანმანათლებლო მნიშვნელობა. ალგორითმის გაგების შემდეგ და მასში რაიმე საკუთარი დამატების შემდეგ, თქვენ შეძლებთ უკეთ გაიგოთ MK-ის მოქმედება პროგრამირების რეჟიმში, ასე რომ მომავალში თქვენ ვერ აღმოჩნდებით გოგონას პოზიციაში გაფუჭებული მანქანის წინ, რომელიც ჩაფიქრებული უყურებს მის შიგთავსს და ვერ ხვდება, რატომ "არ მუშაობს".

2. MK ინტერფეისი პროგრამირების რეჟიმში

კონტროლერის პროგრამირების რეჟიმში გადასაყვანად და ამ რეჟიმში მასთან მუშაობის რამდენიმე განსხვავებული გზა არსებობს. ყველაზე მარტივი დანერგვა ATtiny და ATmega სერიების კონტროლერებისთვის არის, ალბათ, SPI. ჩვენ გამოვიყენებთ მას.

მაგრამ სანამ დავიწყებთ SPI-ის გენერირებისთვის საჭირო სიგნალების განხილვას, ჩვენ გავაკეთებთ უამრავ დათქმას. მიკროკონტროლერს აქვს კონფიგურაციის ბიტები. ეს არის რაღაც გადამრთველის მსგავსი, გადართვა, რომელიც საშუალებას გაძლევთ შეცვალოთ მიკროსქემის ზოგიერთი თვისება პროექტის საჭიროებების შესაბამისად. ფიზიკურად, ეს არის არასტაბილური მეხსიერების უჯრედები, როგორიცაა ის, რომელშიც პროგრამა იწერება. განსხვავება ისაა, რომ მათგან ძალიან ცოტაა (ATmega-სთვის სამ ბაიტამდე) და ისინი არ არიან ნებისმიერი მეხსიერების მისამართის სივრცის ნაწილი. კონფიგურაციის მონაცემების ჩაწერა და წაკითხვა ხორციელდება ცალკეული ბრძანებებით MK პროგრამირების რეჟიმში. ახლა მნიშვნელოვანია აღინიშნოს, რომ ზოგიერთი კონფიგურაციის ბიტი გავლენას ახდენს SPI-ს გამოყენების უნარზე. მათი ზოგიერთი მნიშვნელობით, შეიძლება აღმოჩნდეს, რომ SPI არ შეიძლება გამოყენებულ იქნას. თუ ასეთ მიკროკონტროლერს წააწყდებით, ამ სტატიაში შემოთავაზებული მეთოდი არ გამოგადგებათ. ამ შემთხვევაში, თქვენ მოგიწევთ ან შეცვალოთ კონფიგურაციის ბიტების პარამეტრები პროგრამისტში, რომელიც მხარს უჭერს პროგრამირების სხვა რეჟიმს, ან გამოიყენოთ სხვა მიკროკონტროლერი. მაგრამ ეს პრობლემა ეხება მხოლოდ გამოყენებულ MK-ებს, ან მათ, რომლებთანაც ვინმემ უკვე წარუმატებლად "ითამაშა". ფაქტია, რომ ახალ MCU–ებს გააჩნია კონფიგურაციის ბიტის პარამეტრები, რომლებიც ხელს არ უშლის SPI–ს გამოყენებას. ამას ადასტურებს პროგრამისტის სკრიპტის ტესტის შედეგები Perpetuum M პროგრამისთვის, რომლის დროსაც ოთხი განსხვავებული MK (ATmega8, ATmega128, ATtiny13, ATtiny44) წარმატებით განათდა. სულ ახალი იყვნენ. კონფიგურაციის ბიტების საწყისი პარამეტრი შეესაბამებოდა დოკუმენტაციას და არ უშლიდა ხელს SPI-ს გამოყენებას.

ზემოაღნიშნულიდან გამომდინარე, ყურადღება უნდა მიაქციოთ შემდეგ ბიტებს. SPIEN ბიტი ცალსახად იძლევა ან გამორთავს SPI-ს გამოყენებას, ამიტომ ჩვენს შემთხვევაში მისი მნიშვნელობა უნდა იყოს ჩართული. RSTDISBL ბიტს შეუძლია გადააქციოს მიკროსქემის ერთ-ერთი გამომავალი (წინასწარ განსაზღვრული) "გადატვირთვის" სიგნალის შეყვანაში, ან არ გადააქციოს იგი (დამოკიდებულია ამ ბიტზე დაწერილი მნიშვნელობიდან). ჩვენს შემთხვევაში, "გადატვირთვის" შეყვანა აუცილებელია (თუ ის არ არის, შეუძლებელი იქნება MK-ის გადართვა პროგრამირების რეჟიმში SPI-ის საშუალებით). ასევე არის CKSEL ჯგუფის ბიტები, რომლებიც აზუსტებენ საათის სიგნალის წყაროს. ისინი ხელს არ უშლიან SPI-ს გამოყენებას, მაგრამ ასევე უნდა გვახსოვდეს, რადგან თუ საერთოდ არ არის საათის იმპულსები, ან თუ მათი სიხშირე დაბალია, ვიდრე მისაღებია მოცემული SPI სიჩქარისთვის, არც კარგი არაფერი მოხდება. როგორც წესი, ახალ MCU-ებს, რომლებსაც აქვთ შიდა RC ოსცილატორი, აქვთ CKSEL ჯგუფის ბიტები კონფიგურირებული მის გამოსაყენებლად. ეს საკმაოდ კარგად გვერგება - ქრონიკა უზრუნველყოფილია ჩვენი მხრიდან დამატებითი ძალისხმევის გარეშე. არ არის საჭირო კვარცის რეზონატორის შედუღება ან გარე გენერატორის დაკავშირება. თუ მითითებული ბიტები შეიცავს განსხვავებულ პარამეტრს, თქვენ მოგიწევთ ზრუნვა პარამეტრის შესაბამისად დაკვრაზე. ამ შემთხვევაში, შეიძლება საჭირო გახდეს კვარცის რეზონატორის ან გარე საათის გენერატორის დაკავშირება MCU-სთან. მაგრამ ამ სტატიაში ჩვენ არ განვიხილავთ, თუ როგორ კეთდება ეს. ამ სტატიაში მოცემული MK პროგრამირებისთვის დაკავშირების მაგალითები შექმნილია უმარტივესი შემთხვევისთვის.

ბრინჯი. 1. მონაცემთა გაცვლა SPI-ის საშუალებით პროგრამირების რეჟიმში

ახლა მოდით მივმართოთ სურათ 1-ს, რომელიც აღებულია ATmega128A MK-ის დოკუმენტაციიდან. იგი გვიჩვენებს MK-ზე ერთი ბაიტის გადაცემის და MK-დან ერთი ბაიტის ერთდროულად მიღების პროცესს. ორივე ეს პროცესი, როგორც ვხედავთ, იყენებს ერთიდაიგივე საათის იმპულსებს, რომლებიც მიეწოდება პროგრამისტიდან მიკროკონტროლერს მის SCK შეყვანაში - მიკროსქემის ერთ-ერთი პინი, რომლისთვისაც ასეთი როლი ენიჭება SPI პროგრამირების რეჟიმში. კიდევ ორი ​​სიგნალის ხაზი უზრუნველყოფს მონაცემთა მიღებას და გადაცემას ერთი ბიტი საათის ციკლში. MOSI შეყვანის საშუალებით, მონაცემები შედის მიკროკონტროლერში და წაკითხული მონაცემები აღებულია MISO გამოსასვლელიდან. ყურადღება მიაქციეთ SCK-დან MISO-მდე და MOSI-მდე გამოყვანილ ორ წერტილოვან ხაზს. ისინი აჩვენებენ, რომელ მომენტში მიკროკონტროლერი „ყლაპავს“ მონაცემთა ბიტის კომპლექტს MOSI შეყვანისას და რომელ მომენტში ის თავად აყენებს საკუთარ მონაცემთა ბიტს MISO გამოსავალზე. ყველაფერი საკმაოდ მარტივია. მაგრამ MK პროგრამირების რეჟიმში შესასვლელად, ჩვენ ჯერ კიდევ გვჭირდება RESET სიგნალი. ასევე არ დავივიწყოთ საერთო GND მავთულის და VCC ელექტრომომარაგების შესახებ. საერთო ჯამში, გამოდის, რომ მიკროკონტროლერთან მხოლოდ 6 მავთულის დაკავშირებაა საჭირო, რომ მისი firmware SPI-ის საშუალებით აანთოს. ქვემოთ ამას უფრო დეტალურად გავაანალიზებთ, მაგრამ ახლა დავამატებთ, რომ მონაცემთა გაცვლა MK-თან პროგრამირების რეჟიმში SPI-ის საშუალებით ხდება 4 ბაიტის პაკეტებში. თითოეული პაკეტის პირველი ბაიტი ძირითადად მთლიანად ეძღვნება ინსტრუქციის დაშიფვრას. მეორე ბაიტი, პირველზე დამოკიდებულია, შეიძლება იყოს ბრძანების კოდის გაგრძელება, ან მისამართის ნაწილი, ან შეიძლება ჰქონდეს თვითნებური მნიშვნელობა. მესამე ბაიტი ძირითადად გამოიყენება მისამართების გადასაცემად, მაგრამ შეიძლება ჰქონდეს თვითნებური მნიშვნელობა ბევრ ინსტრუქციაში. მეოთხე ბაიტი ჩვეულებრივ გადასცემს მონაცემებს ან აქვს თვითნებური მნიშვნელობა. მეოთხე ბაიტის გადაცემის პარალელურად, ზოგიერთი ბრძანება იღებს მონაცემებს მიკროკონტროლერიდან. თითოეული ბრძანების დეტალები შეგიძლიათ იხილოთ კონტროლერის დოკუმენტაციაში ცხრილში სახელწოდებით "SPI Serial Programming Instruction Set". ამ დროისთვის, ჩვენ მხოლოდ აღვნიშნავთ, რომ კონტროლერთან მთელი გაცვლა აგებულია 32-ბიტიანი პაკეტების თანმიმდევრობიდან, რომელთაგან თითოეულში გადადის არაუმეტეს ერთი ბაიტი სასარგებლო ინფორმაციისა. ეს არ არის ძალიან ოპტიმალური, მაგრამ მთლიანობაში კარგად მუშაობს.

3. MK-ის დაკავშირება პროგრამირებისთვის

იმის უზრუნველსაყოფად, რომ ყველა საჭირო სიგნალი მიეწოდება მიკროკონტროლერის შეყვანას SPI ინტერფეისის ორგანიზებისთვის და მისი MISO გამომავალი მონაცემების წასაკითხად, არ არის აუცილებელი პროგრამისტის შექმნა. ეს მარტივად შეიძლება გაკეთდეს ყველაზე გავრცელებული USB-RS232TTL კონვერტორის გამოყენებით.

ინტერნეტში ხშირად შეგიძლიათ იპოვოთ ინფორმაცია, რომ ასეთი გადამყვანები არასრულფასოვანია და რომ მათთან სერიოზული არაფრის გაკეთება არ შეიძლება. მაგრამ კონვერტორის მოდელების უმეტესობასთან დაკავშირებით, ეს მოსაზრება არასწორია. დიახ, არის გაყიდვაში კონვერტორები, რომლებსაც არ აქვთ ყველა შეყვანა და გამომავალი სტანდარტული COM პორტთან შედარებით (მაგალითად, მხოლოდ TXD და RXD), ხოლო აქვთ განუყოფელი დიზაინი (მიკროსირკი ივსება პლასტმასით - ეს არის მისი ქინძისთავების მიღწევა შეუძლებელია). მაგრამ ეს არ ღირს ყიდვა. ზოგიერთ შემთხვევაში, თქვენ შეგიძლიათ მიიღოთ დაკარგული პორტის შეყვანა და გამომავალი გაყვანილობის პირდაპირ ჩიპზე შედუღებით. ასეთი "გაუმჯობესებული" გადამყვანის მაგალითი ნაჩვენებია 2-ში (ჩიპი PL-2303 - დამატებითი დეტალები მისი ქინძისთავების დანიშნულების შესახებ სტატიაში ""). ეს არის ერთ-ერთი ყველაზე იაფი მოდელი, მაგრამ აქვს საკუთარი უპირატესობები სახლის დიზაინში გამოყენებისას. ასევე ფართოდ არის გავრცელებული სრულფასოვანი ადაპტერის კაბელები სტანდარტული ცხრაპინიანი კონექტორით ბოლოში, COM პორტის მსგავსად. ისინი განსხვავდებიან ჩვეულებრივი COM პორტისგან მხოლოდ TTL დონეებით და შეუთავსებლობით ძველ პროგრამულ უზრუნველყოფასთან და ზოგიერთ ძველ აპარატურასთან. ასევე შეიძლება აღინიშნოს, რომ CH34x ჩიპზე კაბელები ბევრად უფრო საიმედო და სტაბილურია სხვადასხვა ექსტრემალურ ტესტებში PL-2303-ის კონვერტორებთან შედარებით. თუმცა, ნორმალური გამოყენებისას განსხვავება შესამჩნევი არ არის.

USB-RS232TTL კონვერტორის არჩევისას ყურადღება უნდა მიაქციოთ მისი დრაივერის თავსებადობას იმ ოპერაციული სისტემის ვერსიასთან, რომელსაც იყენებთ.

მოდით უფრო დეტალურად განვიხილოთ მიკროკონტროლერის და USB-RS232TTL კონვერტორის შეერთების პრინციპი ოთხი განსხვავებული MK მოდელის მაგალითის გამოყენებით: ATtiny13, ATtiny44, ATmega8 და ATmega128. სურათი 3 გვიჩვენებს ასეთი კავშირის ზოგად დიაგრამას. შეიძლება გაგიკვირდეთ, რომ იცოდეთ, რომ RS232 სიგნალები (RTS, TXD, DTR და CTS) გამოიყენება არასათანადოდ. მაგრამ არ ინერვიულოთ ამაზე: Perpetuum M პროგრამას შეუძლია მათთან უშუალოდ მუშაობა - დააყენეთ გამომავალი მნიშვნელობები და წაიკითხეთ შეყვანის მდგომარეობა. ნებისმიერ შემთხვევაში, ფართოდ გამოყენებული USB-RS232TTL კონვერტორები CH34x და PL-2303 ჩიპებზე იძლევა ამ შესაძლებლობას - ეს დადასტურებულია. ასევე არ უნდა იყოს პრობლემები სხვა პოპულარულ კონვერტორებთან, რადგან სტანდარტული Windows ფუნქციები გამოიყენება პორტში შესასვლელად.

ზოგად დიაგრამაში ნაჩვენები რეზისტორები, პრინციპში, არ შეიძლება დამონტაჟდეს, მაგრამ მაინც უკეთესია მათი დაყენება. რა არის მათი მიზანი? კონვერტორის TTL შეყვანის და გამოსასვლელების და მიკროკონტროლერის ხუთვოლტიანი კვების წყაროს გამოყენებით, ჩვენ ამით ვიხსნით ლოგიკური დონეების კოორდინაციის საჭიროებას - ყველაფერი უკვე საკმაოდ სწორია. ეს ნიშნავს, რომ კავშირები შეიძლება იყოს პირდაპირი. მაგრამ ექსპერიმენტების დროს. , ყველაფერი შეიძლება მოხდეს. მაგალითად, სისასტიკის კანონის მიხედვით, ხრახნიანი შეიძლება მოხვდეს იმ ადგილას, სადაც არ შეიძლებოდა დაეცემა და მოკლედ შეაერთოს ის, რაც არავითარ შემთხვევაში არ უნდა იყოს მოკლე ჩართვა. რა თქმა უნდა, ყველაფერს შეუძლია. აღმოჩნდება "ხრახნიანი". რეზისტორები ამ შემთხვევაში ხანდახან ამცირებს შედეგებს. მათი ერთ-ერთი დანიშნულებაა შესაძლო გამომავალი კონფლიქტის აღმოფხვრა. ფაქტია, რომ პროგრამირების დასრულების შემდეგ მიკროკონტროლერი გადადის ნორმალურ მუშაობის რეჟიმში და შეიძლება. მოხდეს, რომ მისი პინი, რომელიც დაკავშირებულია გადამყვანის გამომავალთან (RTS, TXD ან DTR) ასევე ხდება გამომავალი, MK-ში ახლახან ჩაწერილი პროგრამის მიხედვით. ამ შემთხვევაში, ძალიან ცუდი იქნება, თუ ორი პირდაპირ დაკავშირებული გამომავალი „იჩხუბება“. - შეეცადეთ დააყენოთ სხვადასხვა ლოგიკური დონე. ასეთ "ბრძოლაში" ვიღაცამ შეიძლება "დაკარგოს", მაგრამ ჩვენ ეს არ გვინდა.

სამი რეზისტორების მნიშვნელობები შერჩეულია 4.3 KOhm დონეზე. ეს ეხება კონვერტორის გამოსავალსა და მიკროკონტროლერის შეყვანას შორის კავშირებს. რეზისტორების სიზუსტეს არ აქვს მნიშვნელობა: შეგიძლიათ შეამციროთ მათი წინააღმდეგობა 1 KOhm-მდე ან გაზარდოთ იგი 10 KOhm-მდე (მაგრამ მეორე შემთხვევაში, ჩარევის რისკი იზრდება MK-ისკენ მიმავალ გზაზე გრძელი მავთულის გამოყენებისას). რაც შეეხება კონვერტორის შეყვანას (CTS) და მიკროკონტროლერის გამომავალს (MISO) კავშირს, აქ გამოიყენება 100 Ohm რეზისტორი. ეს აიხსნება გამოყენებული კონვერტორის შეყვანის თავისებურებებით. ტესტების დროს გამოიყენეს გადამყვანი PL-2303 მიკროსქემაზე, რომლის შეყვანები, როგორც ჩანს, დაკავშირებულია ელექტრომომარაგების დადებითთან შედარებით დაბალი წინააღმდეგობით (რამდენიმე ასეული Ohms-ის რიგით). იმისთვის, რომ „გამტვრევა გამეტეხა“ ასეთი მცირე წინააღმდეგობის მქონე რეზისტორის დაყენება მომიწია. თუმცა, თქვენ საერთოდ არ გჭირდებათ მისი დაყენება. კონვერტორზე ეს ყოველთვის არის შეყვანა. ეს არ შეიძლება გახდეს გამოსავალი, რაც იმას ნიშნავს, რომ მოვლენების არც ერთ განვითარებაში არ იქნება გასასვლელების კონფლიქტი.

თუ ჩიპს აქვს ცალკე AVCC პინი ანალოგური ციფრული გადამყვანის კვებისათვის (მაგალითად, ATmega8 ან ATmega128), ის უნდა იყოს დაკავშირებული საერთო VCC დენის პინთან. ზოგიერთ IC-ს აქვს ერთზე მეტი VCC დენის პინი ან ერთზე მეტი GND. მაგალითად, ATmega128-ს აქვს 3 GND და 2 VCC პინი. მუდმივ დიზაინში უმჯობესია დააკავშიროთ ამავე სახელწოდების ქინძისთავები ერთმანეთთან. ჩვენს შემთხვევაში, პროგრამირების დროს შეგიძლიათ გამოიყენოთ თითო VCC და GND პინი.

და აი, როგორ გამოიყურება ATtiny13 კავშირი. ნახატზე ნაჩვენებია პინის დავალებები, რომლებიც გამოიყენება SPI-ის საშუალებით პროგრამირებისას. ფოტოს გვერდით არის თუ როგორ გამოიყურება სინამდვილეში დროებითი კავშირი.


ზოგიერთმა შეიძლება თქვას, რომ ეს არ არის სერიოზული - კავშირები გაყვანილობაზე. მაგრამ მე და შენ გონიერი ხალხი ვართ. ჩვენი მიზანია მიკროკონტროლერის დაპროგრამება, მასზე მინიმალური დრო და სხვა რესურსების დახარჯვა და არა ვინმეს წინაშე გამოვლენა. ხარისხი არ იტანჯება. "მავთულის" მეთოდი ამ შემთხვევაში საკმაოდ ეფექტური და გამართლებულია. კონტროლერის პროგრამული უზრუნველყოფის მოციმციმე ერთჯერადი პროცედურაა, ამიტომ მის პრიალათი დაფარვას აზრი არ აქვს. თუ მომავალში დაგეგმილია პროგრამული უზრუნველყოფის შეცვლა კონტროლერის წრედან ამოღების გარეშე (მზა პროდუქტში), მაშინ ეს მხედველობაში მიიღება მოწყობილობის დამზადების დროს ინსტალაციის დროს. როგორც წესი, ამ მიზნით დამონტაჟებულია კონექტორი (RESET, SCK, MOSI, MISO, GND) და MK შეიძლება ციმციმდეს დაფაზე დაყენების შემდეგაც. მაგრამ ეს არის შემოქმედებითი სიამოვნება. ჩვენ განვიხილავთ უმარტივეს შემთხვევას.

ახლა მოდით გადავიდეთ ATtiny44 MK-ზე. აქ ყველაფერი თითქმის იგივეა. ნახატზე და ფოტოზე დაყრდნობით დამწყებთათვისაც კი არ გაუჭირდება კავშირის გარკვევა. ATtiny44-ის მსგავსად, თქვენ შეგიძლიათ დააკავშიროთ ATtiny24 და ATtiny84 მიკროკონტროლერები - ამ სამის პინის დავალებები იგივეა.


მისი პროგრამირებისთვის კონტროლერის დროებით მიერთების კიდევ ერთი მაგალითია ATmega8. აქ უფრო მეტი ქინძისთავებია, მაგრამ პრინციპი იგივეა - რამდენიმე მავთული და ახლა კონტროლერი მზად არის მასში ინფორმაციის "შევსებისთვის". დამატებითი შავი მავთული ფოტოზე, რომელიც მოდის 13 პინიდან, არ მონაწილეობს პროგრამირებაში. იგი შექმნილია მისგან ხმოვანი სიგნალის მოსაშორებლად მას შემდეგ, რაც MK გამოდის პროგრამირების რეჟიმში. ეს გამოწვეულია იმით, რომ "Perpetuum M"-ის სკრიპტის გამართვისას მუსიკალური ყუთის პროგრამა გადმოწერილი იქნა MK-ში.


ხშირად ერთი კონტროლერი ხელმისაწვდომია სხვადასხვა კორპუსებში. ამ შემთხვევაში, ქინძისთავების მინიჭება თითოეული შემთხვევისთვის განსხვავებულად ნაწილდება. თუ თქვენი კონტროლერის კორპუსი არ არის ნახატზე ნაჩვენების მსგავსი, შეამოწმეთ ქინძისთავების დანიშნულება ტექნიკურ დოკუმენტაციაში, რომელიც შეგიძლიათ ჩამოტვირთოთ MK დეველოპერის ვებსაიტიდან.

სურათის დასასრულებლად, მოდით შევხედოთ MK მიკროსქემის დაკავშირებას დიდი რაოდენობით "ფეხებით". დამატებითი შავი მავთულის დანიშნულება ფოტოზე, რომელიც მოდის პინ 15-დან, ზუსტად იგივეა, რაც ATmega8-ის შემთხვევაში.


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

სანამ პროგრამულ ნაწილზე გადახვალთ, დარწმუნდით, რომ USB-RS232TTL კონვერტორის დრაივერი სწორად არის დაინსტალირებული (შეამოწმეთ Windows Device Manager). დაიმახსოვრეთ ან ჩაწერეთ ვირტუალური COM პორტის ნომერი, რომელიც გამოჩნდება კონვერტორის შეერთებისას. ეს ნომერი უნდა შეიყვანოთ სკრიპტის ტექსტში, რომლის შესახებაც შეგიძლიათ წაიკითხოთ ქვემოთ.

4. სკრიპტი - პროგრამისტი "Perpetuum M"-ისთვის

ჩვენ გავარკვიეთ "პროგრამერის" ტექნიკის ნაწილი. ეს უკვე ბრძოლის ნახევარია. ახლა რჩება პროგრამული უზრუნველყოფის ნაწილთან გამკლავება. მის როლს შეასრულებს Perpetuum M პროგრამა სკრიპტის კონტროლის ქვეშ, რომელიც ახორციელებს ყველა საჭირო ფუნქციას მიკროკონტროლერთან ურთიერთობისთვის.

სკრიპტის არქივი უნდა გაიხსნას იმავე საქაღალდეში, სადაც მდებარეობს perpetuum.exe პროგრამა. ამ შემთხვევაში, perpetuum.exe ფაილის გაშვებისას, ეკრანზე გამოჩნდება მენიუ დაინსტალირებული სკრიპტების სიით, რომელთა შორის იქნება ხაზი "AVR MK Programmer" (ეს შეიძლება იყოს ერთადერთი). ეს არის ხაზი, რომელიც ჩვენ გვჭირდება.

სკრიპტი განთავსებულია PMS საქაღალდეში ფაილში "MK Programmer AVR.pms". ამ ფაილის ნახვა, შესწავლა და საჭიროების შემთხვევაში რედაქტირება შესაძლებელია ჩვეულებრივ ტექსტურ რედაქტორში, როგორიცაა Windows Notepad. სკრიპტის გამოყენებამდე, სავარაუდოდ, დაგჭირდებათ ცვლილებების შეტანა პორტის პარამეტრებთან დაკავშირებულ ტექსტში. ამისათვის შეამოწმეთ Windows Device Manager-ში გამოყენებული პორტის სახელი და, საჭიროების შემთხვევაში, შეიტანეთ შესაბამისი ცვლილება ხაზში "PortName="COM4";" - 4 ნომრის ნაცვლად შეიძლება იყოს სხვა ნომერი. ასევე, USB-RS232TTL გადამყვანის სხვა მოდელის გამოყენებისას, შეიძლება დაგჭირდეთ სიგნალის ინვერსიის პარამეტრების შეცვლა (სკრიპტის ხაზები, რომლებიც იწყება სიტყვით „High“). თქვენ შეგიძლიათ შეამოწმოთ სიგნალების ინვერსია USB-RS232TTL კონვერტორის მიერ Perpetuum M პროგრამის ინსტრუქციებში მოცემული მაგალითის გამოყენებით (პორტთან მუშაობის ფუნქციების განყოფილება).

MK_AVR ქვესაქაღალდე შეიცავს ფაილებს მხარდაჭერილი კონტროლერების აღწერილობით. თუ თქვენთვის საჭირო კონტროლერი არ არის მათ შორის, შეგიძლიათ დაამატოთ ის, რაც გჭირდებათ, ანალოგიის შემდეგ. აიღეთ ერთ-ერთი ფაილი, როგორც ნიმუში და ტექსტური რედაქტორის გამოყენებით, შეიყვანეთ საჭირო მონაცემები, აიღეთ იგი თქვენი მიკროკონტროლერის დოკუმენტაციიდან. მთავარია ფრთხილად, შეცდომის გარეშე შეიყვანოთ მონაცემები, თორემ MK არ დაპროგრამდება, ან არასწორად დაპროგრამდება. ორიგინალური ვერსია მხარს უჭერს 6 მიკროკონტროლერს: ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATmega8 და ATmega128. სკრიპტი ახორციელებს დაკავშირებული კონტროლერის ავტომატურ ამოცნობას - არ არის საჭირო მისი ხელით დაკონკრეტება. თუ MK-დან წაკითხული იდენტიფიკატორი არ არის ხელმისაწვდომ აღწერილობებს შორის, გამოჩნდება შეტყობინება, რომ კონტროლერი ვერ იქნა ამოცნობილი.

არქივი სკრიპტით ასევე შეიცავს დამატებით ინფორმაციას. AVR controller inc files საქაღალდე შეიცავს კონტროლერის განმარტების ფაილების ძალიან სასარგებლო და ვრცელ კოლექციას. ეს ფაილები გამოიყენება MK-სთვის თქვენი საკუთარი პროგრამების დაწერისას. კიდევ ოთხი საქაღალდე "MusicBox_..." შეიცავს ფაილებს პროგრამით ასამბლეის ენაზე და მზა პროგრამული უზრუნველყოფით, რომლებიც მზად არიან ჩამოტვირთვისთვის MK-ში ცალკე ATtiny13, ATtiny44, ATmega8 და ATmega128. თუ თქვენ უკვე დააკავშირეთ ერთ-ერთი ასეთი MK პროგრამირებისთვის, როგორც ეს სტატიაშია შემოთავაზებული, მაშინ შეგიძლიათ ახლავე გაანათოთ - მიიღებთ მუსიკალურ ყუთს. მეტი ამის შესახებ ქვემოთ.

როდესაც სკრიპტის მენიუში აირჩევთ ხაზს „MK AVR Programmer“, სკრიპტის შესრულება იწყება. ამავდროულად, ის ხსნის პორტს, აგზავნის ბრძანებას MK-ზე გადასვლის პროგრამირების რეჟიმში, იღებს დადასტურებას MK-სგან წარმატებული გადასვლის შესახებ, ითხოვს MK იდენტიფიკატორს და ეძებს ამ MK-ის აღწერას მისი იდენტიფიკატორის მიერ ხელმისაწვდომს შორის. ფაილები აღწერილობებით. თუ ის ვერ პოულობს საჭირო აღწერას, აჩვენებს შესაბამის შეტყობინებას. თუ აღწერილობა მოიძებნა, მაშინ იხსნება პროგრამისტის მთავარი მენიუ. მისი სკრინშოტი შეგიძლიათ იხილოთ სურათზე 8. შემდგომი გაგება არ არის რთული - მენიუ ძალიან მარტივია.

სკრიპტის პირველ ვერსიაში, სრულფასოვანი პროგრამისტის ზოგიერთი ფუნქცია არ არის განხორციელებული. მაგალითად, EEPROM-ზე წაკითხვისა და ჩაწერის საშუალება არ არსებობს. მაგრამ თუ თქვენ გახსნით სკრიპტს ტექსტურ რედაქტორში, ნახავთ, რომ ის ძალიან მცირე ზომისაა, მიუხედავად იმისა, რომ მასში მთავარი უკვე დანერგილია. ეს იმაზე მეტყველებს, რომ დაკარგული ფუნქციების დამატება არც ისე რთულია - ენა ძალიან მოქნილია, ის საშუალებას გაძლევთ განახორციელოთ მდიდარი ფუნქციონირება მცირე პროგრამაში. მაგრამ უმეტეს შემთხვევაში, არსებული ფუნქციებიც კი საკმარისია.

ზოგიერთი ფუნქციონალური შეზღუდვა აღწერილია პირდაპირ სკრიპტის ტექსტში:
//განხორციელებული ჩანაწერი მხოლოდ ნულოვანი მისამართიდან (გაფართოებული სეგმენტის მისამართის ჩანაწერი იგნორირებულია, LOAD OFFSET - ასევე)
//HEX ფაილში ჩანაწერების თანმიმდევრობა და უწყვეტობა არ არის შემოწმებული
//შემოწმების ჯამი არ არის შემოწმებული
ეს ეხება HEX ფაილთან მუშაობას, საიდანაც აღებულია MK-ის firmware კოდი. თუ ეს ფაილი არ არის დაზიანებული, საკონტროლო ჯამის შემოწმებას შედეგი არ ექნება. თუ ის დამახინჯებულია, სკრიპტის გამოყენებით მისი აღმოჩენა შეუძლებელი იქნება. უმეტეს შემთხვევაში, დარჩენილი შეზღუდვები არ დააზარალებს, მაგრამ მაინც უნდა გაითვალისწინოთ ისინი.

5. მუსიკალური ყუთი - მარტივი ხელობა დამწყებთათვის

თუ თქვენ გაქვთ ერთ-ერთი ასეთი მიკროკონტროლერი: ATtiny13, ATtiny44, ATmega8 ან ATmega128, შეგიძლიათ მარტივად გადააქციოთ ის მუსიკალურ ყუთად ან მუსიკალურ ბარათად. ამისათვის საკმარისია MK-ში ჩაწეროთ შესაბამისი firmware - იმ ოთხიდან ერთ-ერთი, რომელიც მდებარეობს სკრიპტის იმავე არქივში "MusicBox_..." საქაღალდეებში. Firmware კოდები ინახება ფაილებში გაფართოებით ".hex". ATmega128-ის გამოყენება ასეთი ხელნაკეთობისთვის, რა თქმა უნდა, "ცხიმიანია", ისევე როგორც ATmega8. მაგრამ ეს შეიძლება სასარგებლო იყოს ტესტირებისთვის ან ექსპერიმენტებისთვის, სხვა სიტყვებით რომ ვთქვათ, საგანმანათლებლო მიზნებისთვის. თან ერთვის ასემბლერში პროგრამების ტექსტებიც. პროგრამები არ შეიქმნა ნულიდან - საფუძვლად იქნა მიღებული მუსიკალური ყუთის პროგრამა A.V. Belov-ის წიგნიდან "AVR მიკროკონტროლერები სამოყვარულო რადიო პრაქტიკაში". თავდაპირველმა პროგრამამ განიცადა მრავალი მნიშვნელოვანი ცვლილება:
1. ადაპტირებულია ოთხივე MK-სთვის: ATtiny13, ATtiny44, ATmega8 და ATmega128
2. ღილაკები ამოღებულია - კონტროლერთან დაკავშირება არ არის საჭირო, გარდა დენისა და ხმის გამომცემისა (მელოდიები უკრავენ ერთმანეთის მიყოლებით გაუთავებელ ციკლში)
3. თითოეული ნოტის ხანგრძლივობა მცირდება ნოტებს შორის პაუზის ხანგრძლივობით, რათა აღმოიფხვრას დარღვევები მუსიკალურ რიტმში.
4. მერვე მელოდია დაკავშირებულია, არ არის გამოყენებული წიგნის ვერსიაში
5. სუბიექტურიდან: რამდენიმე „გაუმჯობესება“ ალგორითმის ოპტიმიზაციისა და გასაადვილებლად

ზოგიერთ მელოდიაში შეიძლება მოისმინოს სიცრუე და უხეში შეცდომებიც კი, განსაკუთრებით "ღიმილში" - შუაში. ზარის მელოდიების კოდები აღებულია წიგნიდან (უფრო სწორად, გადმოწერილია წიგნის ავტორის ვებსაიტიდან ორიგინალ asm ფაილთან ერთად) და არ შეცვლილა. როგორც ჩანს, მელოდიების დაშიფვრაში არის შეცდომები. მაგრამ ეს არ არის პრობლემა - ყველას, ვინც "მეგობრულია" მუსიკასთან, შეუძლია ამის გარკვევა და ყველაფრის გამოსწორება.

ATtiny13-ში, 16-ბიტიანი მრიცხველის არარსებობის გამო, 8-ბიტიანი მრიცხველი უნდა გამოეყენებინათ შენიშვნების გასამრავლებლად, რამაც გამოიწვია ნოტების სიზუსტის უმნიშვნელო დაქვეითება. მაგრამ ეს ძნელად შესამჩნევია ყურით.

კონფიგურაციის ბიტების შესახებ. მათი პარამეტრები უნდა შეესაბამებოდეს ახალი მიკროკონტროლერის მდგომარეობას. თუ თქვენი MK ადრე გამოიყენებოდა სადმე, თქვენ უნდა შეამოწმოთ მისი კონფიგურაციის ბიტების მდგომარეობა და, საჭიროების შემთხვევაში, დააკავშიროთ ისინი ახალი მიკროკონტროლერის პარამეტრებთან. თქვენ შეგიძლიათ გაიგოთ ახალი მიკროკონტროლერის კონფიგურაციის ბიტების მდგომარეობა ამ MK-ის დოკუმენტაციიდან (განყოფილება "ფუზის ბიტები"). გამონაკლისი არის ATmega128. ამ MCU-ს აქვს M103C ბიტი, რომელიც იძლევა თავსებადობის რეჟიმს ძველ ATmega103-თან. M103C ბიტის გააქტიურება მნიშვნელოვნად ამცირებს ATmega128-ის შესაძლებლობებს და ეს ბიტი აქტიურია ახალ MK-ზე. თქვენ უნდა გადააყენოთ M103C არააქტიურ მდგომარეობაში. კონფიგურაციის ბიტების მანიპულირებისთვის გამოიყენეთ პროგრამისტის სკრიპტის მენიუს შესაბამისი განყოფილება.

მუსიკალური ყუთის დიაგრამის მიცემას აზრი არ აქვს: ის შეიცავს მხოლოდ მიკროკონტროლერს, კვების წყაროს და პიეზო-ხმის გამომცემს. ელექტროენერგიის მიწოდება ხდება ზუსტად ისე, როგორც MK-ის დაპროგრამებისას. ხმის გამომცემი დაკავშირებულია საერთო მავთულს (კონტროლერის GND პინი) და ერთ-ერთ MK პინს შორის, რომლის რაოდენობა შეგიძლიათ იხილოთ ფაილში პროგრამის შეკრების კოდით (*.asm). პროგრამის ტექსტის დასაწყისში კომენტარებში თითოეული MK-სთვის არის სტრიქონი: „ხმოვანი სიგნალი იქმნება პინ XX-ზე“. პროგრამისტის სკრიპტის დასრულების შემდეგ, მიკროკონტროლერი გამოდის პროგრამირების რეჟიმიდან და გადადის ნორმალურ მუშაობაში. მელოდიების დაკვრა დაუყოვნებლივ იწყება. ხმის გამომცემის შეერთებით, შეგიძლიათ შეამოწმოთ ეს. თქვენ შეგიძლიათ დატოვოთ ხმის ემიტერი დაკავშირებული კრისტალის პროგრამირებისას მხოლოდ იმ შემთხვევაში, თუ ხმა არის აღებული პინიდან, რომელიც არ გამოიყენება SPI-ში, წინააღმდეგ შემთხვევაში პინზე დამატებითმა ტევადობამ შეიძლება ხელი შეუშალოს პროგრამირებას.

კისელევ რომანი, 2007 წლის მაისი სტატია განახლებულია 2014 წლის 26 მაისს

მაშ, რა არის მიკროკონტროლერი (შემდგომში MK)? ეს არის, შედარებით რომ ვთქვათ, პატარა კომპიუტერი, რომელიც განთავსებულია ერთ ინტეგრირებულ წრეში. მას აქვს პროცესორი (არითმეტიკული ლოგიკური ერთეული, ან ALU), ფლეშ მეხსიერება, EEPROM მეხსიერება, მრავალი რეგისტრი, I/O პორტები, ასევე დამატებითი ზარები და სასტვენები, როგორიცაა ტაიმერი, მრიცხველი, შედარებითი, USART და ა.შ. დენის ჩართვის შემდეგ. , მიკროკონტროლერი ჩაიტვირთება და იწყებს მის ფლეშ მეხსიერებაში შენახული პროგრამის შესრულებას. ამავდროულად, მას შეუძლია აკონტროლოს გარე მოწყობილობების ფართო სპექტრი I/O პორტების საშუალებით.

Რას ნიშნავს ეს? ეს ნიშნავს, რომ MK-ში შეგიძლიათ განახორციელოთ ნებისმიერი ლოგიკური წრე, რომელიც შეასრულებს გარკვეულ ფუნქციებს. ეს ნიშნავს, რომ MK არის მიკროსქემა, რომლის შიდა შიგთავსს, ფაქტობრივად, ჩვენ თვითონ ვქმნით. ეს საშუალებას აძლევს, რამდენიმე სრულიად იდენტური MK-ის შეძენისას, მათზე სრულიად განსხვავებული სქემები და მოწყობილობები შეიკრიბოს. თუ გსურთ რაიმე ცვლილების შეტანა ელექტრონული მოწყობილობის მუშაობაში, არ დაგჭირდებათ შედუღების უთო გამოყენება, თქვენ მხოლოდ MK-ის გადაპროგრამირება დაგჭირდებათ. ამ შემთხვევაში, თქვენ არც კი გჭირდებათ მისი ამოღება თქვენი მოწყობილობიდან, თუ იყენებთ AVR-ს, რადგან ეს MK-ები მხარს უჭერენ შიდა პროგრამირებას. ამრიგად, მიკროკონტროლერები ახდენენ უფსკრული პროგრამირებასა და ელექტრონიკას შორის.

AVR არის 8-ბიტიანი მიკროკონტროლერები, ანუ მათ ALU-ს შეუძლია შეასრულოს მარტივი ოპერაციები მხოლოდ 8-ბიტიანი რიცხვებით ერთი საათის ციკლში. ახლა დროა ვისაუბროთ რომელ MK-ს გამოვიყენებთ. მე ვმუშაობ ATMega16 MK-თან. ის ძალიან გავრცელებულია და მისი შეძენა შესაძლებელია რადიო ნაწილების თითქმის ნებისმიერ მაღაზიაში, დაახლოებით 100 რუბლით. თუ ვერ იპოვით, მაშინ შეგიძლიათ შეიძინოთ MEGA სერიის ნებისმიერი სხვა MK, მაგრამ ამ შემთხვევაში თქვენ მოგიწევთ მოძებნოთ დოკუმენტაცია, რადგან სხვადასხვა MK-ის ერთსა და იმავე „ფეხებს“ შეუძლიათ შეასრულონ სხვადასხვა ფუნქციები და, დაკავშირების შემდეგ, როგორც ჩანს, თუ ყველა დასკვნა სწორია, შეიძლება მიიღოთ სამუშაო მოწყობილობა, ან შესაძლოა უბრალოდ სუნიანი კვამლის ღრუბელი. ATMega16-ის შეძენისას დარწმუნდით, რომ ის მოდის დიდ 40-პინიან DIP პაკეტში და ასევე იყიდეთ მისთვის სოკეტი, რომელშიც მისი ჩასმა შეიძლება. მასთან მუშაობისთვის ასევე დაგჭირდებათ დამატებითი მოწყობილობები: LED-ები, ღილაკები, კონექტორები და ა.შ.

ATMega16 აქვს ძალიან დიდი რაოდენობით მრავალფეროვანი ფუნქციები. აქ არის მისი რამდენიმე მახასიათებელი:

  • საათის მაქსიმალური სიხშირე – 16 MHz (8 MHz ATMega16L-სთვის)
  • ბრძანებების უმეტესობა შესრულებულია ერთი საათის ციკლში
  • 32 8-ბიტიანი სამუშაო რეგისტრი
  • 4 სრული 8-ბიტიანი I/O პორტი
  • ორი 8-ბიტიანი ტაიმერი/მრიცხველი და ერთი 16-ბიტიანი
  • 10-ბიტიანი ანალოგური ციფრული გადამყვანი (ADC)
  • შიდა საათის გენერატორი 1 MHz
  • ანალოგური შედარებითი
  • ინტერფეისები SPI, I2C, TWI, RS-232, JTAG
  • წრიული პროგრამირება და თვითპროგრამირება
  • პულსის სიგანის მოდულაციის (PWM) მოდული

ამ მოწყობილობის სრული მახასიათებლები, ისევე როგორც მათი გამოყენების ინსტრუქციები, შეგიძლიათ იხილოთ ამ MK-ის საცნობარო წიგნში (მონაცემთა ცხრილი). მართალია, ინგლისურად არის. თუ ინგლისური იცით, აუცილებლად გადმოწერეთ ეს მონაცემთა ცხრილი, ის შეიცავს ბევრ სასარგებლო ინფორმაციას.

ბოლოს და ბოლოს საქმეს მივუდგეთ. გირჩევ მიკროკონტროლერისთვის სპეციალური განვითარებისა და გამართვის დაფის დამზადებას, რომელზედაც მიკროკონტროლერთან ერთად ნებისმიერი ელექტრული წრე შეიძლება ააწყოთ შედუღების უთოზე (ან თითქმის მის გარეშე). ასეთი დაფის გამოყენება მნიშვნელოვნად გაამარტივებს MK-თან მუშაობას და დააჩქარებს მისი პროგრამირების სწავლის პროცესს. ეს ასე გამოიყურება:

რა დაგჭირდებათ ამისთვის?

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

მიკროსქემის ელემენტების დასაკავშირებლად ძალიან მოსახერხებელია კაბელების გამოყენება ბოლოებში კონექტორებით. ეს კონექტორები მოთავსებულია MK-ის თითოეული პორტის გვერდით გამოსახულ „ფეხებზე“. მიკროკონტროლერი უნდა იყოს დაყენებული ბუდეში, და არა დაფზე დამაგრებული, წინააღმდეგ შემთხვევაში მისი ამოღება ძალიან რთული იქნება, თუ შემთხვევით დაწვავთ. ქვემოთ მოცემულია ATMEGA16 MK-ის პინი:

მოდით განვმარტოთ, რომელი ფეხები გვაინტერესებს ახლა.

  • VCC - აქ ენერგია მიეწოდება (4,5 - 5,5 ვ) სტაბილიზირებული წყაროდან
  • GND – მიწა
  • RESET - გადატვირთვა (დაბალი ძაბვის დონეზე)
  • XTAL1, XTAL2 – აქ არის დაკავშირებული კვარცის რეზონატორი
  • PA, PB, PC, PD – შეყვანის/გამოსვლის პორტები (A, B, C და D, შესაბამისად).

ყველაფერი, რაც აწარმოებს 7-11 ვ DC-ს, შეიძლება გამოყენებულ იქნას როგორც დენის წყარო. MK-ის სტაბილური მუშაობისთვის საჭიროა სტაბილიზებული ელექტრომომარაგება. როგორც სტაბილიზატორი შეგიძლიათ გამოიყენოთ 7805 სერიის მიკროსქემები, ეს არის ხაზოვანი ინტეგრირებული სტაბილიზატორები, რომელთა შეყვანა მიეწოდება 7-11 ვ პირდაპირი არასტაბილიზირებული დენით, გამომავალი კი 5 ვ სტაბილიზირებული დენით. 7805-მდე და მის შემდეგ, თქვენ უნდა დააინსტალიროთ ფილტრის კონდენსატორები (ელექტროლიტური დაბალი სიხშირის ჩარევის გასაფილტრად და კერამიკა მაღალი სიხშირისთვის). თუ ვერ იპოვით სტაბილიზატორს, მაშინ შეგიძლიათ გამოიყენოთ 4.5 ვ ბატარეა დენის წყაროდ, MK უნდა იკვებებოდეს პირდაპირ მისგან.

ქვემოთ მოცემულია MK კავშირის დიაგრამა:

მოდით ახლა გავარკვიოთ, რა არის აქ.

BQ1 არის კვარცის რეზონატორი, რომელიც ადგენს MK-ის მუშაობის სიხშირეს. თქვენ შეგიძლიათ დააყენოთ ნებისმიერი 16 MHz-მდე, მაგრამ რადგან ჩვენ ვგეგმავთ მომავალში მუშაობას COM პორტით, გირჩევთ გამოიყენოთ რეზონატორები შემდეგი სიხშირეებისთვის: 14.7456 MHz, 11.0592 MHz, 7.3725 MHz, 3.6864 MHz ან 1 MHz (842 ლ. გაირკვევა, რატომ). მე გამოვიყენე 11.0592 MHz. ნათელია, რომ რაც უფრო მაღალია სიხშირე, მით უფრო მაღალია მოწყობილობის სიჩქარე.

R1 არის ასაწევი რეზისტორი, რომელიც ინარჩუნებს 5 ვ ძაბვას RESET-ის შესასვლელში. დაბალი ძაბვის დონე ამ შეყვანაზე მიუთითებს გადატვირთვაზე. გადატვირთვის შემდეგ MK ჩაიტვირთება (10 - 15 ms) და კვლავ იწყებს პროგრამის შესრულებას. ვინაიდან ეს არის მაღალი წინაღობის შეყვანა, თქვენ არ შეგიძლიათ დატოვოთ იგი "ჰაერში ჩამოკიდებული" - მასზე პატარა პიკაპი გამოიწვევს MK-ის მოულოდნელ გადატვირთვას. ეს არის ზუსტად ის, რისთვისაც არის R1. საიმედოობისთვის, მე ასევე გირჩევთ C6 კონდენსატორის დაყენებას (არაუმეტეს 20 μF).

SB1 - გადატვირთვის ღილაკი.

კვარცის რეზონატორი და ფილტრის კონდენსატორი C3 უნდა განთავსდეს რაც შეიძლება ახლოს MK-სთან (არაუმეტეს 5-7 სმ), რადგან წინააღმდეგ შემთხვევაში შეიძლება მოხდეს ჩარევა სადენებში, რაც გამოიწვევს MK-ის გაუმართაობას.

დიაგრამაში ლურჯი მართკუთხედი ასახავს თავად პროგრამისტს. მოსახერხებელია მისი დამზადება მავთულის სახით, რომლის ერთი ბოლო ჩართულია LPT პორტში, ხოლო მეორე გარკვეულ კონექტორში MK-ის გვერდით. მავთული არ უნდა იყოს ზედმეტად გრძელი. თუ პრობლემები წარმოიქმნება ამ კაბელთან (როგორც წესი, ისინი არ არიან, მაგრამ ყველაფერი შეიძლება მოხდეს), თქვენ მოგიწევთ Altera ByteBlaster ადაპტერის შედუღება. როგორ გავაკეთოთ ეს წერია AVReal პროგრამისტის აღწერაში.

ახლა, როდესაც ჩვენ განვიხილეთ აპარატურა, დროა გადავიდეთ პროგრამულ უზრუნველყოფაზე.

არსებობს რამდენიმე განვითარების გარემო AVR პროგრამირებისთვის. პირველ რიგში, ეს არის AVR Studio - ოფიციალური პროგრამირების სისტემა Atmel-ისგან. ის საშუალებას გაძლევთ ჩაწეროთ ასამბლერში და გამართვის პროგრამებში დაწერილი ასამბლეის, C და C++. IAR არის კომერციული პროგრამირების სისტემა C, C++ და ასამბლეის ენაზე. WinAVR არის ღია კოდის შემდგენელი. AtmanAVR არის პროგრამირების სისტემა AVR-სთვის, თითქმის ზუსტად ისეთივე ინტერფეისით, როგორიც Visual C++ 6. AtmanAVR ასევე საშუალებას გაძლევთ გამართოთ პროგრამები და შეიცავს ბევრ დამხმარე ფუნქციას, რაც აადვილებს კოდის დაწერას. ეს პროგრამირების სისტემა არის კომერციული, მაგრამ, ლიცენზიის მიხედვით, მისი გამოყენება შეგიძლიათ უფასოდ ერთი თვის განმავლობაში.

მე გთავაზობთ მუშაობას IAR-თან, როგორც განვითარების ყველაზე გამჭვირვალე გარემოსთან. IAR-ში პროექტი იქმნება მთლიანად ხელით, ამიტომ რამდენიმე პროექტის დასრულების შემდეგ უკვე ნათლად გეცოდინებათ რას ნიშნავს კოდის თითოეული ხაზი და რა მოხდება მის შეცვლაზე. AtmanAVR-თან მუშაობისას ან მოგიწევთ წინასწარ შექმნილი შაბლონის გამოყენება, რომელიც ძალიან შრომატევადი და ძნელად გასაგებია გამოცდილების გარეშე პირისთვის, ან ბევრი პრობლემა გექნებათ სათაურის ფაილებთან პროექტის ნულიდან აწყობისას. IAR-თან განხილვის შემდეგ, ჩვენ განვიხილავთ სხვა შემდგენლებს.

ასე რომ, პირველ რიგში, მიიღეთ IAR. ეს ძალიან გავრცელებულია და მისი აღმოჩენა არ უნდა იყოს პრობლემა. IAR 3.20-ის სადღაც ჩამოტვირთვის შემდეგ დააინსტალირეთ შემდგენელი/სამუშაო გარემო და გაუშვით. ამის შემდეგ შეგიძლიათ დაიწყოთ მუშაობა.

IAR-ის გაშვების შემდეგ, აირჩიეთ ფაილი/ახალი/სამუშაო სივრცეაირჩიეთ ჩვენი პროექტის გზა და შექმენით საქაღალდე და მიეცით სახელი, მაგალითად, „Prog1“. ახლა შევქმნათ პროექტი: პროექტი / ახალი პროექტის შექმნა…მოდით ასევე ვუწოდოთ მას "Prog1". დააწკაპუნეთ მაუსის მარჯვენა ღილაკით პროექტის სახელზე პროექტის ხეზე და აირჩიეთ "ოფციები"

აქ ჩვენ დავაკონფიგურირებთ შემდგენელს კონკრეტული MK-სთვის. პირველ რიგში, თქვენ უნდა აირჩიოთ ATMega16 პროცესორის ტიპი Target ჩანართზე, შეამოწმეთ ჩამრთველი Bit definitions in I/O-include files ბიბლიოთეკის კონფიგურაციის ჩანართზე (ასე რომ თქვენ შეგიძლიათ გამოიყენოთ სხვადასხვა MK რეგისტრის ბიტების სახელები პროგრამის კოდში. ), და აირჩიეთ C ბიბლიოთეკის ტიპი იქ /EU++. ICCAVR კატეგორიაში, თქვენ უნდა შეამოწმოთ ჩამრთველი მრავალბაიტის მხარდაჭერის ჩართვა ენის ჩანართზე და გამორთოთ ოპტიმიზაცია ოპტიმიზაციის ჩანართზე (თორემ ეს გაანადგურებს ჩვენს პირველ პროგრამას).

შემდეგი, აირჩიეთ XLINK კატეგორია. აქ თქვენ უნდა განსაზღვროთ შედგენილი ფაილის ფორმატი. იმის გამო, რომ ჩვენ ახლა ვაყენებთ გამართვის რეჟიმის ვარიანტებს, როგორც ეს აღწერილია სათაურში, ჩვენ უნდა მივიღოთ გამართვის ფაილი, როგორც გამოსავალი. მოგვიანებით გავხსნით მას AVR Studio-ში. ამისათვის თქვენ უნდა აირჩიოთ extension.cof და ფაილის ტიპი არის ubrof 7.

ახლა დააწკაპუნეთ OK, შემდეგ შეცვალეთ Debug გამოშვებაზე.

ისევ გადადით ოფციებზე, სადაც XLINK-ის გარდა ყველა პარამეტრი დაყენებულია ერთნაირი. XLINK-ში შეცვალეთ გაფართოება .hex-ზე და ფაილის ფორმატი intel-standart-ზე.

Სულ ეს არის. ახლა თქვენ შეგიძლიათ დაიწყოთ თქვენი პირველი პროგრამის დაწერა. შექმენით ახალი წყარო/ტექსტი და შეიყვანეთ მასში შემდეგი კოდი:

#შეიცავს"iom16.h" მოკლე ხელმოუწერელი int i; ბათილადმთავარი ( ბათილად) (DDRB = 255; PORTB = 0; ხოლო(1) { თუ(PORTB == 255) PORTB = 0; სხვა PORTB++; ამისთვის(i=0; i

ფაილი "iom16.h" მდებარეობს საქაღალდეში (C:\Program Files)\IAR Systems\Embedded Workbench 3.2\avr\inc. თუ იყენებთ სხვა MK-ს, მაგალითად, ATMega64, აირჩიეთ ფაილი "iom64.h". ეს სათაურის ფაილები ინახავს ინფორმაციას MK-ის შესახებ: რეგისტრების სახელებს, ბიტებს რეგისტრებში და შეფერხებების სახელებს. A, B, C ან D პორტის თითოეულ ინდივიდუალურ პინს შეუძლია შეასრულოს ან გამომავალი. ამას განსაზღვრავს მონაცემთა მიმართულების რეესტრი (DDR). 1 ხდის ფეხს გამომავალს, 0 შეყვანას. ამრიგად, მაგალითად, DDRA = 13-ის დაყენებით, ჩვენ ვაკეთებთ "ფეხებს" PB0, PB2, PB3 გამომავალს, დანარჩენს - შეყვანებს, რადგან 13 ბინარში არის 00001101.

PORTB არის რეესტრი, რომელიც განსაზღვრავს პორტის პინების მდგომარეობას. იქ 0 რომ დავწერე, ყველა გამომავალზე ვაყენებთ ძაბვას 0 ვ-ზე. შემდეგ არის გაუთავებელი მარყუჟი. MK-ის დაპროგრამებისას ისინი ყოველთვის ქმნიან გაუთავებელ ციკლს, რომელშიც MK ასრულებს გარკვეულ მოქმედებას, სანამ არ გადაიტვირთება ან არ მოხდება შეფერხება. ამ ციკლში ისინი წერენ, როგორც იყო, "ფონის კოდს", რომელსაც MK ასრულებს როგორც ბოლო რამ. ეს შეიძლება იყოს, მაგალითად, ინფორმაციის ჩვენება ეკრანზე. ჩვენს შემთხვევაში, PORTB რეესტრის შიგთავსი იზრდება მანამ, სანამ ის არ შეივსება. ამის შემდეგ ყველაფერი თავიდან იწყება. და ბოლოს, ათი ათასი ციკლი მარყუჟისთვის. საჭიროა B პორტის მდგომარეობის გადართვის თვალსაჩინო შეფერხების ფორმირებისთვის.



ახლა ჩვენ ვინახავთ ამ ფაილს პროექტის საქაღალდეში, როგორც Prog1.c, დააკოპირეთ iom16.h ფაილი პროექტის საქაღალდეში, აირჩიეთ Project/Add Files და დავამატებთ “iom16.h” და “Prog1.c”. აირჩიეთ Release, დააჭირეთ F7, პროგრამა შედგენილია და გამოჩნდება შეტყობინება:


შეცდომების საერთო რაოდენობა: 0
გაფრთხილებების საერთო რაოდენობა: 0

აი ჩემი პროგრამისტის ფოტო:

ჩამოტვირთეთ AVReal პროგრამისტი. დააკოპირეთ იგი (AVReal32.exe) Release/exe საქაღალდეში, სადაც უნდა იყოს განთავსებული Prog1.hex ფაილი. ჩვენ ვაძლევთ ელექტროენერგიას MK-ს, ვაკავშირებთ პროგრამირების კაბელს. გახსენით Far Manager (ყველაზე მოსახერხებელია MK-ის ფლეში), გადადით ამ საქაღალდეში, დააჭირეთ Ctrl+O. ვინაიდან ჩვენ გვაქვს სრულიად ახალი MK, ჩვენ ვმუშაობთ

avreal32.exe +MEGA16 -o11.0592MHZ -p1 -fblev=0,jtagen=1,cksel=F,sut=1 –w

არ დაგავიწყდეთ სწორი სიხშირის შეყვანა, თუ არ იყენებთ 11059200 ჰც! ამავე დროს, ე.წ ფუჟები – რეგისტრები, რომლებიც აკონტროლებენ მის მუშაობას (შიდა გენერატორის გამოყენება, Jtag და ა.შ.). ამის შემდეგ ის მზადაა პირველი პროგრამის მისაღებად. პროგრამისტს ენიჭება გამოყენებული LPT პორტი, სიხშირე, ფაილის სახელი და სხვა პარამეტრები (ყველა მათგანი ჩამოთვლილია AVReal-ის აღწერაში). ჩვენ ავკრიფეთ:

Avreal32.exe +Mega16 -o11.0592MHz -p1 -e -w -az -% Prog1.hex

თუ კავშირი სწორია, პროგრამისტი შეატყობინებს წარმატებულ პროგრამირებას. არ არსებობს გარანტია, რომ ეს იმუშავებს პირველად (პირველად დარეკავთ პროგრამას). მე თვითონ ხანდახან მეორედ ვპროგრამირდები. შესაძლოა LPT პორტი გაუმართავია ან არის ჩარევა კაბელში. თუ პრობლემები წარმოიქმნება, ყურადღებით შეამოწმეთ თქვენი კაბელი. საკუთარი გამოცდილებიდან ვიცი, რომ გაუმართაობის 60% დაკავშირებულია სწორ ადგილას კონტაქტის ნაკლებობასთან, 20% არასაჭირო ნივთის არსებობასთან და კიდევ 15% არასწორი ნივთის არასწორ ნივთზე შედუღებასთან. თუ ყველაფერი ვერ მოხერხდა, წაიკითხეთ პროგრამისტის აღწერა და სცადეთ შექმნათ Byte Blaster.

დავუშვათ, ყველაფერი მუშაობს თქვენთვის. თუ ახლა დააკავშირებთ რვა LED-ს MK-ის B პორტთან (ეს გააკეთეთ გამორთული MK-ით და მიზანშეწონილია 300-400 Ohm რეზისტორების სერიებში ჩასმა LED-ებთან ერთად) და გამოიყენებთ ენერგიას, მოხდება პატარა სასწაული - ” ტალღა“ გაივლის მათ!

© Kiselev Roman
2007 წლის მაისი

მოგეწონათ სტატია? Მეგობრებთან გაზიარება: