როგორ დავაკავშიროთ MAX7219 მართვადი LED მატრიცა 8x8 ATtiny85 მიკროკონტროლერთან ერთად: 7 ნაბიჯი
როგორ დავაკავშიროთ MAX7219 მართვადი LED მატრიცა 8x8 ATtiny85 მიკროკონტროლერთან ერთად: 7 ნაბიჯი
Anonim
როგორ დავაკავშიროთ MAX7219 მართული LED მატრიცა 8x8 ATtiny85 მიკროკონტროლერთან
როგორ დავაკავშიროთ MAX7219 მართული LED მატრიცა 8x8 ATtiny85 მიკროკონტროლერთან

MAX7219 კონტროლერი დამზადებულია Maxim Integrated– ის კომპაქტური, სერიული შეყვანის/გამომავალი საერთო კათოდური დისპლეის დრაივერის საშუალებით, რომელსაც შეუძლია მიკროკონტროლერების ჩართვა 64 ინდივიდუალურ LED– ზე, 7 სეგმენტიანი ციფრული LED მონიტორები 8 ციფრამდე, ბარი – გრაფიკის ჩვენება და ა.შ. -ჩიპი არის BCD კოდი-B დეკოდერი, მულტიპლექს სკანირების სქემა, სეგმენტისა და ციფრული დრაივერები და 8 × 8 სტატიკური ოპერატიული მეხსიერება, რომელიც ინახავს თითოეულ ციფრს.

MAX7219 მოდულები ძალიან მოსახერხებელია ისეთი მიკროკონტროლერებისთვის, როგორიცაა ATtiny85, ან, ჩვენს შემთხვევაში Tinusaur Board.

ნაბიჯი 1: აპარატურა

აპარატურა
აპარატურა
აპარატურა
აპარატურა

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

მოდულებს, რომლებსაც ჩვენ ვიყენებთ, შეუძლიათ შეაერთონ ჯაჭვში 5 პატარა მხტუნავის გამოყენებით. იხილეთ სურათი ქვემოთ.

ნაბიჯი 2: Pinout და სიგნალები

MAX7219 მოდულს აქვს 5 პინი:

  • VCC - ძალა (+)
  • GND-ნიადაგი (-)
  • DIN - მონაცემთა შეყვანა
  • CS - ჩიპის არჩევა
  • CLK - საათი

ეს ნიშნავს, რომ ჩვენ გვჭირდება 3 ქინძისთავი ATtiny85 მიკროკონტროლის მხარეს მოდულის გასაკონტროლებლად. ეს იქნება:

  • PB0 - დაკავშირებულია CLK– თან
  • PB1 - დაკავშირებულია CS- თან
  • PB2 - დაკავშირებულია DIN– თან

ეს საკმარისია MAX7219 მოდულთან დასაკავშირებლად და დასაპროგრამებლად.

ნაბიჯი 3: პროტოკოლი

პროტოკოლი
პროტოკოლი

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

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

ნაბიჯი 4: პროგრამული უზრუნველყოფა

პროგრამული უზრუნველყოფა
პროგრამული უზრუნველყოფა

როგორ მუშაობს ეს MAX7219 მოდული, ეს არის:

  • ჩვენ ვწერთ ბაიტებს მის შიდა რეესტრში.
  • MAX7219 ახდენს მონაცემების ინტერპრეტაციას.
  • MAX7219 აკონტროლებს LED- ებს მატრიცაში.

ეს ასევე ნიშნავს იმას, რომ ჩვენ არ გვჭირდება LED- ების მასივის გარშემო ყოველთვის შემოვლა, რათა მათ გავანათოთ - MAX7219 კონტროლერი ზრუნავს ამაზე. მას ასევე შეუძლია მართოს LED- ების ინტენსივობა.

ამრიგად, MAX7219 მოდულების მოსახერხებლად გამოსაყენებლად ჩვენ გვჭირდება ფუნქციების ბიბლიოთეკა, რომელიც ამ მიზანს ემსახურება.

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

  • ბაიტის წერა MAX7219.
  • სიტყვის დაწერა (2 ბაიტი) MAX7219– ზე.

ფუნქცია, რომელიც წერს ერთ ბაიტს კონტროლერს, ასე გამოიყურება:

ბათილია max7219_ ბაიტი (uint8_t მონაცემები) {for (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // დააყენეთ CLK LOW, თუ (მონაცემები & 0x80) // მონაცემთა ნიღაბი MSB PORTB | = (1 << MAX7219_DIN]; // დააყენეთ DIN HIGH else PORTB & = ~ (1 << MAX7219_DIN]; // დააყენეთ DIN LOW PORTB | = (1 << MAX7219_CLK]; // CLK- ის დაყენება HIGH მონაცემებზე << = 1; // გადაიტანეთ მარცხნივ}}

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

MAX7219 კონტროლერში არის ათზე მეტი რეგისტრი.

ბრძანების, ან სიტყვის გაგზავნა ძირითადად 2 ზედიზედ ბაიტის გაგზავნაა. მისი განხორციელების ფუნქცია ძალიან მარტივია.

ბათილია max7219_word (uint8_t მისამართი, uint8_t მონაცემები) {PORTB & = ~ (1 << MAX7219_CS); // დააყენეთ CS LOW max7219_byte (მისამართი); // მისამართის გაგზავნა max7219_byte (მონაცემები); // მონაცემების გაგზავნა PORTB | = (1 << MAX7219_CS); // დააყენეთ CS HIGH PORTB & = ~ (1 << MAX7219_CLK]; // დააყენეთ CLK LOW}

აქ მნიშვნელოვანია აღინიშნოს ის ხაზი, სადაც ჩვენ CS სიგნალს დავუბრუნებთ HIGH - ეს აღნიშნავს თანმიმდევრობის დასასრულს - ამ შემთხვევაში, ბრძანების დასასრულს. მსგავსი ტექნიკა გამოიყენება ჯაჭვში ერთზე მეტი მატრიცის კონტროლისას. შემდეგი ნაბიჯი, სანამ დავიწყებთ LED- ების ჩართვას და გამორთვას, არის MAX7219 კონტროლერის ინიციალიზაცია. ეს ხდება გარკვეული მნიშვნელობების ჩაწერისას გარკვეულ რეგისტრებში. მოხერხებულობისთვის, კოდირებისას ჩვენ შეგვიძლია მასივში ჩავდოთ ინიციალიზაციის თანმიმდევრობა.

uint8_t initseq = {0x09, 0x00, // დეკოდირების რეჟიმი რეგისტრაცია, 00 = დეკოდირების გარეშე 0x0a, 0x01, // ინტენსივობის რეგისტრაცია, 0x00.. 0x0f 0x0b, 0x07, // სკანირების ლიმიტის რეგისტრაცია, 0x07 ყველა ხაზის საჩვენებლად 0x0c, 0x01, // გამორთვის რეგისტრატორი, 0x01 = ნორმალური ოპერაცია 0x0f, 0x00, // ჩვენების ტესტირების რეესტრი, 0x00 = ნორმალური მოქმედება};

ჩვენ უბრალოდ უნდა გავაგზავნოთ ზემოთ 5 ბრძანება თანმიმდევრობით, როგორც მისამართი/მონაცემთა წყვილი. შემდეგი ნაბიჯი - LED- ების რიგის განათება.

ეს ძალიან მარტივია - ჩვენ უბრალოდ ვწერთ ერთ ბრძანებას, სადაც 1 ბაიტი არის მისამართი (0 -დან 7 -მდე), ხოლო მე -2 ბაიტი არის 8 ბიტი, რომელიც წარმოადგენს 8 LED- ს ზედიზედ.

ბათილია max7219_row (uint8_t მისამართი, uint8_t მონაცემები) {if (მისამართი> = 1 && მისამართი <= 8) max7219_word (მისამართი, მონაცემები); }

მნიშვნელოვანია აღინიშნოს, რომ ეს იმუშავებს მხოლოდ 1 მატრიცაზე. თუ ჯაჭვში მეტ მატრიცას დავუკავშირებთ, ისინი ყველა ერთსა და იმავე მონაცემს აჩვენებენ. ამის მიზეზი ის არის, რომ ბრძანების გაგზავნის შემდეგ ჩვენ CS სიგნალს ვუბრუნებთ HIGH- ს, რაც ჯაჭვში მყოფი MAX7219 კონტროლერების ჩაკეტვას და აჩვენებს ბოლო ბრძანებას.

გირჩევთ: