Gallery

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

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

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

წინა პუბლიკაციებში დაწვრილებით იყო განხილული 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). თუ როგორ შეძლება გამოსწორდეს ეს ნაკლი, განხილული იქნება მომდევნო პუბლიკაციაში. თვალყური ადევნეთ პუბლიკაციებს. ნუ შეეცდებით გადაახტეთ მათ თანმიმდევრობას!

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

  1. gamarjobat!
    dzalian kargi saiti gaqvt da kargad viswavle bevri ram. chemi codnit nel-nela gurus wodebas vuaxlovdebi. erti problema shemeqmna da tu shegidzliat damexmaret…
    maqvs es mowyobiloba romelic manqanis signalizaciidan amovige:

    rogorc xedavt, pulti da mimgebia. mimgebs aqvs +, -, DATA, da ANTENNA. rodesac + da – s vaerteb da shemdeg naturas mivuerteb, pultze gilakis dacherisas iwyebs dzalian swrapad cimcims. oskilograpit vnaxe misi monacemebi da asetia:
    http://tinypic.com/view.php?pic=riu9g8&s=8#.U0xCivmSxgw
    vaprogrameb C-ti da mainteresebs rogor shemidzlia chems Atmega8-s vaswavlo am inpormaciis agqma rata shemdeg raime operacia shevasrulebino?
    didi madloba winaswar..

  2. დიდი მადლობა გამოხმაურებისთვის. მაგრამ ჩემი პრობლემა იმაში მდგომარეობს, რომ არ ვიცი მიკროკონტროლერს როგორ აღვაქმევინო ეს სიგნალები. ინტერნეტში წავიკითხე, და მანჩესტერის კოდს უფრო წააგავს.. როგორ შეიძლება C-ში ამის დაწერა? მოვკვდი ამ ნათურების ციმციმით. 22 ნათურა დავაერთე ერთ სქემაზე და მორბენალი განათებაც კი გავაკეთე.. მაგრამ ეს ახალი “ტურია” ჩემთვის.. და არ ვიცი როგორ დავწერო კოდი. თუ შეგიძლიათ, მითხარით ან ლინკი მომეცით რომელშიც ახსნილი იქნება >>მხოლოდ<< ის რაც მე მჭირდება. რუსულსაც ვფლობ და ინგლისურსაც. (მიკროკონტროლერისთვის: Atmega8)
    მადლობა

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

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

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