Saturday, June 16, 2012

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


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



ასეთ მოწყობილობებს კვარცული რეზონატორები ეწოდებათ. ელექტრონულ სქემებში მათი აღსანიშნავი სიმბოლო ნაჩვენებია ნახაზზე. ასევე აღინიშნება სხვა (არა კვარცის) რეზონატორებიც მაგ., კერამიკული (პიეზოკერამიკა), როლებიც ასევე ფართოდ გამოიყენება პრაქტიკაში, განსაკუთრებით დაბალი სიხშირეებისათვის, რომელთათვისაც კვარცის ზომები მიუღებლად დიდია.
Atmel მიკროკონტროლერებს კვერცის რეზონატორი უერთება ნახაზზე ნაჩვენები სქემის მიხედვით. C1, C2 კონდენსატორების ტევადობა შეადგენს 12-22 პიკოფარადას.



ინფორმაციის შეყვანა მიკროკონტროლერში


ინფორმაციის შეყვანა მიკროკონტროლერში.

წინა პუბლიკაციებში დაწვრილებით იყო განხილული Atmega8 მიკროკონტროლერიდან ინფორმაციის გამოყვანის პროცედურა, Alhorithm Builder კომპილატორი და Proteus სიმულატორი. ამ პუბლიკაციაში განვიხილავთ მიკროკონტროლერში ინფორმაციის შეყვანის მაგალითს. წინა ალგორითმი ახორციელებდა მიკროკონტროლერის PB0, PB1 გამომყვანებთან  მიერთებული შუქდიოდების მონაცვლეობით ციმციმს. გარდავქმნათ ალგორითმი ისე, რომ იგი დამატებით ახორციელებდეს PC1, PC2 გამომყვანებთან მიერთებული შუქდიოდების მართვას ღილაკის საშუალებით, რომელიც მიერთებულია PC0 გამომყვანთან.


ალგორითმის ნახაზზე წითელი და მწვანე ფერებით გამოყოფილია ალგორითმში შეტანილი ცვლილებები. განვიხილოთ ისინი დაწვრილებით. პირველი სამი წითელი სტრიქონი ადგენს C პორტის PC0, PC1, PC2 გამომყვანების მიმართულებებს. კერძოდ, PC0 იმუშავებს ინფორმაციის შეყვანაზე, PC1, PC2 - გამოყვანაზე. C პორტის დანარჩენი გამომყვანების მიმართულებები უცვლელად დარჩა. აქ გამოვიყენეთ კონსტრუქცია  #->DDRx .# , რომელიც საშუალებას იძლევა „1“ ან „0“ უშუალოდ ჩავწეროთ DDRC რეგისტრის ცალკეულ თანრიგებში და ამით განვსაზღვროთ C პორტის ცალკეული გამომყვანების მიმართულებები.
განსაკუთრებული ყურადღების ღირსია მე-4 წითელი სტრიქონი. მართლაც, თუ PORTC-ს ნულოვანი გამომყვანი (PC0) შეყვანაზე დავაპროგრამეთ, რატომღა ვწერთ PORTC-ს ნულოვან თანრიგში ლოგიკურ „1“ ?  საქმე შემდეგშია: თუ პორტის გამომყვანი ინფორმაციის გამოყვანაზეა დაპროგრამებული (ე.ი. DDRx .# = 1), მაშინ ბრძანებები R->PORTx ,  1->PORTx .#  ან  0->PORTx .#  იწვევს შეაბამისი გამომყვანის ლოგიკური „1“ ან „0“ მდგომარეობაში  გადართვას, იმის და მიხედვით, თუ რა იყო ჩაწერილი PORTx-ის შესაბამის თანრიგში.  თუ პორტის გამომყვანი შეყვანაზეა დაპროგრამებული (ე.ი. DDRx .# = 0), მაშინ იგივე ბრძანებები იწვევენ შესაბამის გამომყვანებსა და კვების წყაროს  შიდა პლუს გამომყვანს შორის შიდა რეზისტორების მიერთებას ან მათს გათიშვას ( „1“ იწვევს შიდა რეზისტორის მიერთებას, „0“ - გათიშვას). ეს ღონისძიება იმისათვის არის საჭირო, რომ შეყვანაზე დაპროგრამებული გამომყვანი ჰაერში ჩამოკიდებული არ აღმოჩდეს. უკანასკნელ შემთხვევაში ამ გამომყვანთან მიერთებულ მავთულზე გარეშე ელექტრომაგნიტური ტალღებით გამოწვეულმა შემთხვევითმა პოტენციალებმა შეიძლება ყველაფერი აგვირიოს. თუ მე-4 წითელ სტრიქონს არ გამოვიყენებდით, მაშინ მოგვიწევდა სქემაში კიდევ ერთი, R5 რეზისტორის ჩართვა როგორც ეს ქვემოთ მოყვანილ სქემაზეა ნაჩვენები.

წითელ მე-5 და მე-6 სტრიქონებში ხდება R2, R3 რეგისტრებში საწყისი მნიშვნელობების ჩაწერა. წითელი მე-7 სტრიქონი ამოწმებს, დაჭერილია, თუ არა, ღილაკი (C პორტის ნულოვან გამომყვანზე შეიძლება იყოს ლოგიკური „1“ ან „0“; თუ ლოგიკური ნოლია, მაშინ ღილაკი დაჭერილია).  თუ ღილაკი დაჭერილი არ არის, მაშინ სრულდება წითელი მე-8 სტრიქონი -რეგისტრში R3 იწერება „0“ და პროგრამა აგრძელებს D1, D2 შუქდიოდების ციმციმის მომსახურებას. თუ ღილაკი დაჭერილია, მაშინ პროგრამა გადადის ალგორითმის მწვანე შტოზე. პირველ მწვანე სტრიქონში მოწმდება - ამ მომენტისათვის ღილაკი დაჭერილი იყო, თუ არა (R3 = 0 ?). თუ არ იყო დაჭერილი - მაშინ ფიქსირდება, რომ ახლა უკვე დაჭერილია (1->R3, სტრიქონი მე-2) და რეგისტრი R2-ის მნიშვნელობა იზრდება ერთით (R2++, სტრიქონი მე-3). შემდეგ მოწმდება მერამდენე დაჭერაა. თუ ღილაკი მესამედ არის დაჭერილი, მაშინ დაჭერის მრიცხველი განოლდება და D3, D4 შუქდიოდები ჩაქრება (0->R2, 0->PORTC .1, 0->PORTC .2). თუ ღილაკი მეორედ იქნა დაჭერილი, მაშინ აინთება D4 ,  ჩაქრება D3  (1->PORTC .2, 0->PORTC .1). თუ R2 არ უდრის არც 3 და არც 2, მაშინ ეს პირველი დაჭერაა, ამიტომ ჩაქრება  D4,  აინთება D3 (0->PORTC .2, 1->PORTC .1) და პროგრამა გადავა D1, D2 შუქდიოდების მომსახურებაზე. შემდეგ ისევ შემოწმდება ღილაკის დაჭერა და თუ ღილაკი აშვებული არ იყო, მაშინ არაფერი არ შეიცვლება - პროგრამა გააგრძელებს D1, D2 შუქდიოდების მომსახურებას. სიტუაცია შეიცვლება, თუ ღილაკს ავუშვებთ. ამ დროს R3 განოლდება (წითელი მე-8 სტრიქონი) და მორიგი შემოწმებისას ისევ ჩაირთვება D3, D4 შუქდიოდების მომსახურება.
შეამოწმეთ ალგორითმის მუშაობა Proteus-ის დახმარებით. როგორ კეთდება ეს,  აღწერილია წინა პუბლიკაციებში. აქ მხოლოდ ავღნიშნავ, რომ ღილაკის შემოსაყვანად საჭიროა Proteus -ის მენიუში აირჩიოთ „Library”, “Pick Device/Symbol” და ფანჯარაში “Keyword” აკრიფოთ “button”.
გაუშვით სიმულაცია. D1, D2 შუქდიოდები მონაცვლეობით უნდა ინთებოდნენ, ხოლო  D3, D4 შუქდიოდება ღილაკზე მაუსის დაჭერისას უნდა იცვლიდნენ ნათებას.
ადვილი შესამჩნევია, რომ შუქდიოდები საგრძნობლად აგვიანებენ რეაქციას ღილაკის დაჭერაზე. ეს იმის ბრალია, რომ მიკროკონტროლერი დაკავებულია დაყოვნების ქვეპროგრამის შესრულებით (Delay). თუ როგორ შეძლება გამოსწორდეს ეს ნაკლი, განხილული იქნება მომდევნო პუბლიკაციაში. თვალყური ადევნეთ პუბლიკაციებს. ნუ შეეცდებით გადაახტეთ მათ თანმიმდევრობას!

Friday, June 15, 2012

Как сделать LED POV дисплей

LED POV Display


Устройства подобного рода получили в интернете название LED POV DISPLAY от аббревиатуры Persistance Of Vision - инертность зрительного восприятия, что проявляется в способности человеческого глаза запоминать изображение в течении 0.1 сек.
 Формирование изображения происходит путем механической развертки. Двигатель вращает со скоростью около 20-25 об/сек (чтобы поменьше мерцало) линейку из светодиодов. В каждый данный момент времени горит определенная группа светодиодов но глаз в силу своей инерционности воспринимает изображение целиком. По той же причине не видна и арматура, с помощью которой  крепится линейка светодиодов. Остальное все просто. Надо только зажигать нужные светодиоды в нужное время.

Как это делается?

პროგრამატორი Atmel მიკროკონტროლერებისათვის


პროგრამატორი Atmel მიკროკონტროლერებისათვის

ინტერნეტში საკმარისი რაოდენობით არის წარმოდგენილი პროგრამატორები მიკროკონტროლერების დასაპროგრამებლად. ნებისმიერი პროგრამატორი შესდგება ორი კომპონენტისაგან:
1. პროგრამული ნაწილი (Software), რომელიც უზრუნველყოფს მთელი პროგრამატორის მუშაობას – პროგრამული კოდის  კომპიუტერიდან წაკითხვას, მის ჩაწერას მიკროკონტროლერში, ჩაწერის სისწორის შემოწმებას, მიკროკონტროლერის FlashROM მახსოვრობის წაშლას და ა.შ.
2. აპარატურული ნაწილი (Hardware), რომელიც მოიცავს ელექტრონიკას, კაბელებს, შემაერთებლებს და ა.შ.  სწორედ ეს კომპონენტი ახორციელებს კავშირს კომპიუტერსა და მიკროკონტროლერს შორის. კავშირი ხორციელდება კომპიუტერის რომელიმე საკომუნიკაციო მოწყობილობის –
პარალელური პორტის, მიმდევრობითი საცომუნიკაციო პორტის  ან USB პორტის საშუალებით.
გრაფიკული კომპილატორი Algoritm Builder შეიცავს პროგრამატორის მუშაობისათვის საჭირო პროგრამულ ნაწილს, რომელიც საშუალებას იძლევა ამავე კომპილატორში შექმნილი პროგრამები ჩაწერილ იქნან მიკროკონტროლერში. საჭიროა, მხოლოდ აპარატურული ნაწილის დამზადება. ქვემოთ მოყვანილია პროგრამატორის პრინციპული სქემა.
სქემა შეიცავს 7 რეზისტორს, რომელთა წინაღობა 1 კილოომის ტოლია და 3 დიოდს. სქემაზე მითითებულის გარდა შეიძლება გამოიყენოთ ნებისმიერი სხვა, მცირე სიმძლავრის იმპულსური დიოდები. ყურადღება მიაქციეთ დიოდების სქემაში ჩართვის პოლარობას (იხ. ნახ.).
პროგრამატორის ერთი მხარე უერთდება კომპიუტერის მიმდევრობით პორტს 9 კონტაქტიანი კონექტორის საშუალებით.
პროგრამატორის მეორე მხარეს უნდა მიუერთდეს დასაპროგრამებელი მიკროკონტროლერი. რა თქმა უნდა, მიკროკონტროლერისა და პროგრამატორის გამომყვანების შესაბამისობა ზუსტად უნდა იყოს დაცული. ნახაზზე მოცემულია Atmega8 მიკროკონტროლერის გამომყვანების სქემა. მიკროსქემა გამოსახულია ზედხედში, ანუ წარწერების მხრიდან. გამომყვანების ნუმერაციის თანმიმდევრობის განსასაზღვრავად, მიკროსქემის კორპუსზე დატანილია სპეციალური ჭდე (წითელი ისარი).
როგორც ნახაზიდან ჩანს, მიკროკონტროლერის ცალკეულ გამომყვანებს რამოდენიმე დანიშნულება აქვთ. მაგ., ნომერი 1 გამომყვანი 2 ფუნქციას ასრულებს: ერთის მხრივ იგი წარმოადგენს C პორტის მე-6 თანრიგის გამომყვანს PC6, ხოლო მეორე მხრივ, ასრულებს RESET გამომყვანის ფუნქციას. მიკროკონტროლერის ნორმალური მუშაობისათვის საჭიროა RESET გამომყვანზე მიეწოდებოდეს ლოგიკური “1″. ამ გამომყვანზე უარყოფითი იმპულსის მიწოდება ( ანუ “1″-დან “0″-ში გადართვა და ისევ უკან “1″-ში დაბრუნება) იწვევს მიკროკონტოლერის პროგრამის შესრულების თავიდან დაწყებას. როგორც წესი, მიკროკონტროლერის სქემაში ჩართვისას ამ გამომყვანს რთავენ ქვემოთ მოყვანილი სქემით:
იდეა მდგომარეობს შემდეგში: კვების წყაროს ჩართვის მომენტიდან რაღაც დროის განმავლობაში, იმის გამო, რომ კონდენსატორი ჯერ არ არის დამუხტული, RESET გამომყვანზე არ არის ლოგიკური “1″. ამიტომ მიკროკონტროლერის პროგრამა არ მუშაობს. ეს საშუალებას იძლევა დაველოდოთ კვების ჩართვის თანმხლები გარდამავალი პროცესების დამთავრებას. გარკვეული დროის შემდეგ, კონდენსატორი დაიმუხტება, RESET სიგნალი მიაღწევს ლოგიკური “1″ დონეს და მიკროკონტროლერის პროგრამა ამუშადება.
პროგრამატორის დასაკავშირებლად მიკროკონტროლერთან სასურველია გამოვიყენოთ სპეციალური ბუდეები, რომლებიც სურათზეა ნაჩვენები. ეს თავიდან აგვაცილებს დაპროგრამების დროს სარჩილავის ხმარების აუცილებლობას.




აი, როგორი პროგრამატორი ავაწყვე მე ჩემთვის:
დაპროგრამებისას მიკროკონტროლერის ყველა გამომყვანი აღნიშვნით “GND” მიერთებული უნდა იყოს სქემის საერთო მავთულთან და კვების წყაროსმინუსგამომყვანთან, ხოლო ყველა გამომყვანი “VCC” აღნიშვნით მიერთებული უნდა იყოს კვების წყაროსპლუსგამომყვანთან. კვების ძაბვა უნდა იყოს 4.5 – 5 ვოლტი.
შევუდგეთ მიკროკონტროლერის დაპროგრამებას. მიუერთეთ პროგრამატორი კომპიუტერის მიმდევრობით პორტს (COM Port), ჩასვით ბუდეში მიკროკონტროლერი, ჩართეთ მიკროკონტროლერის კვების წყარო (ბატარეა). Algorithm Builder -ში გახსენით თქვენი ალგორითმი და მენიუში აირჩიეთ “Options ” “Environment Options” “Port” და მიუთითეთ პორტის ნომერი, რომელთანაც მიერთებულია პროგრამატორი.


მენიუში აირჩიეთ “Program” “Run with Chip”. მოყვანილ სურათზე ნაჩვენებია, რომ ამორჩეულია მიკროკონტროლერის შემოწმება, მისი წაშლა და FLASH ROM მახსოვრობის დაპროგრამება. EEPROM მახსოვრობის დაპროგრამება, აგრეთვე ფუზ ბიტების დაპროგრამება და სხვა ოპციები ამორჩეული არ არის. დააჭირეთ “Start”. რამდენიმე წამში დაპროგრამება დასრულდება.

ახალ, ჯერ კიდევ დაუპროგამებელ მიკროკონტროლერში ფუზ ბიტების კონფიგურაცია შეესაბამება ტაქტირებას შიდა გენერატორიდან, რომლის სიხშირეა 1 მგჰც. სიხშირის შესაცვლელად მონიშნეთ “Write fuse bits” და დააჭირეთ ლურჯად მონიშნულს “Fuse bits…”
“Clock source” წარწერის გასვრივ ლურჯად მონიშნულ წარწერაზე დაჭერა იწვევს ტაქტირების პარამეტრების ცვლილებას. ამოირჩიეთ 2 მგჰც და დააჭირეთ “Write”. თქვენი მიკროკონტროლერი გადაპროგრამდა 2 მგჰც სიხშირეზე სამუშაოდ.
დაპროგრამება დასრულებულია. შეგიძლიათ ჩასვათ მიკროკონტროლერი სქემაში, ჩართოთ სქემა და ნახოთ რა გამოვიდა.სქემის აწყობის და მისი გამართვის შესახებ შემდეგ სტატიებში.

მიკროკონტროლერის პროგრამირება ერთ დღეში (ნაწ. 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მჰც. ამიტომ მიკროკონტროლერი ორჯერ უფრო სწრაფად ამუშავდა და შუქდიოდების ციმციმის სიხშირემ მოიმატა. როგორ ჩავწეროთ პროგრამული კოდი და ფუზ ბიტები მიკროკონტროლერში, განხილული იქნება შემდეგ სტატიაში.

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


მიკროკონტროლერის პროგრამირება ერთ დღეში (ნაწ. 2)
          წინა სტატიაში აღწერილი იყო გრაფიკულ კომპილატორში (Algorithm builder ) ალგორითმისა და პროგრამული კოდის შექმნის პროცესი Atmega8 მიკროკონტროლერისათვის. მიღებული პროგრამული კოდი (Mc1day.hex) პირდაპირ შეიძლება იქნას ჩაწერილი მიკროკონტროლერის FlashROM -მახსოვრობაში, მაგრამ პროგრამის გამოცდისათვის საჭირო იქნება მთელი მოწყობილობის აწყობა და გამართვა. ჩვენს შემთხვევაში ეს დიდ სიძნელეს არ წარმოადგენს, ვინაიდან საქმე მხოლოდ ერთი შუქდიოდის მიერთებას ეხება, მაგრამ მეტ-ნაკლებად რთული სქემის შემთხვევაში, ცხადი ხდება პროგრამის გამართულობის წინასწარი შემოწმების აუცილებლობა. პროგრამული პროდუქტი – Proteus შეიცავს ელექტრონული მოწყობილობების პრინციპული სქემების შექმნის და მათი მუშაობის მოდელირების პროგრამას -ISIS და ნაბეჭდი დაფების პროექტირების პროგრამას -ARES. ჩვენ ამ სისტემიდან გამოვიყენებთ მხოლოდ პირველ მათგანს.
Proteus -ის დაინსტალირების შემდეგ გაუშვით პროგრამა ISIS. მენიუში აირჩიეთ “Library” “Pick Device/Symbol” და ახლად გახსნილი ფორმის ფანჯარაში “Keywords” ჩაწერეთ atmega8. პროგრამა მოძებნის ამ კომპონენტს თავის ბიბლიოთეკებში და გვიჩვენებს მის სქემატურ აღნიშვნასა და (თუ ეს შესაძლებელია) მისი კორპუსის ნახაზს. დააჭირეთ “OK”. მიკროკონტროლერი ATMEGA8 აისახება ჩვენი პროექტის ფანჯარაში “Devices”. გაიმეორეთ კომპონენტის შემოყვანის პროცედურა. ამჯერად ფანჯარაში “Keywords” ჩაწერეთ led-red. “led” წარმოადგენს “light emission diode” -ის აბრევიატურას. ასე ეწოდება შუქდიოდს ინგლისურად. ჩვენ ამოვირჩიეთ კომპონენტი “წითელი შუქდიოდი”. ეს კომპონენტი არ წარმოადგენს რომელიმე კონკრეტული ფირმის, კონკრეტული მარკის შუქდიოდს. ის Proteusis შუქდიოდის სამოდელო პრიმიტივია. ამიტომ მას არავითარი კორპუსი არ შეესაბამება. ბოლოს დაგვჭირდება კიდევ ერთი კომპონენტი – რეზისტორი. ეს უბრალოდ ელექტრული წინაღობაა, რომელიც საჭიროა იმისათვის, რომ შუქდიოდში მეტისმეტად დიდმა დენმა არ გაიაროს. პროექტში მის შემოსაყვანად გაიმეორეთ კომპონენტის შემოყვანის პროცედურა და ფანჯარაში “Keywords” ჩაწერეთ res. ახლა პროექტში გვაქვს სამივე საჭირო კომპონენტი. “Devices” ფანჯარაში აირჩიეთ RES და მოათავსეთ იგი საპროექტო ფურცელზე. თაგუნას ღილაკზე ყოველი დაჭერისას შეიქმნება კომპონენტის ახალი
 ეგზემპლარი. ეს იმიტომ ხდება, რომ პროგრამა იმყოფება კომპონენტების რეჟიმში. პროგრამის ინტერფეისის მარცხენა მხარეს განთავსებულია რეჟიმების პანელი.


კომპონენტების რეჟიმიდან გამოსასვლელად აირჩიეთ მონიშვნის რეჟიმი. ჩვენ გვჭირდება სულ ერთი რეზისტორი. ამიტომ მონიშნეთ ზედმეტი კომპონენტები და თაგუნას მარჯვენა ღილაკის მენიუში აირჩიეთ “Delete Object”. მონიშნეთ ასევე დარჩენილი რეზისტორი და თაგუნას მარჯვენა ღილაკის მენიუში აირჩიეთ “Edit Properties”. ახლად გახსნილი ფორმის ფანჯარაში “Resistance” მნიშვნელობა 10k შეცვალეთ 100-ზე. ამ პროცედურით რეზისტორის წინაღობის მნიშვნელობა 10 კილოომიდან შეიცვალა 100 ომზე. განალაგეთ საპროექტო ფურცელზე დანარჩენი კიმპონენტების თითო ეგზემპლარი. გადადით ტერმინალების რეჟიმში, ამოირჩიეთ “GROUND” და ეს კომპონენტიც განათავსეთ საპროექტო ფურცელზე. ახლა მონიშვნის რეჟიმში განახორციელეთ საჭირო შეერთებები ისე, როგორც ეს სურათზეა მოცემული. სქემის შედგენა დამთავრებულია!

ახლა საჭიროა მიკროკონტროლერს მივუთითოთ იმ პროგრამაზე, რომელიც უნდა იქნას შესრულებული. ამისათვის მონიშნეთ Atmega8 და თაგუნას მარჯვენა ღილაკის მენიუში აირჩიეთ “Edit Properties”. ფანჯარაში “Program File:” ყვითელი ღილაკის გამოყენებით მოძებნეთ საჭირო პროგრამული კოდი, ანუ ფაილი Mc1day.hex, რომელიც მოთავსებულია ფოლდერში Mc1day, რომელიც თავის მხრივ იმყოფება “My Documents” ფოლდერში. გაუშვით სიმულაცია პროგრამის ინტერფეისის ქვემოთ მოთავსებული ღილაკის საშუალებით და დატკბით შუქდიოდის ციმციმით.

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


მიკროკონტროლერის პროგრამირება ერთ დღეში (ნაწ. 1)
შევადგინოთ და გამოვცადოთ პროგრამა Atmega8 მიკროკონტროლერისათვის, რომელიც უზრუნველყოფს შუქდიოდის ციმციმს. დაგვჭირდება მხოლოდ ორი პროგრამა:
1.
Algorithm builder
http://www.algrom.net/russian.html
2. Proteus http://bin.ge/file/60446/Proteus-7-6-SP0-rus.rar.html
პირველი მათგანიAlgorithm builder წარმოადგენს გრაფიკულ კომპილატორს, რომელიც იძლევა ფირმა Atmel-ის მიკროკონტროლერებისათვის პროგრამული კოდის შედგენის საშუალებას პროგრამირების გარეშე.
მეორე პროგრამული პროდუქტიProteus შეიცავს ელექტრონული მოწყობილობების პრინციპული სქემების შექმნის და მათი მუშაობის მოდელირების პროგრამას -ISIS და ნაბეჭდი დაფების პროექტირების პროგრამას -ARES. ჩვენ ამ სისტემიდან გამოვიყენებთ მხოლოდ პირველ მათგანს.
“My Documents”
ფოლდერში შექმენით ახალი ფოლდერი “Mc1day”დააინსტალირეთ და გაუშვით Algorithm builder . ამოირჩიეთ File, New.მენიუში აირჩიეთ “Options” “Project Options” და “Chip” ჩამონათვალში მონიშნეთ Atmega8.იქვე “Clock frequency,Hz” ფანჯარაში ჩაწერეთ 1000000. ამრიგად მოვახდინეთ მიკროკონტროლერის ტიპისა და მისი სატაქტო სიხშირის ამორჩევა. ერთი ტაქტის ანუ ერთი ბრძანების შესრულების დრო ამ სიხშირის შებრუნებული სიდიდის (ანუ, ჩვენს შემთხვევაში, 1 მიკროსეკუნდის) ტოლი იქნება.მენიუში აირჩიეთ “File” “Save As” და შეინახეთ პროექტი თქვენს მიერ შექმნილ ფოლდერში იმავე სახელით “Mc1day”.
“|” სიმბოლო აღნიშნავს პროგრამის ან ქვეპროგრამის დასაწყისს -”Vertex”. გადაინაცვლეთ ამ სიმბოლოზე და დაარქვით მას “RESET”. ჩვენს პროგრამაში ეს ის წერტილია, საიდანაც იწყება პროგრამის შესრულება კვების წყაროს ჩართვისას. იმისთვის, რომ ეს სწორედ ასეა და RESET არ არის უბრალოდ ქვეპროგრამა, საჭიროა, რომ “RESET” იყოს გამუქებული (Bold). ეს მიიღწევა F2 კლავიშის დაჭერით ან მენიუში “Elements” “Bold” ამორჩევით.
NOP – ცარიელი ბრძანებაა, მისი შესრულებისას არავითარი ოპერაცია არ სრულდება, უბრალოდ ხდება ერთი ტაქტის გამოტოვება. “<- Backspace” კლავიშის საშუალებით წაშალეთ იგი და მის ნაცვლად ჩაწერეთ:
სიმბოლო ” -> ” მიიღება “~” კლავიშზე დაჭერით და აღნიშნავს მინიჭების ოპერაციას. ჩვენი ჩანაწერი კი შეესაბამება ბრძანებას “თექვსმეტობითი რიცხვი FF გადაგზავნე რეგისტრში R16″ (შეგახსენებთ, რომ თექვსმეტობითი FF უდრის ორობით რიცხვს 1111 1111). რა თქმა უნდა, $FF-ის ნაცვლად შეგვეძლო ჩაგვეწერა ათობითი 255 -> R16, მაგრამ პროგრამირებისას მიღებულია თექვსმეტობითი ფორმატის ხმარება – უმჯობესია მიეჩვიოთ. დააჭირეთ <–| Enter”.
თაგუნას კურსორი “NOP” ბრძანების მარცხნივ აღმოჩნდა, ამიტომ წაშლა აღარ არის საჭირო. შეგვიძლია გავაგრძელოთ ახალი ბრძანების ბეჭდვა.
“R16 -> DDRB” ნიშნავს “გადაგზავნე R16 რეგისტრი B პორტის DDR რეგისტრში”. მიკროკონტროლერის შეყვანა/გამოყვანის (I/O) პორტები განკუთვნილია როგორც ინფორმაციის შესაყვანად, ისე მის გამოსაყვანად. ამიტომ მიკროკონტროლერს უნდა ეცნობოს, რომელ რეჟიმში უნდა იმუშაოს პორტმა. პორტი 8 თანრიგიანია და შესაძლებელია მისი ცალკეული თანრიგების გამომყვანები სხვადასხვა რეჟიმში მუშაობდენ. თუ პორტის DDR რეგისტრის რომელიმე თანრიგში “1″ ჩავწერთ, მაშინ პორტის შესაბამისი თანრიგის გამომყვანი ინფორმაციის გამოყვანის რეჟიმში გადაირთვება. “0″ ჩაწერა იწვევს ინფორმაციის შეყვანის რეჟიმში გადართვას. ჩვენ DDRB რეგისტრში $FF ჩავწერეთ (სწორედ ეს რიცხვი იყო R16 რეგისტრში), რაც გამოწვევს B პორტის ყველა 8 გამომყვანის გადართვას ინფორმაციის გამოყვანის რეჟიმში. რომ ჩაგვეწერა რიცხვი $E4 (ორობითი 1110 1000), მაშინ მიკროკონტროლერის B პორტის გამომყვანები B7,B6,B5 გადაირთვებოდა გამოყვანის რეჟიმში, B4 – შემოყვანის რეჟიმში, B3 -გამოყვანის რეჟიმში, B2,B1,B0 – შემოყვანის რეჟიმში.
გავაგრძელოთ: გამოვიყვანოთ “1″ B პორტის ყველა თანრიგში. ახლა, თუ B პორტის რომელიმე გამომყვანზე შუქდიოდს მივაერთებთ და პროგრამას გავუშვებთ, მაშინ შუქდიოდი აინთება.
შევეცადოთ, რომ შუქდიოდი ციმციმებდეს. ამისათვის საჭიროა, რომ შუქდიოდი რაღაც დროის განმავლობაში ენთოს, შემდეგ იმავე დროის განმავლობაში ჩაქრეს და პროცესი განმეორდეს.
მენიუში ამოირჩიეთ “Elements” “Label” . ამ ოპერაციის მეშვეობით ჩვენ შევქმენით “ჭდე” – ადგილი, სადაც შემდგომში შეგვიძლია დავბრუნდეთ.
R17, R18 რეგისტრებში ჩავწეროთ $FF. “R17- -”(ორი მინუსი) ნიშნავს “შეამცირე R17 რეგისტრის მნიშვნელობა ერთით”. თუ ამ ოპერაციას 255-ჯერ ($FF) გავიმეორებთ, მაშინ R17-ის მნიშვნელობა 0 -ის ტოლი გახდება, მაგრამ ამაზე 255 ტაქტი დაიხარჯება. ანუ მივიღებთ 255 ტაქტიან დაყოვნებას.რეალურად დაყოვნება გაცილებით მეტი იქნება, რადგან R17-ის მნიშვნელობის შემოწმებასაც დრო სჭირდება.
შევამოწმოთ უდრის თუ არა R17 რეგისტრის მნიშნელობა 0-ს. ამისთვის მენიუში ავირჩიოთ “Elements” “Condition” და შევამოწმოთ R17>0 ? თუ ეს ასეა, მაშინ გავიმეოროთ R17–. თუ ეს ასე არ არის (თუ R17 უკვე უდრის 0-ს), მაშინ გავაგრძელოთ – გადავიდეთ შემდეგ ბრძანებაზე. გადასვლის იმართულების საჩვენებლად გამოიყენეთ კლავიში “Alt” და იმავდროულად “მარჯვნივ”, “ზევით”, “მარცხნივ” ისრიანი კლავიშები.



R18 რეგისტრისათვის ანალოგიური ოპერაციების ჩატარება საშუალებას მოვცემს გავზარდოთ დაყოვნება კიდევ 255-ჯერ. ამ დროის განმავლობაში ჩვენი შუქდიოდი იქნება ანთებული. გავიმეოროთ იგივე პროცედურა ჩამქრალი შუქდიოდისათვის და დავიწყოთ თავიდან.
წითლად მონიშნული გადასვლის განსახორციებლად საჭიროა მენიუში აირჩიოთ “Elements” “JMP Vector” და შემდეგ გამოიყენოთ “Alt” + ისრიანი კლავიშები.




ალგორითმის შედგენა დასრულებულია! ახლა საჭიროა მისი კომპილაცია. ანუ საჭიროა, რომ გრაფიკული ფორმით წარმოდგენილი ალგოროთმიდან მივიღოთ მიკროკონტროლერის პროგრამულ მახსოვრობაში (FlashROM) ჩასაწერი კოდი. ამისთვის საჭიროა მენიუში აირჩიოთ “Program” “Compile” . კომპილატორი გვაცნობებს, რომ კომპილაცია წარმატებით დასრულდა. მენიუში აირჩიეთ “File” “Save” და დახურეთ პროგრამა.
გახსენით თქვენი ფოლდერი “Mc1day”. ნახავთ, რომ იქ შეიქმნა ახალი ფოლდერი “Mc1day_INI”, რომელშიც მოთავსებულია ინფორმაცია პროექტის შესახებ. ამ ფოლდერის შიგთავსი არ გვაინტერესებს. ჩვენთვის მნიშვნელოვანია მის გარეთ მოთავსებული ფაილები. Mc1day.alp – ეს თვით პროექტის ფაილია, Mc1day.hex – ეს სწორედ ის ფაილია, რომელიც უნდა ჩაიწეროს მიკროკონტროლერის FlashROM-ში, EE_Mc1day.hex – ფაილი წარმოადგენს მიკროკონტროლერის მუდმივი მახსოვრობის (EEPROM) შიგთავსს. მუდმივი მახსოვრობა ჩვენ არ გამოგვიყენებია, ამიტომ ეს ფაილი არ დაგვჭირდება. იმის შესახებ, თუ როგორ უნდა გამოვიყენოთ Mc1day.hex ფაილი – შემდეგ სტატიაში.