Სარჩევი:

AVR მიკროკონტროლერის დაუკრავენ ბიტების კონფიგურაცია. მიკროკონტროლის ფლეშ მეხსიერებაში შექმნა და ატვირთვა LED მოციმციმე პროგრამა .: 5 ნაბიჯი
AVR მიკროკონტროლერის დაუკრავენ ბიტების კონფიგურაცია. მიკროკონტროლის ფლეშ მეხსიერებაში შექმნა და ატვირთვა LED მოციმციმე პროგრამა .: 5 ნაბიჯი

ვიდეო: AVR მიკროკონტროლერის დაუკრავენ ბიტების კონფიგურაცია. მიკროკონტროლის ფლეშ მეხსიერებაში შექმნა და ატვირთვა LED მოციმციმე პროგრამა .: 5 ნაბიჯი

ვიდეო: AVR მიკროკონტროლერის დაუკრავენ ბიტების კონფიგურაცია. მიკროკონტროლის ფლეშ მეხსიერებაში შექმნა და ატვირთვა LED მოციმციმე პროგრამა .: 5 ნაბიჯი
ვიდეო: Чем отличается МИКРОКОНТРОЛЛЕР и МИКРОПРОЦЕССОР 2024, ივნისი
Anonim
Image
Image

ამ შემთხვევაში ჩვენ შევქმნით მარტივ პროგრამას C კოდში და დავწერთ მას მიკროკონტროლერის მეხსიერებაში. ჩვენ დავწერთ საკუთარ პროგრამას და შევადგენთ ექვსკუთხა ფაილს Atmel Studio- ს, როგორც ინტეგრირებული განვითარების პლატფორმის გამოყენებით. ჩვენ დავაკონფიგურირებთ დაუკრავენ ბიტებს და ავტვირთავთ ექვს ფაილს AVR ATMega328P მიკროკონტროლის მეხსიერებაში, ჩვენივე პროგრამისტისა და პროგრამული უზრუნველყოფის AVRDUDE გამოყენებით.

AVRDUDE - არის პროგრამა ატმელის AVR მიკროკონტროლერების ჩიპური მოგონებების გადმოტვირთვისა და ატვირთვისთვის. მას შეუძლია პროგრამირება Flash და EEPROM, და სადაც მხარს უჭერს სერიული პროგრამირების პროტოკოლი, მას შეუძლია დააპროგრამოს დაუკრავენ და ჩაკეტვა ბიტი.

ნაბიჯი 1: დაწერეთ პროგრამა და შეადგინეთ Hex ფაილი Atmel Studio– ს გამოყენებით

წერის პროგრამა და შეადგინეთ Hex ფაილი Atmel Studio– ს გამოყენებით
წერის პროგრამა და შეადგინეთ Hex ფაილი Atmel Studio– ს გამოყენებით
წერის პროგრამა და შეადგინეთ Hex ფაილი Atmel Studio– ს გამოყენებით
წერის პროგრამა და შეადგინეთ Hex ფაილი Atmel Studio– ს გამოყენებით

თუ თქვენ არ გაქვთ Atmel Studio, თქვენ უნდა გადმოწეროთ და დააინსტალიროთ:

ეს პროექტი გამოიყენებს C- ს, ამიტომ შეარჩიეთ GCC C შესრულებადი პროექტის ვარიანტი შაბლონების სიიდან, რათა შეიქმნას შიშველი ძვლების შემსრულებელი პროექტი.

შემდეგი, აუცილებელია მიუთითოთ რომელი მოწყობილობისთვის შეიქმნება პროექტი. ეს პროექტი შემუშავდება AVR ATMega328P მიკროკონტროლისთვის.

აკრიფეთ პროგრამის კოდი Atmel Studio– ს მთავარ წყაროს რედაქტორში. ძირითადი წყაროს რედაქტორი - ეს ფანჯარა არის მთავარი რედაქტორი წყაროს ფაილებისთვის მიმდინარე პროექტში. რედაქტორს აქვს მართლწერის შემოწმება და ავტომატურად სრული ფუნქციები.

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

#ifndef F_CPU

#განსაზღვრეთ F_CPU 16000000UL // ეუბნება კონტროლერს ბროლის სიხშირე (16 MHz AVR ATMega328P) #endif

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

