Gallery

წყვეტები მიკროკონტროლერში

მიკროკონტროლერი. დღე 5.  

წყვეტები მიკროკონტროლერში. 

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

ალგორითმის ნახატზე ლურჯი ჯვრით აღნიშნული კავშირი გაწყვიტეთ “Alt” კლავიშისა და „ზევით“ ისრიანი კლავიშის ერთდროულად ხმარებით.   წითლად მონიშნული ელემენტები წაშალეთ. ამისათვის დააყენეთ კურსორი წასაშლელ ელემენტზე  (გააწითლეთ) და მარჯვენა ღილაკით აირჩიეთ “Delete”.  ჩაამატეთ ქვედა სურათზე წითლად მონიშნული სტრიქონები და ელემენტი “Ext Int”.

“Ext Int” ელემენტის ჩასამატებლად დააყენეთ კურსორი ელემენტზე  „SP“  (გააწითლეთ) და მენიუში აირჩიეთ “Elemets”, “Setter”, “External Interrupts”. ფანჯარაში მონიშნეთ “INT0” და დააჭირეთ ნახატზე წითლად მონიშნულ სტრიქონს. აირჩიეთ “falling edge”.

ალგორითმის სურათზე ლურჯად მონიშული ვერტექსისათვის სახელის მისანიჭებლად გააწითლედ იგი და მენიუში აირჩიეთ “Elemants”, “Interrupts”, “External_0”.
ამით ცვლილებები დამთავრებულია. განვიხილოთ დაწვრილებით ამ ცვლილებების შინაარსი. მიკროკონტროლერში გათვალისწინებულია სპეციალური პროცესი, რომელსაც წყვეტა ეწოდება. ეს პროცესი გულისხმობს, რომ რაიმე განსაზღვრული მოვლენის დადგომისას, ძირითადი  პროგრამა წყვეტს მუშაობას, იმახსოვრებს შეწყვეტის ადგილს და გადადის სხვა პროგრამის – ე.წ. წყვეტის პროგრამის შესრულებაზე. წყვეტის პროგრამის მომსახურების შემდეგ, მიკროკონტროლერი უბრუნდება ძირითადი პროგრამის შესრულებას იმ ადგილიდან, სადაც მოხდა წყვეტა.
მიკროკონტროლერი შეიცავს მთელ რიგ მოწყობილობებს (რამოდენიმე ტაიმერს, კომპარატორს, ანალოგურ-ციფრულ გარდამქმნელს და სხვა), რომელთა მუშაობის შედეგად შეიძლება მოხდეს წყვეტა, თუ ეს დაშვებულია ძირითადი პროგრამის მიერ. წყვეტის დაშვების რეგისტრში (I-რეგისტრში)  „0“-ის ჩაწერა კრძალავს წყვეტებს ყველანაირი მოწყობილობებიდან. ბრძანება „1->I” (ჩვენს ალგორითმში წითლად არის გამოყოფილი) , პირიქით, ნებართვას იძლევა წყვეტებზე. გარდა შიდა მოწყობილობებისა, წყვეტა შეიძლება გამოიწვიოს გარე სიგნალებმაც.  Atmega8 მიკროკონტროლერს ამისათვის ორი გამომყვანი აქვს INT0 (იმავდროულად PD2) და  INT1 (იმავდროულად  PD3). ჩვენს შემთხვევეაში “Ext Int” ელემენტის საშუალებით მოხდა INT0 წყვეტის გააქტიურება, ხოლო “falling edge” პარამეტრის ამორჩევა გამოიწვევს იმას, რომ მიკროკონტროლერის INT0 გამომყვანზე სიგნალის ლოგიკური „1“ -დან ლოგიკურ „0“ -ში გადასვლის მომენტში (და მხოლოდ ამ მომენტში, და არა ლოგიკურ ‘0“ -ყოფნის მთელი დროის განმავლობაში) გამომუშავდება წყვეტის სიგნალი. ამ პარამეტრის სხვა შესაძლო მნიშვნელობებია „rising edge” – წყვეტა „0“ -დან „1“ -ში გადართვისას, “ani logical change” – წყვეტა ყოველი ლოგიკური მდგომარეობის ცვლილებისას, “low level” – წყვეტის სიგნალი გამომუშავდება მთელი დროის განმავლობაში, ვიდრე გამომყვანი ლოგიკური „0“ -ის მდგომარეობაშია. ქვეპროგრამა External_0  სწორედ ის ქვეპროგრამაა, რომელიც სრულდება წყვეტის მომსახურების დროს. მისი მუშაობა ყოველთვის მთავრდება ბრძანებით “RETI” , რაც მიკროკონტროლერს აიძულებს დაუბრუნდეს ძირითად პროგრამას იმ წერტილში, საიდანაც მოხდა წყვეტა.
ამრიგად, თუ ჩვენს სქემას შევცვლით ისე, როგორც ეს სურათზეა გამოსახული, მაშინ ღილაკზე დაჭერის მომენტში, მიკროკონტროლერი შეწყვეტს ძირითადი პროგრამის შესრულებას და დაუყოვნებლივ მოახდენს D3, D4 შუქდიოდების გადართვას წყვეტის პროგრამის შესაბამისად. ამასთან, არა აქვს მნიშვნელობა, დარჩება ღილაკი დაჭერილ მდგომარეობაში, თუ არა – შუქდიოდების გადართვის შემდეგ მაინც განახლდება ძირითადი პროგრამის მომსახურება. შემდეგი წყვეტა განხორციელდება მხოლოდ ღილაკის აშვებისა და მისი ხელმეორედ დაჭერის მომენტში. პარამეტრის “falling edge” შეცვლა “rising edge” -ზე გამოიწვევს იმას, რომ შუქდიოდების გადართვა მოხდება არა ღილაკზე დაჭერის მომენტში, არამედ მისი აშვებისას. გაუშვით სიმულაცია Proteus -ში და დარწმუნდით, რომ D3, D4 შუქდიოდების გადართვისას არავითარ დაყოვნებას არა აქვს ადგილი.

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

One response to “წყვეტები მიკროკონტროლერში

  1. მალხაზი

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

დატოვეთ კომენტარი

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

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / შეცვლა )

Twitter picture

You are commenting using your Twitter account. Log Out / შეცვლა )

Facebook photo

You are commenting using your Facebook account. Log Out / შეცვლა )

Google+ photo

You are commenting using your Google+ account. Log Out / შეცვლა )

Connecting to %s