Gallery

UART მიკროკონტროლერში

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

UART. 

მიკროკონტროლერზე დაფუძნებული ტექნიკის (მათ შორის რობოტების) სამართავად მოსახერხებელია პერსონალური კომპიუტერის მიმდევრობითი RS232 პორტის გამოყენება. ეს დაკავშირებულია იმასთან, რომ Atmel მიკროკონტროლერების უმრავლესობა შეიცავს მზა მიმდევრობით საკომუნიკაციო მოწყობილობას (ზოგიერთი მოდელი – რამოდენიმესაც), რომელიც იმავე პროტოკოლით მუშაობს, რაც RS232 პორტი. ამ მოწყობილობას UART (Universal Asynchronous Receiver/Transmitter – უნივერსალური ასინქრონული მომღებ/გადამცემი)  ეწოდება.
გახსენით Algorith Builder -ში თქვენი უკანასკნელი ალგორითმი mc7day.alp (პუბლიკაცია „მიკროკონტროლერი. დღე 7.  PWM“)  და შეიტანეთ მასში ცვლილებები.  შეგახსენებთ, რომ საიტზე გამოქვეყნებული ყველა ალგორითმი და მათი Proteus-ში მოდელირებისთვის საჭირო პროექტები შეგიძლიათ ჩამოტვირთოთ საიტის მარჯვენა მხარეს მოთავსებული სექციიდან “Files”. მაგ., არქივი  mc7day.rar შეიცავს პუბლიკაციაში „მიკროკონტროლერი. დღე 7. PWM“ გამოყენებულ მასალებს, კერძოდ Algorithმ Builder -ის პროექტს  ”.alp” გაფართოებით და Proteus -ის პროექტს “.dsn” გაფართოებით. ამდენად არ არის საჭირო ალგორითმის თავიდან აკრეფა ან სქემის თავიდან დახაზვა.

ალგორითმში შეტანილი ცვლილებები ნახაზზე წითლად არის გამოყოფილი. USART (უნივერსალური სინქრონულ / ასინქრონული მომღებ/გადამცემი)  ელემენტის დასამატებლად მენიუში აირჩიეთ “Elements”, “Setter”, “USART”. სეტერში დააყენეთ პარამეტრები ისე, როგორც ეს ქვემოთ მოყვანილ სურათზეა ნაჩვენები.
პარამეტრებში არჩეული გვაქვს “Receiver – Enable” – მიღება დაშვებულია; “Complete interrupt enable” – მიმღებიდან წყვეტა დაშვებულია“. დანარჩენი პარამეტრები ზუსტად ისევე, როგორც Com – პორტისათვის:  8-ბიტიანი მონაცემები; ლუწობის კონტროლი – არა;  1 სტოპ-ბიტი;  გადაცემის სიჩქარე 9600 ბიტი/წმ. ამ უკანასკნელი პარამეტრის მნიშვნელობის ასარჩევად დააჭირეთ წითელი ისრით ნაჩვენებ სტრიქონს.

გადაცემის სიჩქარის ამორჩეული მნიშნელობისთვის ცხრილში ნაჩვენებია მიღება-გადაცემის შეცდომის პროცენტული მაჩვენებელი “Error = xx%”. იმისათვის, რომ შეცდომა 0% იყოს, საჭიროა მიკროკონტროლერის სატაქტო სიხშირის სათანადოდ შერჩევა. საქმე იმაშია, რომ მონაცემების უშეცდომოდ მიღება-გადაცემისათვის აუცილებელია, რომ მიკროკონტროლერის UART-ის და კომპიუტერის Com-პორტის გადაცემის სიჩქარეები ზუსტად ემთხვეოდეს ერთმანეთს. მენიუში აირჩიეთ „Option”, “Project Options” და დააყენეთ მიკროკონტროლერის სატაქტო სიხშირე 11059200 ჰერცი. პარამეტრების ზემოთ აღნიშნული მნიშვნელობებისათვის “Error=0.0%” მიიღწევა სატაქტო სიხშირეებისათვის (ჰერცებში): 7372800; 11059200; 14745600. ასეთი სატაქტო სიხშირე, ცხადია, არ შეიძლება მიღებული იქნეს მიკროკონტროლერის შიდა RC გენერატორის საშუალებით, ამიტომ უნდა გამოვიყენოთ მიკროკონტროლერის კვარცით სტაბილიზებული გენერატორი.
UART-ის მიერ მონაცემების მიღების შემთხვევაში იგი გამოიმუშავებს წყვეტის მოთხოვნას. თუ წყვეტა დაშვებულია, მაშინ შესრულდება შესაბამისი   წყვეტის ქვეპროგრამა  USART_Receive_Complete. ეს ქვეპროგრამა იწყება UDR რეგისტრის წაკითხვით. UDR რეგისტრი წარმოადგენს რეგისტრს, რომელშიც იწერება UART-ის მიერ მიღებული ბაიტი. ქვეპროგრამის  შემდგომ ნაბიჯს წარმოადგენს მიღებული ბაიტის ანალიზი: წარმოადგენს  თუ არა მიღებულ ბაიტი სამი “a”, “b”, “c” ასოთაგან ერთერთის კოდს. ქვეპროგრამის დანარჩენი ნაწილი არ განსხვავდება External_0 წყვეტის ქვეპროგრამისაგან – UART-ის მიერ “a”, “b”, “c” ასოების მიღება იწვევს იგივე ეფექტს, რასაც ღილაკზე სამი თანმიმდევრული დაჭერა.
ალგორითმის Proteus-ში სიმულაციისათვის საჭიროა ცვლილებების შეტანა შესაბამის  Proteus-ის პროექტშიც.
სქემაზე განათავსეთ ვირტუალური ტერმინალი და შეაერთეთ მისი გადამცემი “TxD” UART-ის მიმღებთან “RxD“.

ცვლილებები უნდა შევიტანოთ Atmega8 მიკროკონტროლერის პარამეტრების ფანჯარაშიც.
„CKSEL Fuses = 1111“ ნიშნავს, რომ სატაქტო იმპულსები გამომუშავდება კვარცის რეზონატორით სტაბილიზებული გენერატორის საშუალებით. “Clock Frequency = 11059200” მიკროკონტროლერს მიუთითებს სატაქტო იმპულსების სიხშირის მნიშვნელობას.
გაუშვით სიმულაცია და ვირტუალურ ტერმინალზე თაგუნას მარჯვენა კლავიშის დაჭერით გაააქტიურეთ “Echo Typed Characters”.  ახლა თქვენ შეგიძლიათ კლავიატურიდან ჩაბეჭდოთ ტექსტი ტერმინალში (ბეჭდვა უამისოდაც შეიძლება, მაგრამ ნაბეჭდი არ გამოჩნდება). “a” ასოს ჩაბეჭდვა გამოიწვევს D3 შუქდიოდის ანთებას,  “b” ასოს ჩაბეჭდვა – მის ჩაქრობას და  D4  შუქდიოდის ანთებას, “c” ასოს ჩაბეჭდვა იწვევს ორივე შუქდიოდის ჩაქრობას. შესაბამისად იცვლება ელექტროძრავის ბრუნვის სიჩქარეც.
სიმულაციამ წარმატებით ჩაიარა და გვიჩვენა ალგორითმის და, მაშასადამე, კომპილირებული hex ფაილის გამართულობა. ახლა შეგვიძლია პროგრამატორის მეშვეობით პროგრამის ჩაწერა მიკროკონტროლერის ფლეშ-მახსოვრობაში. ამასთან, არ უნდა დაგვავიწყდეს მიკროკონტროლერში ფუზ-ბიტების საჭირო კომბინაციის ჩაწერაც.
მაგრამ ამით ყველაფერი არ მთავრდება. რეალურ პრიციპულ სქემაში საჭიროა ორი მნიშვნელოვანი ცვლილების შეტანა. პირველი მათგანი  დაკავშირებულია კვარცის რეზონატორის XTAL1, XTAL2 გამომყვანებთან მიერთებასთან.
uart_sqema3

მეორე ცვლილება უფრო დაწვრილებით განხილვას საჭიროებს. საქმე იმაშია, რომ კომპიუტერის Com პორტის სიგნალის ლოგიკური „1“ დონეს (-12) ვოლტი ძაბვის მნიშვნელობა შეესაბამება, ხოლო ლოგიკური „0“ დონეს – ( +12) ვოლტი.  მიკროკონტროლერის RxD გამომყვანისთვის კი ლოგიკური „1“ -ის შესაბამისი ძაბვა დაახლოებით +5 ვოლტს შეადგენს, ხოლო ლოგიკური „0“ -ის შესაბამისი – დაახლოებით 0 ვოლტს. აქედან გამომდინარე საჭიროა შეასაბამისი დონეების შეთანხმება. დონეების შესათანხმებლად საკმარისია უმარტივესი მოწყობილობის დამატება, რომელიც სქემაზე ნაჩვენები R6, R7, Q2, D5 ელემენტებისაგან შესდგება.
დონეების შემათანხმებელი მოწყობილობის მუშაობის პრინციპის გასაგებად შექმენით Proteus-ში ახალი პროექტი, რომლის სქემაც ნახაზზეა ნაჩვენები.
წითლად შემოხაზულია იმპულსების გენერატორი, რომლის სქემაში დამატების გზა ნაჩვენებია ქვემოთ მოყვანილ სურათზე.
იმპულების გენერატორის პარამეტრები დააყენეთ ისე, როგორც ეს ნახაზზეა ნაჩვენები და ჩართეთ მოდელირების რეჟიმი.
uart_model1
შედეგად ოსცილოსკოპის ეკრანზე მივიღებთ სურათს, რომელიც ნათლად გვიჩვენებს დონეების შემათანხმებელი მოწყობილობის მუშაობის პროცესს.
მოწყობილობის მუშაობის პრინციპი მარტივია : იმის გამო, რომ სქემაზე ნაჩვენები პოლარობით ჩართული დიოდის წინაღობა სიგნალის  უარყოფითი მნიშვნელობისათვის მცირეა, ძაბვა ტრაზისტორის ბაზაზე უარყოფითი სიგნალისათვის თითქმის ნულამდე ეცემა, ტრანზისტორი იკეტება და ძაბვა მის კოლექტორზე კვების ძაბვის ტოლია. სიგნალის დადებითი მნიშვნელობისათვის დიოდის წინაღობა დიდია, ამიტომ სიგნალი მთლიანად მიეწოდება ტრანზისტორის ბაზას, რაც იწვევს მის გაღებას და ძაბვა მის კოლექტორზე თითქმის ნულამდე ეცემა.
თუ ინფორმაციის გადაცემა საჭიროა მიკროკონტროლერიდან კოპიუტერისაკენ, მაშინ მოგვიწევს შებრუნებული ამოცანის გადაწყვეტა, ანუ მიკროკონტროლერის  TxD სიგნალის გარდაქმნა კომპიუტერის Com პორტთან თავსებად ორპოლარულ სიგნალად. ფირმა Maxim-ის მიკროსქემა MAX232 ახორციელებს მიკროკონტროლერის UART სიგნალებისა და კომპიუტერის Com პორტის­­­ ორმხრივ შეთანხმებას, ამასთან მიკროსქემა ორ წყვილ ასეთ შემათახმებელ მოწყობილობას შეიცავს. MAX232 მიკროსქემის დატაშიტი შეგიძლიათ ჩამოტვირთოთ ჩვენი საიტის “Files” განყოფილებიდან.
uart_max232

მიკროსქემის ბლოკ-სქემიდან ჩანს, რომ  იგი შეიცავს ძაბვის გამაორმაგებელს (Voltage Doubler) და ძაბვის ინვერტორს, ანუ პოლარობის შემცვლელს  (Voltage Inverter). ქვემოთ მოყვანილ ნახაზებზე ნაჩვენებია ძაბვის გამაორმაგებლის მუშაობის პრინციპი.
uart_mult1

თუ S1, S2, S3 გადამრთველები ნახაზის მიხედვით ქვედა მდგომარეობაში იმყოფებიან, მაშინ C1, C2 კონდენსატორები პარალელურად არიან ჩართულნი და ორივე მათგანზე ძაბვა კვების წყაროს ძაბვის (+5 ვოლტი) ტოლია. თუ სამივე გადამრთველს ერთდროულად გადავრთავთ ნახაზის მიხედვით ზედა მდგომარეობაში, მაშინ 5 ვოლტამდე დამუხტული კონდენსატორები მიმდევრობით აღმოჩნდებიან ჩართულები და ჯამური ძაბვა მათზე შეადგენს 10 ვოლტს. ეს ძაბვა დამუხტავს C3 კონდენსატორს 10 ვოლტამდე და ამრიგად მოხდება კვების ძაბვის გამრავლება ორზე. თუ გადამრთველების ერთი მდგომარეობიდან მეორეში გადართვა საკმარისად დიდი სიხშირით განხორციელდება, მაშინ C3 კონდენსატორი შეასრულებს მეორადი კვების წყაროს როლს, რომლის ძაბვა 10 ვოლტია. იგივე პრინციპით შესაძლებელია ძაბვის გასამმაგება, გაოთხმაგება და ა.შ.
uart_mult2

Atmega8 მიკროკონტროლერთან MAX232 მიკროსქემის მიერთების სქემა ნაჩვენებია ნახაზზე ქვემოთ.
uart_max_sqema

4 responses to “UART მიკროკონტროლერში

  1. სად არის ეს Files განყოფილება რაღაც ვერ ვნახე

  2. atmegidan atmegas rom gadavce info iqneb dadot rame
    romelia gadamcemi registri ,gavige rom mimxebi yopila UDR.
    gadamcemi romelia???

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