#include // header მონაცემების ნაკადის კონტროლის გასააქტიურებლად ქინძისთავებზე. განსაზღვრავს ქინძისთავებს, პორტებს და ა.

#include // header პროგრამაში ფუნქციის შეფერხების გასააქტიურებლად

3. პრეამბულის შემდეგ მოდის მთავარი () ფუნქცია.

int მთავარი (ბათილია) {

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

4. დააყენეთ PORTB- ის 0 pin გამომავალი სახით.

DDRB = 0b00000001; // დააყენეთ PORTB1 როგორც გამომავალი

ჩვენ ამას ვაკეთებთ მონაცემთა მიმართულების რეესტრში ორობითი რიცხვის ჩაწერით. მონაცემთა მიმართულების რეესტრი B საშუალებას გვაძლევს გავაკეთოთ B რეგისტრის შეყვანის ან გამომავალი ბიტები. 1 -ის წერა მათ გამოსასვლელს ხდის, ხოლო 0 -ს შეყვანას. იმის გამო, რომ ჩვენ ვამაგრებთ LED- ს, რომ გამოვიდეს როგორც გამომავალი, ჩვენ ვწერთ ორობითი რიცხვს, რაც PORT B- ის 0 pin- ს გამომავალს გახდის.

5. მარყუჟი.

ხოლო (1) {

ეს განცხადება არის მარყუჟი, რომელსაც ხშირად უწოდებენ მთავარ მარყუჟს ან მოვლენის მარყუჟს. ეს კოდი ყოველთვის მართალია; ამიტომ, ის ასრულებს უსასრულო მარყუჟში. ის არასოდეს წყდება. ამრიგად, LED იქნება მოციმციმე უსასრულობაში, თუ მიკროკონტროლერის დენი არ გამორთულია ან კოდი წაშლილია პროგრამის მეხსიერებიდან.

6. ჩართეთ პორტი PB0- ზე დამაგრებული LED

PORTB = 0b00000001; // ჩართავს პორტს PB0- ზე დამაგრებულ LED- ს

ეს ხაზი, 1 -ს აძლევს PortB- ის PB0- ს. PORTB არის ტექნიკური რეგისტრი AVR ჩიპზე, რომელიც შეიცავს 8 ქინძისთავს, PB7-PB0, მარცხნიდან მარჯვნივ. 1 -ის დასმა ბოლოს 1 -ს აძლევს PB0- ს; ეს ადგენს PB0 მაღალს, რაც მას ჩართავს. ამიტომ, pin PB0- ზე მიმაგრებული LED ჩაირთვება და ანათებს.

7. გადადება

_ დაგვიანებით_ms (1000); // ქმნის 1 წამიან დაყოვნებას

ეს განცხადება ქმნის 1 წამის შეფერხებას, ისე რომ LED ბრუნდება და რჩება ზუსტად 1 წამის განმავლობაში.

8. გამორთეთ ყველა B ქინძისთავები, მათ შორის PB0

PORTB = 0b00000000; // გამორთავს ყველა B ქინძისთავს, მათ შორის PB0

ეს ხაზი გათიშავს პორტის B ყველა 8 ქინძისთავს, ისე რომ PB0 კი გამორთულია, ასე რომ LED გამორთულია.

9. კიდევ ერთი შეფერხება

_ დაგვიანებით_ms (1000); // ქმნის კიდევ 1 წამის დაყოვნებას

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

10. დაბრუნების განცხადება

}

დაბრუნება (0); // ეს ხაზი რეალურად არასოდეს მიღწეულა}

ჩვენი კოდის ბოლო ხაზი არის დაბრუნების (0) განცხადება. მიუხედავად იმისა, რომ ეს კოდი არასოდეს სრულდება, რადგან არსებობს უსასრულო მარყუჟი, რომელიც არ მთავრდება, ჩვენი პროგრამებისთვის, რომლებიც დესკტოპის კომპიუტერებზე მუშაობს, მნიშვნელოვანია ოპერაციულმა სისტემამ იცოდეს სწორად მუშაობს თუ არა. ამ მიზეზით, GCC, ჩვენი შემდგენელი, სურს, რომ ყველა ძირითადი () დასრულდეს დაბრუნების კოდით. დაბრუნების კოდები არასაჭიროა AVR კოდისთვის, რომელიც დამოუკიდებლად მუშაობს ნებისმიერი დამხმარე ოპერაციული სისტემისთვის; მიუხედავად ამისა, შემდგენელი გააფრთხილებს, თუ არ მთავრდება დაბრუნებით ().

ბოლო ნაბიჯი არის პროექტის მშენებლობა. ეს ნიშნავს ყველა ობიექტის ფაილის შედგენას და საბოლოოდ დაკავშირებას შემსრულებელი ფაილის (. Hex) ფაილის შესაქმნელად. ეს hex ფაილი გენერირდება საქაღალდის Debug რომელიც არის პროექტის საქაღალდეში. ეს ექვსკუთხა ფაილი მზადაა ჩატვირთული მიკროკონტროლის ჩიპში.

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

მიკრო კონტროლერის დაუკრავენ ბიტების ნაგულისხმევი კონფიგურაციის შეცვლა
მიკრო კონტროლერის დაუკრავენ ბიტების ნაგულისხმევი კონფიგურაციის შეცვლა
მიკრო კონტროლერის დაუკრავენ ბიტების ნაგულისხმევი კონფიგურაციის შეცვლა
მიკრო კონტროლერის დაუკრავენ ბიტების ნაგულისხმევი კონფიგურაციის შეცვლა
მიკრო კონტროლერის დაუკრავენ ბიტების ნაგულისხმევი კონფიგურაციის შეცვლა
მიკრო კონტროლერის დაუკრავენ ბიტების ნაგულისხმევი კონფიგურაციის შეცვლა

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

სულ არის 19 დაუკრავენ ბიტი, რომლებიც გამოიყენება ATmega328P– ში და ისინი გამოყოფილია სამ სხვადასხვა დაუკრავენ ბაიტად. სამი დაუკრავენ ბიტს შეიცავს "გაფართოებული სადაზღვევო ბაიტი", რვა შეიცავს "დაუკრავენ მაღალ ბაიტს" და კიდევ რვა შეიცავს "დაუკრავენ დაბალ ბაიტს". ასევე არის მეოთხე ბაიტი, რომელიც გამოიყენება საკეტის ბიტების დასაპროგრამებლად.

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

ATmega 328P ჩიპებს აქვთ ჩაშენებული RC ოსცილატორი, რომელსაც აქვს 8 MHz სიხშირე. ახალი ჩიპები იგზავნება ამ ნაკრებით, როგორც საათის წყარო და CKDIV8 დაუკრავენ აქტიური, რის შედეგადაც 1 MHz სისტემის საათი. გაშვების დრო დაყენებულია მაქსიმუმზე და დრო ამოწურულია.

ახალ ATMega 328P ჩიპებს, როგორც წესი, აქვთ შემდეგი დაუკრავენ პარამეტრები:

დაბალი დაუკრავენ = 0x62 (0b01100010)

მაღალი დაუკრავენ = 0xD9 (0b11011001)

გაფართოებული დაუკრავენ = 0xFF (0b11111111)

ჩვენ გამოვიყენებთ ATmega 328 ჩიპს გარე 16MHz ბროლით. ამიტომ, ჩვენ გვჭირდება პროგრამირება "Fuse Low Byte" შესაბამისად.

1. ბიტი 3-0 აკონტროლებს ოსცილატორის არჩევანს, ხოლო 0010-ის ნაგულისხმევი პარამეტრი არის კალიბრირებული შიდა RC ოსცილატორის გამოყენება, რაც ჩვენ არ გვსურს. ჩვენ გვსურს დაბალი სიმძლავრის ბროლის ოსცილატორის მოქმედება 8.0-დან 16.0 მჰც-მდე, ამიტომ ბიტი 3-1 (CKSEL [3: 1]) უნდა იყოს მითითებული 111-ზე.

2. ბიტი 5 და 4 აკონტროლებს გაშვების დროს, ხოლო ნაგულისხმევი პარამეტრი 10 არის გაშვების დაყოვნება ექვსი საათის ციკლის ჩათვლით ენერგიის დაზოგვისა და დამატებით 14 საათის ციკლის ჩატვირთვის დამატებით დამატებით გადატვირთვიდან 65 მილიწამი.

დაბალი სიმძლავრის კრისტალური ოსცილატორის უსაფრთხოდ ყოფნისთვის, ჩვენ გვსურს მაქსიმალური დაგვიანება 16,000 საათის ციკლებიდან გამორთვასა და ენერგიის დაზოგვაზე, ამიტომ SUT [1] უნდა იყოს 1-ზე დამატებული გაშვების დამატებითი შეფერხება 14 საათის ციკლიდან დამატებული 65 მილიწამი გადატვირთვიდან, ამიტომ SUT [0] უნდა იყოს მითითებული 1. გარდა ამისა, CKSEL [0] უნდა იყოს 1.

3. ბიტი 6 აკონტროლებს საათის გამოშვებას PORTB0– ზე, რაც ჩვენ არ გვაინტერესებს. ასე რომ, ბიტი 6 შეიძლება დარჩეს 1 -ზე.

4. ბიტი 7 აკონტროლებს ოპერაციის გაყოფით 8 და ნაგულისხმევი პარამეტრის 0 აქვს ფუნქცია ჩართული, რაც ჩვენ არ გვსურს. ასე რომ, ბიტი 7 უნდა შეიცვალოს 0 -დან 1 -მდე.

ამრიგად, ახალი დაუკრავენ დაბალი ბაიტი უნდა იყოს 11111111, რომელიც თექვსმეტობითი აღნიშვნით არის 0xFF

"დაუკრავენ დაბალი ბაიტის" ნაწილების დასაპროგრამებლად ჩვენ შეგვიძლია გამოვიყენოთ ჩვენი პროგრამისტი (https://www.instructables.com/id/ISP-Programmer-fo…) და AVRDUDE პროგრამული უზრუნველყოფა. AVRDUDE არის ბრძანების ხაზის პროგრამა, რომელიც გამოიყენება Atmel მიკროკონტროლერებიდან გადმოსატვირთად და ატვირთვისთვის.

ჩამოტვირთეთ AVRDUDE:

პირველ რიგში, ჩვენ უნდა დავამატოთ აღწერა ჩვენი პროგრამისტი AVRDUDE კონფიგურაციის ფაილში. Windows– ზე კონფიგურაციის ფაილი ჩვეულებრივ არის იმავე ადგილას, როგორც AVRDUDE შესრულებადი ფაილი.

ჩასვით ტექსტი კონფიგურაციის ფაილში avrdude.conf:

# ISPProgv1

პროგრამისტი id = "ISPProgv1"; desc = "სერიული პორტის დარტყმა, გადატვირთვა = dtr sck = rts mosi = txd miso = cts"; ტიპი = "სერბ"; კავშირის_ტიპი = სერიული; გადატვირთვა = 4; sck = 7; მოსი = 3; miso = 8;;

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

გახსენით DOS მოთხოვნის ფანჯარა.

1. პროგრამისტების სიის სანახავად, რომ avrdude მხარდაჭერილია ჩაწერეთ ბრძანება avrdude -c c. თუ ყველაფერი კარგად არის, სიას უნდა ჰქონდეს პროგრამისტის ID "ISPProgv1"

2. Atmel მოწყობილობების სიის სანახავად, რომლებიც avrdude მხარდაჭერილია, ჩაწერეთ ბრძანება avrdude -c ISPProgv1. სიას უნდა ჰქონდეს მოწყობილობა m328p Atmel ATMega 328P- ისთვის.

შემდეგი, აკრიფეთ avrdude -c ISPProgv1 –p m328p, ბრძანება აცნობეთ avrdude რა პროგრამისტი გამოიყენება და რა Atmel მიკროკონტროლი ერთვის. იგი წარმოადგენს ATmega328P ხელმოწერას თექვსმეტობით ნოტაციით: 0x1e950f. იგი წარმოგიდგენთ დაუკრავენ ბიტის პროგრამირებას ATmega328P– ში, ასევე თექვსმეტობით აღნიშვნაში; ამ შემთხვევაში, დაუკრავენ ბაიტებს პროგრამირება ქარხნის ნაგულისხმევად.

შემდეგი, აკრიფეთ avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, ეს არის ბრძანება, რომ ავდროუდს ვუთხრა რა პროგრამისტი გამოიყენება და რა Atmel მიკროკონტროლი არის მიმაგრებული და Fuse Low Byte– ის შეცვლა 0xFF.

ახლა საათის სიგნალი უნდა მოდიოდეს დაბალი სიმძლავრის ბროლის ოსცილატორიდან.

ნაბიჯი 3: პროგრამის დაწვა ATMega328P მიკროკონტროლის მეხსიერებაში

პროგრამის დაწვა ATMega328P მიკროკონტროლის მეხსიერებაში
პროგრამის დაწვა ATMega328P მიკროკონტროლის მეხსიერებაში
პროგრამის დაწვა ATMega328P მიკროკონტროლის მეხსიერებაში
პროგრამის დაწვა ATMega328P მიკროკონტროლის მეხსიერებაში

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

შემდეგ ჩაწერეთ DOS მოთხოვნის ფანჯარაში ბრძანება avrdude –c ISPProgv1 –p m328p –u –U flash: w: [თქვენი hex ფაილის სახელი]

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

ნაბიჯი 4: შეამოწმეთ მიკროკონტროლერი მუშაობს ჩვენი პროგრამის ინსტრუქციის შესაბამისად

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

შეაერთეთ კომპონენტები AVR მოციმციმე LED სქემის სქემატური დიაგრამის შესაბამისად

პირველ რიგში, ჩვენ გვჭირდება ენერგია, როგორც ამას აკეთებს ყველა AVR სქემა. დაახლოებით 5 ვოლტი ენერგია საკმარისია AVR ჩიპის მუშაობისთვის. ამის მიღება შეგიძლიათ ბატარეებიდან ან DC კვების ბლოკიდან. ჩვენ ვუკავშირდებით +5V სიმძლავრეს პინ 7 – ს და ვუკავშირდებით პინ 8 – ს მიწასთან ერთად დაფაზე. ორივე ქინძისთავებს შორის, ჩვენ ვათავსებთ 0.1μF კერამიკულ კონდენსატორს, რათა განვსაზღვროთ კვების ბლოკის სიმძლავრე ისე, რომ AVR ჩიპმა მიიღოს გლუვი ელექტროგადამცემი ხაზი.

10KΩ რეზისტორი გამოიყენება მოწყობილობაზე Power On Reset (POR) უზრუნველსაყოფად. როდესაც დენი ჩართულია, კონდენსატორზე ძაბვა იქნება ნული, ასე რომ მოწყობილობა გადატვირთულია (ვინაიდან გადატვირთვა აქტიურია დაბალი), მაშინ კონდენსატორი იტენება VCC– ზე და გადატვირთვა გამორთულია.

ჩვენ ვუკავშირდებით ჩვენი LED- ის ანოდს AVR pin PB0- თან. ეს არის ATMega328P პინ 14. ვინაიდან ეს არის LED, ჩვენ გვინდა შევზღუდოთ მიმდინარეობა, რომელიც მიედინება LED- ზე, რათა ის არ დაიწვას. სწორედ ამიტომ ჩვენ ვდებთ 330Ω რეზისტორს სერიაში LED- ით. LED- ის კათოდი უკავშირდება მიწას.

16 MHz კრისტალი გამოიყენება Atmega328 მიკროკონტროლის საათის უზრუნველსაყოფად და 22pF კონდენსატორები გამოიყენება ბროლის მუშაობის სტაბილიზაციისთვის.

ეს არის ყველა კავშირი, რომელიც აუცილებელია LED- ის გასანათებლად. Ენერგიის წყარო.

Კარგი. LED ციმციმებს ერთი წამის დაგვიანებით. მიკროკონტროლის მუშაობა შეესაბამება ჩვენს ამოცანებს

ნაბიჯი 5: დასკვნა

მართალია, ეს იყო გრძელი პროცესი მხოლოდ LED განათებისათვის, მაგრამ სიმართლე ის არის, რომ თქვენ წარმატებით გადალახეთ ძირითადი დაბრკოლებები: შექმენით აპარატურის პლატფორმა AVR მიკროკონტროლის პროგრამირებისათვის, Atmel Studio- ს, როგორც ინტეგრირებული განვითარების პლატფორმის გამოყენება, AVRDUDE პროგრამული უზრუნველყოფისთვის AVR მიკროკონტროლის კონფიგურაცია და დაპროგრამება

თუ გსურთ იყოთ განახლებული ჩემს ბაზაზე მიკროკონტროლერის პროექტებზე, გამოიწერეთ ჩემი YouTube! ჩემი ვიდეოების ყურება და გაზიარება არის იმის მხარდასაჭერად, რასაც ვაკეთებ

გამოიწერეთ YouTube FOG არხი

გირჩევთ: