როგორ გავზარდოთ ციფრული პინების რაოდენობა Arduino-ზე პორტის ექსპანდერის გამოყენებით. Arduino Shields – გაფართოების დაფები Arduino Arduino-სთვის, რომელიც ზრდის შეყვანის/გამოსვლის პორტებს

Arduino პლატფორმის ერთ-ერთი მთავარი უპირატესობა მისი პოპულარობაა. პოპულარულ პლატფორმას აქტიურად უჭერენ მხარს ელექტრონული მოწყობილობების მწარმოებლები, აწარმოებენ სხვადასხვა დაფების სპეციალურ ვერსიებს, რომლებიც აფართოებენ კონტროლერის ძირითად ფუნქციონირებას. ასეთი დაფები, სავსებით ლოგიკურად უწოდებენ გაფართოების დაფებს (სხვა სახელი: arduino shield, shield), გამოიყენება მრავალფეროვანი დავალებების შესასრულებლად და მნიშვნელოვნად გაამარტივებს arduino ოპერატორის ცხოვრებას. ამ სტატიაში ჩვენ გავიგებთ, თუ რა არის Arduino-ს გაფართოების დაფა და როგორ შეიძლება მისი გამოყენება Arduino-ს სხვადასხვა მოწყობილობებთან მუშაობისთვის: ძრავები (ძრავის დრაივერის ფარები), LCD ეკრანები (LCD ფარები), SD ბარათები (მონაცემთა ლოგერი), სენსორები. (სენსორული ფარი) და მრავალი სხვა.

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

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

რატომ გვჭირდება არდუინოს ფარები?

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

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

ფარების ყველაზე პოპულარული მაგალითებია გაფართოების დაფები სენსორებთან მუშაობისთვის, ძრავები, LCD ეკრანები, SD ბარათები, ქსელის და GPS ფარები, ფარები ჩაშენებული რელეებით დატვირთვასთან დასაკავშირებლად.

Arduino Shields-ის დაკავშირება

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

როგორც წესი, ფარი განკუთვნილია კონტროლერის ძალიან კონკრეტული ვერსიისთვის, თუმცა, მაგალითად, Arduino Uno-სთვის ბევრი ფარი საკმაოდ კარგად მუშაობს Arduino Mega დაფებთან. მეგაზე პინოტი ისეა გაკეთებული, რომ პირველი 14 ციფრული ქინძისთავები და დაფის მოპირდაპირე მხარეს ქინძისთავები ემთხვევა UNO-ს პინოტს, ამიტომ მასში ადვილად შეიძლება ჩასვათ Arduino ფარი.

Arduino Shield პროგრამირება

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

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

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




სენსორული გაფართოების დაფის რამდენიმე ვერსია არსებობს. ისინი ყველა განსხვავდება კონექტორების რაოდენობისა და ტიპის მიხედვით. დღეს ყველაზე პოპულარული ვერსიებია Sensor Shield v4 და v5.

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



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




გაფართოების დაფები პროტოტიპებისთვის

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





Arduino LCD ფარი და tft ფარი

ამ ტიპის ფარი გამოიყენება არდუინოში LCD ეკრანებთან მუშაობისთვის. მოგეხსენებათ, უმარტივესი 2 სტრიქონიანი ტექსტური ეკრანის დაკავშირებაც კი შორს არის ტრივიალური ამოცანისგან: თქვენ უნდა სწორად დააკავშიროთ ეკრანის 6 კონტაქტი ერთდროულად, ელექტრომომარაგების გარეშე. ბევრად უფრო ადვილია მზა მოდულის ჩასმა Arduino-ს დაფაზე და უბრალოდ ატვირთეთ შესაბამისი ესკიზი. პოპულარულ LCD Keypad Shield-ში, 4-დან 8-მდე ღილაკი დაუყოვნებლივ დამონტაჟებულია დაფაზე, რაც საშუალებას გაძლევთ დაუყოვნებლივ მოაწყოთ გარე ინტერფეისი მოწყობილობის მომხმარებლისთვის. TFT Shield ასევე ეხმარება



Arduino Data Logger Shield

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




Მოკლე მიმოხილვა

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

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

ყველას უყვარს Arduino-ს იაფი დაფები, მაგრამ ხშირად პროექტს სჭირდება ერთი ან ორი უფასო პორტი! და ზოგჯერ არის საკმარისი პორტები, მაგრამ თქვენ არ გსურთ მავთულის თაიგულის გადატანა სტრუქტურის სხვა ნაწილში. ვთქვათ, საჭიროა მოწყობილობის წინა პანელზე რამდენიმე ღილაკი და LED განათავსოთ. უფრო საიმედო და ადვილია მათი დაკავშირება მთავარ დაფაზე მხოლოდ ორი მონაცემთა ავტობუსის მავთულით, ვიდრე კაბელით ან აღკაზმულობით, არა?

Arduino-ს სხვადასხვა პორტის ექსპანდერები შექმნილია ასეთი სიტუაციებისთვის.

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

  1. სტანდარტული GPIO პორტის გამაფართოებელი
  2. PWM გამომავალი გაფართოება
  3. ანალოგური შეყვანის გაფართოებები - მულტიპლექსატორები და გარე ADC

ცალკე, აღსანიშნავია ციფრული ანალოგური გადამყვანები (DAC) და I2C ავტობუსის მისამართის სივრცის გაფართოებები. ეს მოწყობილობები პირდაპირ არ იმეორებენ პორტების ფუნქციებს, არამედ აფართოებენ მიკროკონტროლერების შესაძლებლობებს.

სერიის პირველ სტატიაში ვისაუბრებთ უმარტივეს და სასარგებლო ექსპანდერებზე, რომლებიც მუშაობენ ციფრული I/O პორტების სახით. ეს არის მიკროსქემები და . ისინი შექმნილია და მუშაობენ აბსოლუტურად იდენტურად და განსხვავდებიან მხოლოდ პორტების რაოდენობით.

გაფართოების მოდულის არჩევა Arduino-სთვის

ყველაზე პოპულარული და იაფი მოდული დამზადებულია PCF8574 ჩიპზე (ნახ. 1)

ბრინჯი. 1. პოპულარული PCF8574 პორტის გამაფართოებელი მოდული

უპირატესობები:
  • Დაბალი ფასი.
  • მოდულების დაკავშირება შესაძლებელია ჯაჭვში ერთი მოდულის შტეფსელების უბრალოდ წინა მოდულის სოკეტებში ჩასმით. არ დაგავიწყდეთ მხტუნავების დაყენება მოდულის სხვადასხვა მისამართებზე!
ხარვეზები:
  • მისი ჩასმა არ შეიძლება პირდაპირ პურის დაფაში (გირჩევთ პორტის კონექტორის უკანა მხარეს შედუღებას).
  • სულ რვა პორტი ერთ მოდულში.

თუ უფრო სერიოზული პროექტების ხასიათზე ხართ, შეუკვეთეთ 16-ბიტიანი PCF8575 მოდული Aliexpress-ზე. მე მკაცრად გირჩევთ მოდულს, რომელიც ნაჩვენებია ნახ. 2.

ბრინჯი. 2. PCF8575 Port Expander Module

უპირატესობები:
  • ორჯერ მეტი პორტი.
  • ჩაშენებული 3.3 ვოლტიანი კვების წყარო, შეუძლია სხვა მოდულების კვება.
  • ჩაშენებული ლოგიკური დონის შესატყვისი I2C ავტობუსისთვის სხვადასხვა მიწოდების ძაბვაზე.
  • მოსახერხებელი ფორმატი პროტოტიპის დაფისთვის.
ხარვეზები:
  • უფრო მაღალი ფასი.

PCF8574/PCF8575 GPIO პორტის გაფართოების ოპერაციული პრინციპი

მონაცემთა გაცვლა ხდება I2C ავტობუსის მეშვეობით. Arduino-ს დაფასთან დაკავშირება მოითხოვს მხოლოდ ოთხ მავთულს, ელექტროენერგიის ჩათვლით. ექსპანდერის მისამართი დაყენებულია სამი ჯუმპერით A0...A2 შესასვლელებზე, ასე რომ თქვენ შეგიძლიათ ერთდროულად დააკავშიროთ რვა იდენტური ჩიპი ავტობუსთან და მიიღოთ მაქსიმუმ 8*8=64 დამატებითი პორტი PCF8574 ან 8*16=128 PCF8575 ჩიპით. .

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

მიკროსქემის გამომავალი ასევე შეყვანილია და არ არსებობს სერვისის რეესტრი, რომელიც განსაზღვრავს გამომავალი დანიშნულებას. არსებობს მხოლოდ ჩამკეტი რეგისტრი, რომელშიც იწერება გამომავალი ბაიტი.Როგორ არის ეს შესაძლებელი?

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

ფრთხილად იყავით პირდაპირი მიწოდების ძაბვის გამოყენებისას დაბალ ქინძისთავზე ან დენის გადაჭარბებისას. 50 mAთქვენ გააფუჭებთ ჩიპს!

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

იმისთვის, რომ ერთდროულად გამოვიყენოთ ზოგიერთი პორტი, როგორც შეყვანა, ზოგი კი გამომავალი, მონაცემთა ბაიტის ყოველი ჩაწერის წინ გაფართოებისთვის, აუცილებელია გამოიყენოს ნიღაბი იმ ბიტებზე, რომლებიც შეესაბამება შეყვანას "ლოგიკური" გამოყენებით. OR” ოპერაცია. Სულ ეს არის)))

შეწყვიტოს თაობა

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

მაგალითი 1: PCF8574 მოდულის გამოყენება

მოდით შევკრიბოთ ოთხი LED-ის მარტივი წრე, PCF8574 მოდული და Arduino დაფა (ნახ. 3 და 4). ამ კავშირის სქემით, ჩვენ არც კი გვჭირდება ჩაქრობის რეზისტორები LED- ებისთვის. დენი მიედინება LED-სა და ჩაშენებულ რეზისტორის მეშვეობით, რომელიც დაკავშირებულია დენის ლიანდაგთან.

ბრინჯი. 3. PCF8574 მოდულის შეერთების დიაგრამა

ბრინჯი. 4. მიკროსქემის განლაგება PCF8574 მოდულით

დააკოპირეთ და ჩაწერეთ ესკიზი 1 Arduino დაფაზე:

// მოდულის მისამართი ავტობუსში (A0, A1, A2 = 0) int მისამართი = 0x38; // მონაცემები წაკითხული მოდულიდან uint8_t dataReceive; // მონაცემები მოდულში ჩასაწერად uint8_t dataSend; void setup() ( Wire.begin(); Serial.begin(9600); // მაღალი დონე ყველა პორტისთვის PCF8574 dataSend = B11111111; pcf8574_write(dataSend); ) void loop() ( // წაიკითხეთ ბაიტი მოდულიდან dataReceive = pcf8574_read ( // გამომავალი მონიტორზე ორობითი ფორმატით Serial.println(dataReceive, BIN // Bit-ების გადატანა მარცხნივ ნისკარტით Send = dataReceive);<< 4; // Накладываем битовую маску dataSend |= B00001111; // Записываем байт в модуль pcf8574_write(dataSend); delay(500); } // Процедура записи байта в модуль void pcf8574_write(uint8_t dt) { Wire.beginTransmission(address); Wire.write(dt); Wire.endTransmission(); } // Процедура чтения байта из модуля int8_t pcf8574_read() { Wire.beginTransmission(address); Wire.endTransmission(); Wire.requestFrom(address, 1); return (Wire.read()); }

მაღალი დონე თავდაპირველად იწერება ჩიპის ყველა პორტზე, ამიტომ პორტებს P0...P3 შეუძლიათ შეყვანის როლი შეასრულონ.

დონეები პორტის პინებთან იკითხება ყოველ 500 ms-ში და წაკითხვის შედეგი ნაჩვენებია მონიტორზე. თუ ერთ-ერთ შეყვანს P0...P3 დააკავშირებთ საერთო სადენს, მის ბიტში გამოჩნდება ნული. შემდეგ წაკითხვის მნიშვნელობა გადაინაცვლებს მარცხნივ ოთხი ბიტით, შედეგი გამოდის პორტში და ერთ-ერთი LED გამოდის. მაგალითად, თუ პინ P0-ზე ნულის წაკითხვა მოხდება, P4-თან დაკავშირებული LED გამოირთვება.

გთხოვთ გაითვალისწინოთ, რომ ექსპანდერისთვის ყოველი ჩაწერის წინ ჩვენ უნდა გამოვიყენოთ ერთეულების ბიტმასკი ყველა ბიტზე, რომელიც უნდა იყოს შეყვანილი: dataSend |= B00001111;

I2C ავტობუსთან მუშაობის რუტინები უკიდურესად გამარტივებულია;

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

მაგალითი 2: PCF8575 მოდულის გამოყენება

PCF8575 მოდულის თავისებურება ის არის, რომ მას აქვს 16 პორტი, ასე რომ ყოველთვის დაწერე ორი ბაიტი და წაიკითხე ორი ბაიტი. ეს წესი უნდა დაიცვას მაშინაც კი, თუ მეორე ბაიტი არ არის საჭირო.

ცოტა შევცვალოთ დიაგრამა. ჩვენ დავაკავშირებთ LED-ებს P10…P13 პორტებს, ხოლო P00…P03 პორტებს ჯუმპერით დავუკავშირებთ საერთო მავთულს (ნახ. 5 და 6).

ბრინჯი. 5. PCF8575 მოდულის შეერთების დიაგრამა

ბრინჯი. 6. მიკროსქემის განლაგება PCF8575 მოდულით

ესკიზ 2-ში 1-ები ჯერ იწერება ყველა პორტში, შემდეგ მათი სტატუსი იკითხება ყოველ 500 ms-ში. წაკითხვის რუტინა აბრუნებს 16-ბიტიან სიტყვას, რომელიც იყოფა ბაიტებად. დაბალი ბაიტის შიგთავსი (პინები P00...P07) კოპირდება მაღალ ბაიტში და იტვირთება ისევ მოდულში. თუ ერთ-ერთ პინს P00...P03 დააკავშირებთ საერთო მავთულს, ერთ-ერთი LED, რომელიც დაკავშირებულია P10...P13-თან, გაქრება.

// ბიბლიოთეკა I2C-თან მუშაობისთვის #include // ავტობუსში მოდულის მისამართი ნაგულისხმევი int მისამართი = 0x20; // მონაცემები წაკითხული მოდულიდან uint8_t hi, lo; uint16_t dataReceive; uint8_t dataHighByte; // მაღალი ბაიტი (P10...P17) uint8_t dataLowByte; // დაბალი ბაიტი (P00...P07) void setup() ( Wire.begin(); Serial.begin(9600); // მაღალი დონე ყველა პორტისთვის PCF8575 dataHighByte = B11111111; dataLowByte = B11111111; pcf8575Bytegh. ) void loop() ( // წაიკითხეთ ბაიტი მოდულიდან dataReceive = pcf8575_read(); // გამომავალი მონიტორზე ორობითი ფორმატით Serial.println(dataReceive, BIN); // აირჩიეთ დაბალი ბაიტი გრძელი სიტყვიდან. dataLowByte = lowByte(dataReceive) // დააკოპირეთ დაბალი ბაიტი dataHighByte // გამოიყენეთ ნიღაბი დაბალი ბაიტისთვის dataLowByte / ბაიტის ჩაწერის პროცედურა მოდულში void pcf8575_write(uint8_t dtl, int8_t dth) ( Wire.beginTransmission(address); Wire.write(dtl); // ჩაწერეთ დაბალი ბაიტი (P00...P07) Wire; .write(dth) / / ჩაწერეთ მაღალი ბაიტი (P10...P17) Wire.endTransmission( // მოდულიდან ბაიტის წაკითხვის პროცედურა int16_t pcf8575_read() ( Wire.beginTransmission(address); Wire.endTransmission(); Wire.requestFrom(მისამართი, 2); lo = Wire.read(); // წაიკითხეთ დაბალი ბაიტი (P00...P07) hi = Wire.read(); // წაიკითხეთ მაღალი ბაიტი (P10...P17) return (word(hi, lo)); // დააბრუნეთ გრძელი სიტყვა)

Arduino ბიბლიოთეკა PCF8574/PCF8575-ისთვის

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

ახალი სტატიები

● 5.4. ციფრული პორტის გაფართოება NodeMCU ESP8266-ისთვის MCP23017 ჩიპის გამოყენებით

ჩვენ შემოგთავაზებთ LED მითითებას და ხმის სიგნალიზაციას Nodemcu მოდულის, როგორც ჭკვიანი სახლის კონტროლერის გამოყენებისას. Nodemcu მოდულის ქინძისთავები გაცილებით მცირეა ვიდრე Arduino Mega-ზე, ამიტომ დაგვჭირდება MCP23017 შეყვანის გაფართოების ჩიპი. MCP23017 ჩიპი ამატებს 16 პორტს, რომელთა კონფიგურაცია შესაძლებელია როგორც შეყვანის, ისე გამომავალი (ნახ. 5.7). ჩიპი იყენებს პოპულარულ ორსადენიან I2C ავტობუსს.

ბრინჯი. 5.7. MCP23017 ჩიპის პინი

MCP23017 მიკროსქემის მისამართი I2C პროტოკოლისთვის შეიძლება დაყენდეს სიგნალების კომბინაციით ციფრულ შეყვანებზე A0 - A2 (ნახ. 5.8), რაც საშუალებას გაძლევთ ერთდროულად დააკავშიროთ 8 MCP23017 მიკროსქემა მიკროკონტროლერთან, შესაბამისად, 16 * 8 = 128 კონტაქტი.

ბრინჯი. 5.8. MCP23017 ჩიპის მისამართის დაყენება

ჩიპს აქვს A (GPA0-GPA7) და B (GPB0-GPAB) პორტების 2 ბანკი, რომელთაგან თითოეული შეიძლება კონფიგურირებული იყოს შეყვანისთვის ან გამომავალისთვის.
5.3 ჩამონათვალში. გვიჩვენებს პინბანკების A და B დაყენების მაგალითს.

ჩამონათვალი 5.3

// Wire.h ბიბლიოთეკის დაკავშირება #მოიცავს ბაიტი შეყვანა=0 ; void setup()( Serial.begin(9600); Wire.begin(0,2); // დაწყება I2C Wire.beginTransmission(0x20); // i2c - მისამართი (A0-0,A1-0,A2-0) Wire.write (0x00); // IODIRA რეგისტრაცია Wire.write(0x00 ); // დააყენეთ PORT A გამოსავალად Wire.endTransmission(); ) void loop (){ // წაიკითხეთ მონაცემები PORT B-დან Wire.beginTransmission(0x20); Wire.write (0x13); Wire.endTransmission(); Wire.requestFrom(0x20, 1); input=Wire.read(); // ჩაწერეთ მიღებული მონაცემები PORT A-ში Wire.beginTransmission(0x20); Wire.write (0x12); // მისამართი PORT A Wire.write(input); // PORT A Wire.endTransmission(); დაგვიანებით (100); // პაუზა)

MCP23017 მიკროსქემის გამოყენება გააფართოვებს Nodemcu მოდულის ციფრული კონტაქტების რაოდენობას 16-ით და საშუალებას მისცემს მოაწყოს LED ჩვენება და კრიტიკული სენსორის პარამეტრების ხმის სიგნალიზაცია.

როგორც უკვე გავაკეთე, შევუკვეთე Arduino-სთვის სენსორების სამი მეტ-ნაკლებად გადახურული ნაკრები. ორივე კომპლექტში მივიღე 74HC595 მიკროსქემა, რომელიც ამ დროისთვის დარჩა ყუთში. ამ დროისთვის არც კი ვიცოდი, როგორი მიკროცირკულა იყო, ან როგორ ეწერა ეს შავი ტარაკანი.

მაგრამ დადგა ბნელი დღეები, როდესაც მე ვერ ვიღებდი საკმარისს Arduino Nano-ს გამომავალი სიგნალებით, როდესაც ვაშენებდი მოწყობილობას სტეპერ ძრავების შესამოწმებლად. (TODO: ჩადეთ ბმული სტატიის SD ტესტერის შესახებ, როცა მზად იქნება). შედეგად, სტეპერ ძრავების შესამოწმებლად ჩემი მოწყობილობა საკმაოდ რთული აღმოჩნდა - ორხაზიანი 1602 დისპლეი მენიუს სისტემით, რომელსაც აკონტროლებს სრულფუნქციური 4x4 კლავიატურა, 3 ციფრული ციფრი სტეპერ ძრავის მიკროსტეპინგის მნიშვნელობის დასაყენებლად, Step და Dir სიგნალები სტეპერ ძრავისთვის და ა.შ. როგორც ჩანს, დროა გადავიდეთ Arduino-ს სხვა ვერსიაზე. მაგრამ ჩემი ბუნებრივი სიზარმაცე ეწინააღმდეგებოდა ამ მიგრაციას. და ზარმაცი უფროსმა გამოსავლის ძებნა დაიწყო.

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

აღმოჩნდა, რომ ეს არის საკმაოდ საინტერესო მიკროსქემა - ცვლის რეგისტრი სერიული შეყვანით და პარალელური გამომავალით.

(მონაცემთა ფურცლიდან)

ქინძისთავების აღწერა

კონტაქტი სახელი აღწერა და კავშირი
10 ~ MR სამაგისტრო გადატვირთვა- გადატვირთვა, აქტიური დონე დაბალი. იდეალურ შემთხვევაში, კარგი იდეა იქნებოდა გადატვირთვის მიკროსქემის გაკეთება, რომელიც ჯერ ამ შეყვანას დაბალს და შემდეგ ერთ მდგომარეობამდე მიიყვანს. მაგრამ თქვენ არ გჭირდებათ არეულობა და დაკავშირება +5V-ზე. ამ შემთხვევაში, გამოსავალი პირველ ჩანაწერამდე შეიცავს შემთხვევით მნიშვნელობებს
13 ~ OE გამომავალი ჩართვა- გამომავალი გარჩევადობა, აქტიური დონე დაბალი. როდესაც 0 ​​გამოიყენება, რეგისტრის შიგთავსი მიეწოდება გამოსავალს, როდესაც 1 გამოიყენება, გამომავალი გამორთულია და გადადის Z- მდგომარეობაზე, რაც საშუალებას აძლევს სხვადასხვა მოწყობილობებს გამოიყენონ ერთი ავტობუსი მონაცვლეობით. შეაერთეთ მიწასთან, თუ არ გჭირდებათ გამომავალი მდგომარეობის კონტროლი
14 დ.ს. სერიული მონაცემები შესულია- სერიული შეყვანა. ეს შეყვანა უნდა დაყენდეს შეყვანის სიგნალის მნიშვნელობაზე SHCP ცვლის საათის გამოყენებამდე.
11 SHCP Shift Register შეყვანის საათი- ცვლის რეგისტრის საათის შეყვანა. რეესტრში ბიტის გადასატანად, 0-დან 1-ზე გადასვლა უნდა მოხდეს თქვენი შეხედულებისამებრ. თქვენ შეგიძლიათ ამის გაკეთება დაუყოვნებლივ, შეგიძლიათ გააკეთოთ ის, სანამ შეხვალთ. პირველ შემთხვევაში, შეგვიძლია ვივარაუდოთ, რომ გადართვა ხდება პირდაპირი სიგნალის კიდეზე, მეორეში - ინვერსიული სიგნალის დაცემის გასწვრივ. ასევე იხილეთ შესრულების შენიშვნები ქვემოთ. ასევე, ამ სიგნალის ჩასვლისთანავე იცვლება სერიული გამომავალი Q7/S მნიშვნელობა
12 STCP შენახვის რეესტრის საათის შეყვანა- ჩამკეტის რეგისტრის საათის შეყვანა. ამ პულსის კიდეზე, მნიშვნელობა გადადის ცვლის რეგისტრიდან პარალელურ გამოსავალზე Q0-Q7.
9 Q7S სერიული მონაცემების გამომავალი- სერიული გამომავალი. მასზე ნაჩვენებია shift რეგისტრის ყველაზე მნიშვნელოვანი ბიტის მნიშვნელობა. ეს გამომავალი შეიძლება გამოყენებულ იქნას Shift რეგისტრის 16-ბიტიან, 24-ბიტიან და ა.შ. სქემა
15, 1-7 Q0, Q1-7 ჩამკეტის რეგისტრის შედეგები. სიგნალი მათ გადაეცემა შიდა ცვლის რეესტრიდან STCP სიგნალის ჩასვლისთანავე
8 GND კვება- საერთო მავთული
16 VCC კვება - +

კვება

მიკროსქემის HC ვერსია მოითხოვს 2V-დან 6V-მდე ელექტრომომარაგებას, HCT ვერსიას (TTL-თავსებადი) - 4.5V-დან 5.5V-მდე. HCT - TTL - ჯერ კიდევ გამოიყენება? როგორც ჩანს, Arduino არის თავად CMOS, ამიტომ HCT არ არის საჭირო, მაგრამ თუ გჭირდებათ დონეების კოორდინაცია გარე TTL მომხმარებლებთან, მაშინ შეგიძლიათ HC-ს ჩართვა 3.3 ვ-დან, მაშინ სიგნალის დონეები თავსებადი იქნება TTL-თან. ზოგადად, HC და HCT უნდა მუშაობდეს 5 ვოლტიან Arduino-სთან. ამას წერენ ინტერნეტში.

რაც უფრო მნიშვნელოვანია ბლოკირების კონდენსატორებია. მათ გარეშე, წრე შეიძლება არ იმუშაოს ისე, როგორც ეს იყო დაგეგმილი და უფრო მეტიც, შეიძლება იყოს არაპროგნოზირებადი. თეორიულად, ყოველი შემთხვევის ელექტრომომარაგების წრეში უნდა იყოს დამონტაჟებული 0.1 μF კონდენსატორი. მე გამოვთვალე ეს სიმძლავრის მნიშვნელობა, როგორც საშუალო ინტერნეტიდან. ჩემი სქემა კარგად მუშაობდა მის გარეშე. გარკვევის მიზნით, მე შევედი მიკროსქემის დიზაინერის ბიბლიაში, რათა განვმარტო - ჰილ და ჰოროვიცი, „სქემების დიზაინის ხელოვნება“ თითქმის ჰგავს დონალდ კნუტის „პროგრამირების ხელოვნებას“, მაგრამ მხოლოდ ტექნიკური ადამიანებისთვის (სხვათა შორის, ჰილი და ჰოროვიცი. ბევრად უფრო ახლოს არიან ხალხთან, კნუტი - ის ზედმეტად ჭკვიანია) - მაგრამ, როგორც ჩანს, ისინი ბლოკირებულ კონდენსატორებს უწოდებენ შეყვანის კონდენსატორებს. სამწუხაროა, კარგი წიგნია, მაგრამ უკვე ძალიან ჩამორჩება დროს. მე მაქვს 90-იანი წლების ბოლოს ან 0-იანი წლების დასაწყისის მეორე ან მესამე რუსული გამოცემა, ორიგინალი დიდი ალბათობით ჯერ კიდევ 10 წლით ძველია. მესამე, ვარდისფერ ტომზე ვიპოვე სტიკერი - "14 მანეთი" - რა იაფი იყო მაშინ ყველაფერი, თანამედროვე სტანდარტებით. მაგრამ მხოლოდ 15 წელი ან ცოტა მეტი გავიდა. ნოსტალგია აბსოლუტური იყო.

Შესრულება

მონაცემთა ცხრილის სათაურში 74HC595 წერენ, რომ ის მუშაობს 100 MHz-ზე. მონაცემთა ფურცლის გრაფიკებსა და ცხრილებზე სწრაფი გადახედვა გვიჩვენებს, რომ ტემპერატურის დიაპაზონში ყველაზე გრძელი ვადები -40C-დან +85C-მდე 4.5V ელექტრომომარაგებით არის 10-20ns (100-50MHz). იმ სიხშირეებით, რომლებზეც მუშაობს Arduino, თქვენ არ გჭირდებათ სხვა რამის ცოდნა. შესაძლებელია მხოლოდ, რომ სტანდარტული ბიბლიოთეკის digitalRead/digitalWrite არის უზარმაზარი მუხრუჭები სხვადასხვა შემოწმების გამო და შეიძლება (და უნდა) გადაიწეროს, როგორც უფრო სწრაფი ვერსია. მე მაქვს გეგმები, რომ ჩავუღრმავდე ამას და დავწერო უფრო დეტალურად, მაგრამ ჯერჯერობით განსაკუთრებული საჭიროება არ მაქვს.

Arduino Nano-სა და Arduino-ს ბიბლიოთეკის შესრულება გამომავლების გადართვისა და შეყვანის დამუშავების სიჩქარის თვალსაზრისით, ჩემი დაკვირვებით, სადღაც შუაშია რამდენიმე კილოჰერციდან ათეულ კილოჰერცამდე. ასე რომ, ჩემი აზრით, კოდის დაწერისას 74HC595 ცვლის რეესტრის გასაკონტროლებლად, არ არის საჭირო საკონტროლო სიგნალების დაყენების შეფერხებაზე ფიქრი.

სხვა საქმეა, რომ 8-ბიტიანი სერიული ექსპანდერისთვის, თქვენ უნდა გაყოთ Arduino-ზე არსებული მაქსიმალური გამომავალი გადართვის სიხშირე - დააყენეთ DS, დააყენეთ SHCP 1-ზე, გადააყენეთ SHCP (0-ზე) - 8-ჯერ და დააყენეთ/გადააყენეთ STCP. სულ, ერთი შეხედვით, 3 * 8 + 2 = 26 ციფრული ჩაწერის ოპერაცია. საერთო ჯამში, ის დაახლოებით 25-ჯერ უფრო ნელია, ვიდრე თავად Arduino-ს შეუძლია.

16, 24 ან 32 გამოსავალზე სკალირებისას, შენელება იქნება დაახლოებით 3*16 + 2 = 50, 3*24 + 2 = 74 და 3*32 + 2 = 98-ჯერ, შესაბამისად.

ცხადია, ასეთი 74HC595 ცვლის რეგისტრის გამაფართოებელი არ არის შესაფერისი რაღაცის მართლაც სწრაფი გასაკონტროლებლად, მაგრამ ზოგიერთ აპლიკაციაში ის საკმაოდ შესაფერისია იშვიათად ცვალებადი სტატიკური სიგნალების დასაყენებლად. მაგალითად, მე გამოვიყენე ასეთი ექსპანდერი 3-ბიტიანი მიკროსტეპ რეჟიმის დასაყენებლად მიკროსტეპ რეჟიმის დასაყენებლად DRV8825 სტეპერ ძრავის დრაივერისთვის სტეპერ ძრავების ტესტერში. სხვათა შორის, ეს ჩემთვის ჯერ კიდევ არ იყო განსაკუთრებით სასარგებლო - წერტილოვანი პრინტერების სტეპერები საშინლად მუშაობენ მიკროსტეპინგ რეჟიმში, ყოველ შემთხვევაში DRV8825 დრაივერის კონტროლის ქვეშ - მაგალითად, მიკროსტეპინგ რეჟიმში ნაბიჯის 1/2 ნახევარი არის რატომღაც. დუნე და გაურკვეველი, მხოლოდ მეორე ნახევარი არის ოპტიმისტური და ძლიერი. ამიტომ, მიკროსტეპის გამოყენებისას, სტეპერ ძრავის ღერძზე ოდნავი ძალისხმევის დროს, მან დაიწყო პირველი ნახევარი ნაბიჯების გამოტოვება. ამის შემდეგ, მე რატომღაც არ გამოვიკვლიე დარჩენილი მიკროსტეპინგ რეჟიმები არსებულ პრინტერის SD-ებზე.

სკალირება

74HC595-ზე დაფუძნებული Arduino გამომავალი ექსპანდერი შეიძლება საკმაოდ მარტივად გადაკეთდეს 8-ბიტიანი ვერსიიდან ნებისმიერი სიმძლავრის წრედ. ამისათვის დაბალი რეგისტრის Q7S სერიული გამომავალი უნდა იყოს დაკავშირებული უფრო მაღალის DS შეყვანასთან, ხოლო SHCP და STCP ხაზები უნდა იყოს დაკავშირებული პარალელურად. კარგად, მიღებული მიკროსქემისა და პროგრამული გადაწყვეტის მიხედვით, თქვენ უნდა აირჩიოთ როგორ დააკავშიროთ ~MR და ~OE ხაზები.

შეყვანის გაფართოება

Arduino-სთვის შეყვანის ხაზების გაფართოება პრინციპში ჰგავს გამომავალი გაფართოებას, იმის გათვალისწინებით, რომ თქვენ არ გჭირდებათ DS მნიშვნელობის დაყენება გამოსავალზე, არამედ წაიკითხეთ იგი შეყვანისას და გამოიყენოთ 74HC597 ტიპის ჩიპი. თუმცა, მე ჯერ არ გამომიცდია ეს პრაქტიკაში.

მულტიპლექსირება

თქვენ შეგიძლიათ გაზარდოთ Arduino-ს მიერ კონტროლირებადი გამომავალი ხაზების რაოდენობა ორი გზით: 1) გაზარდოთ ერთი სერიული გამომავალი ბიტის მოცულობა, რაც ბიტის სიმძლავრის ორჯერ, სამჯერ ან ოთხჯერ გაზრდისას, შესაბამისად ამცირებს ექსპანდერის სიჩქარეს ორით. , სამჯერ ან ოთხჯერ; 2) რამდენიმე ექსპანდერის პარალელური შეერთება, თითოეული ექსპანდერისთვის ერთი დამატებითი გამომავალი გამოყენებისას, რომელსაც შეუძლია შესანარჩუნებლად შესრულება მისაღებ დონეზე, მაგრამ მოითხოვს მინიმუმ ერთი Arduino გამომავალის გამოყენებას თითოეული ექსპანდერისთვის.

თუ პირდაპირ არ აკონტროლებთ რეგისტრის სიგნალებს 74HC595 - ~MR, ~OE Arduino-სთან ერთად, მაშინ მხოლოდ სამი Arduino გამომავალია საკმარისი იმისათვის, რომ აკონტროლოთ ცვლის რეგისტრის სიგნალები DS, SHCP და STCP, რათა გადააქციოთ ისინი 8 ან 16 ან მეტ გამომავალ სიგნალად. 74HC595 ჩიპის გამოყენებით.

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

მე უფრო მიდრეკილი ვარ გამოვიყენო ოფცია, როდესაც შიდა ცვლის რეგისტრები შეიძლება შეიცავდეს ყველაფერს, რაც გინდა (ვარიანტი 1), და ზოგიერთი წინა მნიშვნელობები ფიქსირდება გამოსავალზე და აი რატომ: შიდა ცვლიდან მნიშვნელობების გადაცემისას. დარეგისტრირდით გამომავალზე, უკონტროლო გადასვლები შეიძლება მოხდეს 0-დან 1-მდე და უკან, სიგნალის ერთგვარი გადახტომა, მაშინაც კი, თუ საწყისი მნიშვნელობა შიდა რეესტრში და გამომავალში ერთნაირია. და, ჩემი აზრით, შიდა ცვლის რეგისტრის მდგომარეობის გადაცემის ოპერაცია 74HC595-ის გამოსავალზე უნდა იყოს გამოყენებული რაც შეიძლება ნაკლებად.

პროგრამული უზრუნველყოფის მხარდაჭერა

ამ და მსგავსი გაფართოებების პროგრამული უზრუნველყოფის მხარდაჭერა მოიცავს არა უშუალოდ მოწყობილობებზე წვდომას კონკრეტული პინებით, გამოყენებული Arduino კონტროლერის DigitalRead/digitalWrite გამოყენებით, არამედ აბსტრაქტული I/O მოწყობილობის ქინძისთავით, რომელიც, თავის მხრივ, შეიძლება იყოს ინიციალიზებული, როგორც მიბმული. კონკრეტული ტიპის Arduino და სხვა მსგავსი აბსტრაქტული მოწყობილობისთვის.

ცამეტი ციფრული ხაზი და ექვსი ანალოგური შეყვანა არის ყველაფერი, რაც Arduino-ს შესთავაზებს, როგორც შეყვანის/გამოსვლის საშუალებები. მაგრამ ზოგიერთ შემთხვევაში (განსაკუთრებით პროექტებში დიდი რაოდენობით პერიფერიული მოწყობილობებით) პორტის ხაზების ასეთი ნაკრები არ არის საკმარისი.



ამასთან დაკავშირებით ჩნდება კითხვა შემავალი/გამომავალი ხაზების რაოდენობის გაფართოების მიზანშეწონილობის შესახებ. ეს მასალა აჩვენებს ასეთი გაფართოების მაგალითს MCP23017 ჩიპის გამოყენებით.


თქვენ შეიძლება იცოდეთ, რომ 6 ანალოგური პინი ასევე შეიძლება გამოყენებულ იქნას ციფრული I/O პინების სახით:


ანალოგური შეყვანა 0 = ხაზი 14
ანალოგური შეყვანა 1 = ხაზი 15
ანალოგური შეყვანა 2 = ხაზი 16
ანალოგური შეყვანა 3 = ხაზი 17
ანალოგური შეყვანა 4 = ხაზი 18
ანალოგური შეყვანა 5 = ხაზი 19

ასე რომ, ჩვენ შეგვიძლია რეალურად მივმართოთ ანალოგური შეყვანის 5 ციფრულ ხაზს, როგორიცაა: digitalWrite(19,HIGH). ასეთი ბრძანება დაწერს ლოგიკურს მე-19 პორტში, ანუ ანალოგურ ხაზში 5.


ტექნიკურად შეგვიძლია გამოვიყენოთ TX/RX სერიული პორტის ხაზები. მაგრამ ზოგიერთ შემთხვევაში ამის გაკეთება ძალიან რთულია, განსაკუთრებით მაშინ, როდესაც კოდი იყენებს ფუნქციებს, როგორიცაა Serial.begin(), რომელიც აუცილებელია სერიული პორტის მუშაობისთვის. ამგვარად, მომხმარებლისთვის ხელმისაწვდომი კონტაქტების საერთო რაოდენობა კვლავ იქნება 17. მაგრამ შესაძლებელია თუ არა ჩვიდმეტი ქინძისთავით დიდი რაოდენობის LED-ების ან სერვომოტორების კონტროლი? ამ შემთხვევაში, უმჯობესია გამოიყენოთ სპეციალური გარე მიკროსქემები. ხშირად ამ მიზნებისათვის გამოიყენება 74HC595 მსგავსი ცვლის რეგისტრი. მაგრამ ის მოითხოვს სამ დამატებით ხაზს კონტროლისთვის და არ გაძლევთ საშუალებას "გაფართოვოთ" ყველა ხაზი ერთდროულად. დისპლეის დრაივერები, როგორიცაა MAX7219, ასევე რეალურად „აფართოებს“ ქინძისთავების რაოდენობას. მაგრამ MAX7219 არის ძვირადღირებული ჩიპი. ამიტომ, უფრო იაფი და რაციონალურია MCP23017 პორტის გამაფართოებელი ჩიპის აღება. ეს ჩიპი განკუთვნილია 16 ხაზისთვის, აქვს ფართო ოპერაციული ძაბვის დიაპაზონი 1.8-დან 5.5 ვ-მდე და კონტროლდება I2C ინტერფეისით.


MCP23017 გამოიყენებს 2 Arduino პინს და მისცემს 16 I/O ხაზს. ასე რომ, ტექნიკურად შეგიძლიათ გამოიყენოთ 8 ცალი MCP23017 ერთი 16 პინიანი Arduino 16 x 8 = 128 ქინძის გასადიდებლად. Arduino-ს აქვს ბიბლიოთეკა I2C ავტობუსისთვის, სახელწოდებით Wire.h, ამიტომ MCP23017-თან ინტერფეისი ძალიან მარტივი იქნება. ქვემოთ მოცემულია კავშირის დიაგრამა Arduino-სა და MCP23017-ს შორის.




#include "Wire.h" void setup() ( Wire.begin(); // გაააქტიურე I2C ავტობუსი // დააყენე ხაზები გამოსავალზე Wire.beginTransmission(0x20); Wire.write(0x00); // IODIRA რეგისტრაცია Wire.write (0x00); Write((byte) 0xAA - ყველა სტრიქონი log.endTransmission(0x20); მნიშვნელობა - ყველა სტრიქონი ჟურნალში 1 Wire.endTransmission();

გაქვთ შეკითხვები?

შეატყობინეთ შეცდომას

ტექსტი, რომელიც გაეგზავნება ჩვენს რედაქტორებს: