Სარჩევი:

კითხვის გადამრთველები ATtiny2313: 9 საფეხურით
კითხვის გადამრთველები ATtiny2313: 9 საფეხურით

ვიდეო: კითხვის გადამრთველები ATtiny2313: 9 საფეხურით

ვიდეო: კითხვის გადამრთველები ATtiny2313: 9 საფეხურით
ვიდეო: „ბრძოლა საკუთარ თავთან“ - ზურა მხეიძე 2024, ივლისი
Anonim
კითხვის გადამრთველები ATtiny2313– ით
კითხვის გადამრთველები ATtiny2313– ით

არსებობს რამდენიმე ინსტრუქცია, რომლებიც ეხება ATtiny2313 და მსგავსი AVR მოწყობილობების შედეგებს. მაგალითად, https://www.instructables.com/id/Ghetto-Programming%3a-Getting-started-with-AVR-micro/, https://www.instructables.com/id/Drive-a-Stepper- ძრავა-ერთად-AVR- მიკროპროცესორი/. ვმუშაობ უახლეს ვერსიაზე The Real Elliot– დან, რომელმაც აჩვენა, თუ როგორ უნდა გააკონტროლონ სტეპერიანი ძრავები, აღმოვაჩინე, რომ ნამდვილად გამოსადეგი იქნებოდა იმავე პროგრამის კოდის ალტერნატიული მონაკვეთების გაშვება, ასე რომ არ მომიწია ATtiny2313 თითოეულის გადაპროგრამება დრო მინდოდა ვცადო კოდის უმნიშვნელო ცვალებადობა (მაგალითად, ნახევარი ნაბიჯის გადადგმა ან სტეპერის საპირისპირო მიმართულებით გაშვება). მიუხედავად იმისა, რომ ადვილია კოდის დაწერა გადართვის/შემთხვევის განცხადების გამოყენებით, რათა შესაძლებელი იყოს ალტერნატიული ვარიაციების შერჩევა, საჭიროა შემთხვევის შერჩევის რაიმე გზა. ეს ნიშნავს, რომ რაღაც შესასვლელი მოწყობილობა უნდა წაიკითხოს საქმის გასაკონტროლებლად. საბედნიეროდ, ATtiny2313– ს აქვს ბევრი I/O ქინძისთავები და კარგად არის შემუშავებული კონცენტრატორებიდან შეყვანის შესასწავლად. ეს ინსტრუქცია აჩვენებს, თუ როგორ უნდა წაიკითხოთ საშუალებები და მიიღოთ გადაწყვეტილებები მათი მდგომარეობიდან გამომდინარე. ვინაიდან ეს მხოლოდ საკმაოდ მოსაწყენი გახდება, მე ავხსნი ATtiny2313– ის ქრონომეტრის/მრიცხველის გამოყენების მარტივ გზას პატარა დინამიკის ბიპერად მართვის მიზნით. ასევე იქნება მცირე გადახრა მარტივი გამართვის ტექნიკაზე.

ნაბიჯი 1: შეყვანის მოწყობილობა

შეყვანის მოწყობილობა
შეყვანის მოწყობილობა
შეყვანის მოწყობილობა
შეყვანის მოწყობილობა

ეს ინსტრუქცია ემყარება ნამდვილი ელიოტის შესანიშნავ მუშაობას და იყენებს მის მიერ აღწერილ ATtiny2313 გეტოს განვითარების სისტემას. ATtiny2313 მონაცემთა ფურცელი Atmel– დან არის საბოლოო მითითება ყველა ფუნქციისთვის, მაგრამ მისი წაკითხვა სულაც არ არის ადვილი. https://www.atmel.com/dyn/products/datasheets.asp?family_id=607 (ლინკს აქვს AVR მონაცემების ყველა ფურცელი, იპოვნეთ 2313.) ფიგურაში ნაჩვენებია შესასვლელი გადამრთველების მარტივი ნაკრები. ეს უბრალოდ არის ოთხი ჩართვის/გამორთვის კონცენტრატორის პაკეტი; ასევე ცნობილია როგორც ერთი ბოძი, ერთჯერადი გადამრთველი (SPST). როგორც წესი, თითოეული გადამრთველის ერთი კავშირი, ან ბოძი მიბმულია მიწაზე, ხოლო მეორე კავშირი მაღალია დენის შემზღუდველი რეზისტორის საშუალებით (10K ან მეტი). მიკროკონტროლის შეყვანა დაკავშირებულია პოლუსთან რეზისტორთან. თუ გადამრთველი ღიაა, მიკროკონტროლერი წაიკითხავს შეყვანას როგორც HI. თუ გადამრთველი დაკეტილია, მიკროკონტროლერი წაიკითხავს შეყვანის LO. დეტალებისთვის იხილეთ სქემატური. ATtiny2313 ამარტივებს ნივთებს პროგრამირებადი გამყვანი რეზისტორების უზრუნველყოფაზე I/O ქინძისთავებზე, როდესაც ისინი კონფიგურირებულია შეყვანის სახით. ეს ნიშნავს, რომ კონცენტრატორებს შეიძლება ჰქონდეთ ერთი პოლუსი მიბმული მიწაზე (LO) და მეორე პოლუსი პროცესორის შეყვანასთან. პირველი მაგალითი გვიჩვენებს მხოლოდ ორ კონცენტრატორს. კონცენტრატორები იკითხება და კონფიგურებულია შემდეგი კოდით. კონფიგურაცია ჩამრთველები შეყვანის სახით: (კოდი არ არის საჭირო; ეს არის ნაგულისხმევი.) ჩართეთ ამწევ რეზისტორები: PORTB = _BV (PB0) | _BV (PB1); წაიკითხეთ საშუალებები: but1 = ~ PINB & 0x03; გაითვალისწინეთ ინვერსიისა და ნიღბის გამოყენება სწორი მნიშვნელობის მისაღებად.

ნაბიჯი 2: მოციმციმე შუქები სიგნალისთვის

ჩვენ გამოვიყენებთ ამ ორ კონცენტრატორს რამდენჯერმე დავხუჭოთ LED პროგრამირებადი. LED- ები, რომლებსაც ჩვენ გამოვიყენებთ, იქნება მოციმციმე შუქები, რომლებიც რეალურმა ელიოტმა გაითქვა სახელით. გადამრთველები 1 და 2 განიხილება, როგორც ორი ორობითი ციფრი, ასე რომ კომბინაციას შეუძლია წარმოადგინოს რიცხვები 0, 1, 2 და 3. ჩვენი პროგრამა წაიკითხავს ორ კონცენტრატორს და ააფეთქებს LED- ს შესაბამის რაოდენობას რამდენჯერმე, მაგრამ მხოლოდ იმ შემთხვევაში, თუ გადამრთველი პარამეტრები შეიცვალა. კონცენტრატორები იშლება 500 მილიწამი (ოპტიმიზირებული არ არის). განმუხტვის ალგორითმი საკმაოდ მარტივია. კონცენტრატორები იკითხება და კითხვა აღინიშნება. თუ ის განსხვავდება ძველი ბუტისგან (ბოლო შენახული მნიშვნელობა), მაშინ პროგრამა გადაიდო 500 მილიწამით და გადამრთველები კვლავ იკითხება. თუ მნიშვნელობა იგივეა, რაც ადრე იყო წაკითხული, მნიშვნელობა ძველია მაგრამ განახლდება და LED აციმციმდება რამდენჯერმე, რაც გულისხმობს ორი კონცენტრატორის ორობითი მნიშვნელობით. გაითვალისწინეთ მნიშვნელობის ინვერსია, რადგან გადამრთველი "ჩართულია" კითხულობს LO. გადამრთველები განუწყვეტლივ სკანირდება შემდგომი ცვლილებებისთვის. გთხოვთ, მიმართოთ უძრავი ელიოტის ადრინდელ ინსტრუქციებს, რათა მეტი გაიგოთ მოციმციმე ნათურების შესახებ. გადახედეთ ამ https://www.ganssle.com/debouncing.pdf, რომ შეიტყოთ მეტი კონცენტრატორების დემონსტრირების შესახებ. აქ მოცემულია ATtiny2313 კოდი ამ მაგალითისთვის. მუშაობისას, ეს პროგრამა ორჯერ აციმციმებს შუქს PB4- ზე (ფიზიკური პინი 8) ორჯერ, რომ აჩვენოს მისი ინიციალიზაცია. შემდეგ ის წაიკითხავს კონცენტრატორებს ერთი და ორი და დახუჭავს ერთიდან სამჯერ, რაც დამოკიდებულია გადამრთველის პარამეტრზე, როდესაც ისინი შეიცვლება. როდესაც კონცენტრატორები არ იცვლება, LED ნელ -ნელა აციმციმდება. ამ კოდის გასაშვებად შექმენით ახალი დირექტორია (თუ გინდათ დაარქვით მას "ძირითადი") და გადმოწერეთ შემდეგი C კოდის ფაილი და შეიტანეთ მასში. გადაარქვით სახელი Makefile1.txt მხოლოდ მაკიაჟს. WinAVR- ის გამოყენებით შეადგინეთ პროგრამა და ჩატვირთეთ თქვენს ATtiny2313- ში.

ნაბიჯი 3: უმნიშვნელო გადახვევა გამართვის შესახებ

თუ თქვენ ჩემნაირი ხართ (და მსოფლიოს ყველა სხვა პროგრამისტი) თქვენ ალბათ გქონიათ შემთხვევა, როდესაც თქვენ მიერ ყურადღებით აკრეფილი და შედგენილი "შეცდომების გარეშე" კოდი არ აკეთებს იმას, რასაც ელოდებით. იქნებ ის უბრალოდ არაფერს აკეთებს! მაშ რა პრობლემაა? როგორ აპირებთ ამის გარკვევას? საბედნიეროდ, არსებობს რამოდენიმე მიდგომა ნივთების მუშაობის მისაღწევად. (მიიღეთ ეს წიგნი დებაგირების თემის შესანიშნავი მკურნალობისთვის. Http://www.debuggingrules.com/) მინდა შემოგთავაზოთ რამდენიმე მარტივი წინადადება მიკროკონტროლერის პროგრამების გამართვის თემასთან დაკავშირებით. პირველი ნაბიჯი არის რა იცით. თუ თქვენ ერთხელ მოგივიდათ მოციმციმე შუქი სამუშაოდ, შემდეგ კვლავ გამოიყენეთ ის, რომ ნახოთ სად ხართ თქვენს პროგრამაში. მომწონს, რომ LED ორჯერ აციმციმებს პროგრამის დაწყების სიგნალს. თქვენ შეგიძლიათ განათავსოთ კოდი ამის გასაკეთებლად თავდაპირველად თქვენი პროგრამის დასაწყისში. მას შემდეგ რაც გაიგებთ, რომ არაფერია ცუდი თქვენს აპარატურაში, შექმენით ფუნქცია, რომ გააკეთოთ მოციმციმე. აქ არის ფუნქცია, რომელსაც მე ვიყენებ./********* ** ** ---------------------------------------------------- ---------------------*/void blinkEm (uint8_t count) {while (count> 0) {PORTD = _BV (PD4); _ დაგვიანებით_ms (1000); PORTD = ~ _BV (PD4); _ დაგვიანებით_ms (1000); დათვლა-; }} ახლა უკვე შესაძლებელია ამ ფუნქციის გამოყენება თქვენი კოდის სხვადასხვა წერტილში, როგორც სიგნალი იმისა, რომ კოდი აქამდე შესრულდა. კოდის გაშვება ნიშნავს იმას, რომ შეცდომების საპოვნელად შეგიძლიათ ყურადღებით შეისწავლოთ თითოეული მონაკვეთი, რომელიც გაუშვეს, მაგრამ არ გააკეთა ის, რასაც ელოდით. ერთდროულად ერთი რამის შეცვლა ასევე არის გამართვის ძირითადი ტექნიკა (აღწერილია ზემოთ მითითებაში). ეს კლასიკური მეთოდი მუშაობს "გაყოფა და დაპყრობასთან" ერთად: ბავშვის ნაბიჯების გადადგმა, რათა თანდათანობით დაამატოთ ფუნქციონირება. ეს შეიძლება ჩანდეს ნელი მიდგომა, მაგრამ ეს არც ისე ნელია, როგორც ერთჯერადი არასამუშაო კოდის დიდი ნაწილის გამართვის მცდელობა.

ნაბიჯი 4: მეტი გამართვა

ხშირია შემთხვევები, როდესაც ჩვენ გვსურს შევამოწმოთ კოდის მონაკვეთი მასში არსებული ხაზების უმეტესობის გამოტოვებით, შემდეგ კი მივცეთ მათ საშუალება ერთდროულად, როდესაც ჩვენ ვამოწმებთ თითოეული მუშაობს. როგორც წესი, ჩვენ ამას ვაკეთებთ "კომენტარების გაკეთებით" იმ ხაზების შესახებ, რომელთა გამოტოვებაც გვინდა. ამ ტექნიკის გაფართოება არის კოდის ბლოკის მოჭრა და ჩასმა, ორიგინალის კომენტარი (ასე რომ ჩვენ არ დავკარგავთ მას) და ასლის გატეხვას. C– ს აქვს ოთხი მარტივი გზა ხაზების კომენტარის გასაკეთებლად. ხაზის წინ "//" აყენებს ამ ხაზის კომენტარებს. ერთი/რამდენიმე სტრიქონის დახურვა "/*" - სა და "*/" - ში გამოიტანს კომენტარს მთელ მონაკვეთზე. იმისათვის, რომ ეს მეთოდი ეფექტურად იმუშაოს, კოდის ბლოკში არ უნდა იყოს სხვა "*/" (გარდა დამთავრებული). ასე რომ, ეფექტური დისციპლინაა // გამოიყენოთ კოდის ბლოკებში კომენტარებისათვის და შეინახოთ / * * / კონსტრუქცია კომენტარების ბლოკებისთვის და კოდის მონაკვეთების კომენტარებისათვის. ბლოკის დასაწყისში "#if 0" - ის განთავსება და სექციის დასრულება "#endif" - ით. უფრო შერჩევითი კონტროლი შესაძლებელია "#ifdef (იდენტიფიკატორი)" ბლოკის დასაწყისში და "#endif" - ის ბოლოს. თუ გსურთ ბლოკის შედგენა, გამოიყენეთ "#define (იდენტიფიკატორი)" ადრე პროგრამაში. გაითვალისწინეთ, რომ ციტირების ნიშნები მხოლოდ ხაზგასასმელია და არ უნდა იყოს ჩართული. ამ ტექნიკის კომბინირებამ უნდა მოგაწოდოთ სასარგებლო მიდგომა თქვენი ATtiny2313 პროგრამების გამართვისას. თქვენ შეიძლება თქვენთვის სასარგებლო იყოს ეს ინსტრუმენტები, როდესაც ჩვენ გავაგრძელებთ ამ ინსტრუქციულ ინსტრუქციას.

ნაბიჯი 5: ტაიმერის/მრიცხველის გამოყენება სიგნალებისთვის

სიგნალისთვის ტაიმერის/მრიცხველის გამოყენება
სიგნალისთვის ტაიმერის/მრიცხველის გამოყენება

ATtiny2313– ს აქვს ორი ძლიერი ტაიმერი/მრიცხველის რესურსი: ერთი 8 ბიტიანი და ერთი 16 ბიტიანი. ეს შეიძლება იყოს კონფიგურირებული როგორც სიხშირის გენერატორები, ცვლადი პულსის სიგანის მოდულაციის კონტროლერები და გამომავალი შედარების რეგისტრები. მათი სრული ფუნქციონირება აღწერილია მონაცემთა ფურცლის 49 გვერდზე. თუმცა, ჩვენ გამოვიყენებთ მარტივ შემთხვევას. გამოყენებული იქნება მხოლოდ ტაიმერი/მრიცხველი 0 (8 ბიტიანი) და ის იქნება გამოყენებული როგორც სიხშირის გენერატორი. სიხშირე გადამისამართდება პატარა დინამიკზე, რათა გამოიღოს სიგნალი. ქრონომეტრი/მრიცხველი 0 სრულად არის აღწერილი ATtiny2313 მონაცემების 66 - დან 83 - მდე გვერდებზე. ამ მასალის ახლო წაკითხვა უზრუნველყოფს დროის/მთვლელის სრულყოფილ გაგებას. საბედნიეროდ, საკმაოდ მარტივი რეჟიმი, Clear Timer on Compare (CTC), არის ის, რაც საჭიროა ჩვენთვის სასურველი სიგნალის შესაქმნელად.

იმ რეჟიმისთვის, რომელსაც ჩვენ გამოვიყენებთ, ტაიმერის/მრიცხველის მოქმედება პირდაპირ წინ არის. როდესაც საათის სიგნალი შეირჩევა, მრიცხველი იწყება ნულიდან და ზრდის ყოველ საათის იმპულსს. როდესაც მრიცხველის მნიშვნელობა მიაღწევს მნიშვნელობას გამომავალი შედარების რეესტრში (TOP), მრიცხველი გადადის ნულამდე და ათვლა კვლავ იწყება. ქრონომეტრთან/მრიცხველთან დაკავშირებული გამომავალი ბიტი გადართულია კვადრატული ტალღის გამომუშავების შესაქმნელად. ეს პირდაპირ ამოძრავებს აუდიო გადამცემს, რათა გამოსცეს სიგნალის ხმა. პატარა TDK აუდიო გადამყვანი აწარმოებს სიგნალს. შესაფერისი ერთეულია Digikey 445-2530-ND, TDK SD1209T3-A1 (მე გამოვიყენე ამის ადრეული ვერსია). ეს არის 3 ვოლტიანი ვერსია; 5 ვოლტიანი ვერსია ასევე იმუშავებს, ველოდები. მე ვუშვებ ამას პირდაპირ Attiny2313– ის გამომავალი პორტიდან და როგორც ჩანს, კარგად მუშაობს. Sparkfun– ს აქვს მსგავსი მოწყობილობა.

ნაბიჯი 6: ტაიმერის/მრიცხველის კონფიგურაცია

CTC რეჟიმი შეიძლება გამოყენებულ იქნას გამომავალი OC0A პინ 2 -ზე, B პორტზე (ფიზიკური პინ 14). ამ პინზე გამოსვლის გასააქტიურებლად, DDRB უნდა იყოს სათანადოდ დაყენებული. ამის C კოდი იგივეა, რაც მოციმციმე შუქისთვის გამომავალი პარამეტრის დაყენება. DDRB = _BV (PB2); // პორტი B2 არის გამომავალი. შემდეგი ნაბიჯი არის საათის სიგნალის მიწოდება და გამომავალი შედარების რეგისტრის ჩატვირთვა ტალღის ფორმის სიხშირის სახით. მიღებული სიხშირის განტოლება მოცემულია მონაცემების ფურცელში (გვერდი 72). განტოლების პირობები ქვემოთ იქნება აღწერილი. აქ არის განტოლება: fOC0A = fclk_I/O/2*N*(1+OCR0A) სადაც fOC0A: = გამომავალი სიხშირე fclk_I/O: = საათის წყაროს სიხშირე N: = საათის წინასწარ განსაზღვრული ფაქტორი OCR0A: = მნიშვნელობა გამომავალში შეადარეთ რეგისტრი ტაიმერისთვის/ Counter 0A. საათის წყაროს სიხშირე, fclk_I/O ეს არის სისტემის საათის სიხშირე. ნაგულისხმევი მნიშვნელობაა 1 MHz. TCCR0B– ის CS00, CS01 და CS02 ბიტები აკონტროლებენ ამ არჩევანს. ვინაიდან ეს ბიტები ასევე ირჩევენ N მნიშვნელობას, ის აღწერილია შემდეგში. Precaler Value, NN არის მნიშვნელობა, რომელიც გამოიყენება სისტემის საათის გაყოფის, ან წინასწარი მასშტაბისათვის. TCCR0B– ის CS00, CS01 და CS02 ბიტები აკონტროლებენ ამ არჩევანს. ცხრილი 41 ATINy2313 მონაცემთა ფურცლის 81 გვერდზე აღწერს კომბინაციებს. ვინაიდან სასურველია სიხშირე 1 კჰც სიახლოვეს, დაყენდება TCCR0B- ის CS00 და CS01 ბიტები. გაითვალისწინეთ, რომ სამივე ბიტის 0 -ზე დაყენება, ამრიგად საათის წყაროს არჩევა, ეფექტურად აჩერებს გამომავალს. ეს არის მეთოდი, რომელიც გამოყენებული იქნება სიგნალის დასაწყებად და შესაჩერებლად. TOP მნიშვნელობა, OCR0 ეს მნიშვნელობა არის მრიცხველის TOP მნიშვნელობა, რომელიც დატვირთულია ქრონომეტრის/მრიცხველის 0A გამომავალი შედარების რეესტრში. როდესაც ეს მნიშვნელობა მიღწეულია, მრიცხველი გადავა ნულამდე და ათვლა კვლავ დაიწყება მანამ, სანამ TOP არ მიიღწევა და ციკლი მეორდება. TOP ადვილად იცვლება, ამიტომ სიგნალის სიხშირის შეცვლა ადვილია. ვინაიდან სიხშირე 1 კჰც სიახლოვეს არის სასურველი, TOP არის 7. (გაითვალისწინეთ, რომ წინასწარი გამყიდველი შეიძლება იყოს 8, ხოლო TOP 63. იგივე შედეგი - თქვენი არჩევანია.) in: fOC0A = 1, 000, 000 /2 * 64 * (1+7) fOC0A = 977Hz საკმაოდ ახლოს! აქ არის კოდი, რომ ჩატვირთოთ გამომავალი შედარების რეესტრი და ტაიმერის მრიცხველის კონტროლის რეესტრი 0B. გთხოვთ იხილოთ პროგრამის რეალური კოდი იმის გასაგებად, თუ როგორ გამოიყენება ისინი. OCR0A = 7; // დროის მნიშვნელობა TCCR0B = _BV (CS01) | _BV (CS00); // აირჩიეთ შიდა საათი & წინასწარი მასშტაბი = 8 TCCR0B = 0; // საათის წყარო არ ტოვებს ტონს დროის დარიცხვის რეჟიმი CTC რეჟიმი შეირჩევა WGM01 ბიტის დაყენებით, როგორც ეს აღწერილია ცხრილში 40, 79 – ე ფურცელი. ვინაიდან ჩვენ გვინდა, რომ გამომავალი თითოეული ციკლი იყოს გადართული, ბიტ COM0A0 ასევე უნდა იყოს მითითებული, როგორც ეს აღწერილია ცხრილში 34 გვერდზე 77. აი კოდი: TCCR0A = _BV (COM0A0) | _BV (WGM01); // CTC გადართვის რეჟიმი

ნაბიჯი 7: ოთხი გადამრთველის გამოყენება

როდესაც ჩვენ განვახორციელებთ სიგნალს, მოდით გავაფართოვოთ ჩვენი აპარატურა და პროგრამული უზრუნველყოფა ოთხი გადამრთველის დამუშავებისთვის. ვინაიდან ტაიმერის მრიცხველის 0A გამომავალი არის პორტში B, პინ 2, ჩვენ არ შეგვიძლია უბრალოდ გადავიტანოთ მეტი გადამრთველი თანმიმდევრულად პორტ ბ -ში. მარტივი გამოსავალი იქნება პორტი D- ის გამოყენება, მაგრამ შევინარჩუნოთ ის პორტი სხვა ფუნქციებისთვის (ალბათ სტეპერიანი ძრავა). მოდით დავამატოთ დამატებითი კონცენტრატორები PB3 და PB4. გადამრთველების კითხვა ძირითადად უცვლელია. ნიღბის მნიშვნელობა იცვლება 0x1B (00011011 ორობითი), რომ შეიცვალოს ბიტი 2, 5, 6 და 7. ერთად კიდევ ერთი ხრიკი გამოიყენება 4 ბიტიანი ორობითი რიცხვის შესაქმნელად. გადაიტანეთ 3 და 4 ბიტი მარჯვნივ ერთი ბიტი და დააკავშირეთ ისინი 0 და 1 ბიტებთან 4 ბიტიან ორობითი რიცხვით. ეს არის სტანდარტული C სინტაქსი ბიტების გადასატანად და შესაერთებლად, მაგრამ შეიძლება დამწყებთათვის კარგად არ იყოს ცნობილი. but1a = (but1 & 0x03) | ((მაგრამ 1 & 0x18) >> 1); // but1– ს აქვს გადამრთველი კითხვა ოპერაციაში, პროგრამა ორჯერ აციმციმდება და ორჯერ იქნება სიგნალი სიგნალის ინიციალიზაციისთვის. როდესაც გადამრთველები შეიცვლება, მათი რიცხვი იქნება სიგნალი. როდესაც კონცენტრატორები არ იცვლება, LED აციმციმდება. ამ კოდის გასაშვებად შექმენით ახალი დირექტორია (თუ მოგწონთ დაურეკეთ მას Beep) და გადმოწერეთ შემდეგი C კოდის ფაილი და შეიტანეთ მასში. გადაარქვით სახელი Makefile2.txt მხოლოდ მაკიაჟს. WinAVR- ის გამოყენებით შეადგინეთ პროგრამა და ჩატვირთეთ იგი თქვენს Attiny2313- ში.

ნაბიჯი 8: გადამრთველის/საქმის კონსტრუქტის გამოყენება

ბოლო ნაბიჯი არის "მხოლოდ პროგრამული უზრუნველყოფა": როგორც დაგპირდით, ჩვენ განვახორციელებთ გადართვის/საქმის კონსტრუქტს. მიუხედავად იმისა, რომ ეს მაგალითი მხოლოდ ორ ალტერნატიულ მოქმედებას გვიჩვენებს, უნდა იყოს ძალიან მკაფიო, თუ როგორ გამოვიყენოთ ეს კონსტრუქცია რამდენიმე ალტერნატიული კოდის ერთ -ერთი ნაწილის შესარჩევად. ეს პროგრამა მუშაობს მონიტორინგზე კონცენტრატორებზე და თუ შეიცვლება, ის აფიქსირებს შესაბამის რიცხვს, თუ ის კენტია; ის აციმციმდება, თუ რიცხვი ლუწი იქნება. ის არაფერს აკეთებს, სანამ შეცვლა არ შეიცვლება.

ამ კოდის გასაშვებად შექმენით ახალი დირექტორია (თუ გსურთ, გადართეთ) და გადმოწერეთ შემდეგი C კოდის ფაილი და შექმენით მასში. გადაარქვით სახელი Makefile3.txt მხოლოდ მაკიაჟს. WinAVR- ის გამოყენებით შეადგინეთ პროგრამა და ჩატვირთეთ იგი თქვენს Attiny2313- ში.

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

დასკვნა
დასკვნა

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

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

გირჩევთ: