Friday, June 15, 2012

მიკროკონტროლერის პროგრამირება ერთ დღეში (ნაწ. 3)


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


ალგორითმი მოიცავს ორ შტოს. პირველი მათგანი, რომელიც იწყება ვერტექსით RESET, წამოადგენს ძირითად პროგრამას, ხოლო მეორე (ვერტქსით DELAY) წარმოადგენს დაყოვნების ქვეპროგრამას. ძირთად პროგრამაში დირექტივა “DELAY” ახორციელებს ამავე სახელწოდების ქვეპროგრამის შერულებას. სახელწოდება, რა თქმა უნდა, ნებისმიერი შეიძლება იყოს. ახალი ვერტექსის მისაღებად მოათავსეთ კურსორი თავისუფალ ადგილას და ერთდროულად დააჭირეთ Ctrl+Alt+Shift. მიღებულ ვერტექსს დაარქვით DELAY. დანარჩენი რაიმე სიძნელეს არ უნდა წარმოადგენდეს. თუ სტატიის პირველ ნაწილში მიღებულ და ახლად შექმნილ ალგორითმებს შევადარებთ, დავრწმუნდებით, რომ ისინი ფუნქციონალურად იდენტურნი არიან. ალგორითმის გამეორებადი ნაწილების ცალკე ქვეპროგრამად გამოყოფა ფართოდ გავრცელებულ პრაქტიკას წარმოადგენს. მენიუში აირჩიეთ “File” “Save As..” , დაარქვით პროექტს სახელი Mc1day_1 და შეინახეთ იმავე ფოლდერში. მენიუში აირჩიეთ “Program” “Compile”. გადაინაცვლეთ Proteus-ში და მონიშნეთ Atmega8. მარჯვენა ღილაკის მენიუში აირჩიეთ “Edit Properties”. ფანჯარაში “Program File:” ყვითელი ღილაკის გამოყენებით მოძებნეთ ფაილი Mc1day_1.hex და გაუშვით სიმულაცია. როგორც ხედავთ შედეგი იგივეა, რაც წინა ალგორითმის შემთხვევაში.
კიდევ ერთხელ შევცვალოთ ალგორითმი და სქემა:




ალგორითმში ცვლილებები გამოიწვევს იმას, რომ  PORTB გამომყვანებზე მონაცვლეობით გამოვა კომბინაციები 1010 1010 (ანუ თექვსმეტობითი AA) და 0101 0101 (თექვსმეტობითი 55). რაშიც ადვილად დავრწმუნდებით, თუ მოვახდენთ ამ ალგორითმის კომპილაციას და შემდგომ სიმულაციას Proteus-ში (როგორ უნდა გააკეთოთ ეს, უკვე იცით).

კიდევ ერთი მნიშვნელოვანი ცვლილება. ამჯერად მხოლოდ Proteus-ში: მონიშნეთ Atmega8. მარჯვენა ღილაკის მენიუში აირჩიეთ ”Edit Propertis”. ფანჯარაში “CKSEL Fuses” აირჩიეთ “(0010) Int.RC 2MHz” და გაუშვით სიმულაცია. შუქდიოდები ორჯერ უფრო სწრაფად დაიწყებენ ციმციმს. აქედან შეიძლება მნიშვნელოვანი დასკვნის გაკეთება: სიხშირე, რომელზეც მუშაობს მიკროკონტროლერი, არ არის მითითებული პროგრამულ კოდში (hex – კოდი). მართლაც, ჩვენ პროგრამა არ შეგვიცვლია. შევცვალეთ მხოლოდ რაღაც იდუმალი “CKSEL Fuses”. მიკროკონტროლერის ტაქტირების სიხშირე, ტაქტირების წყარო და კიდევ მთელი რიგი პარამეტრები იმართება სპეციალური ბიტების საშუალებით, რომელთაც “Fuse Bits” ეწოდებათ. ქართულად ალბათ უნდა ვიხმაროთ ფუზ ბიტები. ფუზ ბიტები ჩაიწერება მოკროკონტროლერში ცალკე, პროგრამისაგან დამოუკიდებლად, პროგრამატორის საშუალებით. ჩვენს მიკროკონტროლერს გააჩნია 16 ფუზ ბიტი. თვითოეულ მათგანს თავისი დანიშნულება და სახელი აქვს. 4 ბიტი CKSEL0-CKSEL3 განსაზღვრავს მიკროკონტროლერის ტაქტირების ხერხს და სიხშირეს. მიკროკონტროლერის ტაქტირება შესაძლებელია შემდეგი ხერხებით: PB6/TOSC1/XTAL1 გამომყვანზე მიერთებული გარე გენერატორის საშუალებით; შიდა RC გენერატორის საშუალებით; შიდა გენერატორის საშუალებით, რომელიც XTAL1, XTAL2 გამომყვანებზე მიერთებული გარე კვარცის რეზონატორით არის სტაბილიზირებული და კიდევ რამოდენიმე სხვა ხერხით. კომბინაციას CKSEL0=1, CKSEL1=0, CKSEL2=0, CKSEL3=0 შეესაბამება შიდა RC გენერატორი, რომლის სიხშირეა 1მჰც. სწორედ ეს კომბინაცია არის ჩაწერილი მიკროკონტროლერში თავდაპირველად ქარხანაში. კომბინაციას, რომელიც ჩვენ დავაყენეთ – CKSEL0=0, CKSEL1=1, CKSEL2=0, CKSEL3=0 შეესაბამება შიდა RC გენერატორი, რომლის სიხშირეა 2მჰც. ამიტომ მიკროკონტროლერი ორჯერ უფრო სწრაფად ამუშავდა და შუქდიოდების ციმციმის სიხშირემ მოიმატა. როგორ ჩავწეროთ პროგრამული კოდი და ფუზ ბიტები მიკროკონტროლერში, განხილული იქნება შემდეგ სტატიაში.

No comments:

Post a Comment