Talaan ng mga Nilalaman:

Paano Mag-interface ng isang MAX7219 Driven LED Matrix 8x8 Sa ATtiny85 Microcontroller: 7 Hakbang
Paano Mag-interface ng isang MAX7219 Driven LED Matrix 8x8 Sa ATtiny85 Microcontroller: 7 Hakbang

Video: Paano Mag-interface ng isang MAX7219 Driven LED Matrix 8x8 Sa ATtiny85 Microcontroller: 7 Hakbang

Video: Paano Mag-interface ng isang MAX7219 Driven LED Matrix 8x8 Sa ATtiny85 Microcontroller: 7 Hakbang
Video: Introduction to LCD2004 LCD display with I2C module for Arduino 2024, Hulyo
Anonim
Paano Mag-interface ng isang MAX7219 Driven LED Matrix 8x8 Sa ATtiny85 Microcontroller
Paano Mag-interface ng isang MAX7219 Driven LED Matrix 8x8 Sa ATtiny85 Microcontroller

Ang MAX7219 controller ay gawa ng Maxim Integrated ay compact, serial input / output karaniwang-cathode display driver na maaaring i-interface ang mga microcontroller sa 64 na indibidwal na LEDs, 7-segment na numerong LED na nagpapakita ng hanggang sa 8 digit, ipinapakita ang bar-graph, atbp Kasama sa Ang -chip ay isang decoder ng BCD code-B, multiplex scan circuitry, mga driver ng segment at digit at isang 8 × 8 static RAM na nag-iimbak ng bawat digit.

Ang MAX7219 modules ay napaka-maginhawa upang magamit sa mga microcontroller tulad ng ATtiny85, o, sa aming kaso ang Tinusaur Board.

Hakbang 1: Ang Hardware

Ang Hardware
Ang Hardware
Ang Hardware
Ang Hardware

Karaniwang ganito ang hitsura ng mga module na MAX7219. Mayroon silang isang input bus sa isang gilid at output bus sa kabilang banda. Pinapayagan kang mag-daisy ng kadena 2 o higit pang mga module, ibig sabihin, sunud-sunod, upang lumikha ng mas kumplikadong mga pag-setup.

Ang mga module na ginagamit namin ay may kakayahang kumonekta sa isang kadena gamit ang 5 maliit na jumper. Tingnan ang larawan sa ibaba.

Hakbang 2: Pinout at Mga Signal

Ang MAX7219 module ay may 5 mga pin:

  • VCC - lakas (+)
  • GND - ground (-)
  • DIN - Pag-input ng data
  • CS - Piliin ang Chip
  • CLK - Orasan

Nangangahulugan iyon na kailangan namin ng 3 mga pin sa gilid ng ATtiny85 microcontroller upang makontrol ang module. Iyon ang magiging:

  • PB0 - konektado sa CLK
  • PB1 - konektado sa CS
  • PB2 - konektado sa DIN

Sapat na ito upang kumonekta sa module na MAX7219 at i-program ito.

Hakbang 3: Ang Protocol

Ang Protocol
Ang Protocol

Ang pakikipag-usap sa MAX7219 ay medyo madali - gumagamit ito ng isang kasabay na protocol na nangangahulugang para sa bawat bit ng data na ipinapadala namin ay mayroong isang cycle ng orasan na nangangahulugang pagkakaroon ng data na bit.

Sa madaling salita, nagpapadala kami ng 2 magkakasunod na mga pagkakasunud-sunod sa mga piraso - isa para sa orasan at isa pa para sa data. Ito ang ginagawa ng software.

Hakbang 4: Ang Software

Ang software
Ang software

Ang paraan ng pamamaraang ito ng MAX7219 module ay ito:

  • Nagsusulat kami ng mga byte sa panloob na rehistro.
  • Binibigyang kahulugan ng MAX7219 ang data.
  • Kinokontrol ng MAX7219 ang mga LED sa matrix.

Nangangahulugan din iyon na hindi namin kailangang bilugan ang hanay ng mga LED sa lahat ng oras upang magaan ang mga ito - alagaan iyon ng MAX7219 controller. Maaari rin nitong pamahalaan ang tindi ng mga LED.

Kaya, upang magamit ang MAX7219 modules sa isang maginhawang paraan kailangan namin ng isang library ng mga pagpapaandar upang maihatid ang hangaring iyon.

Una, kailangan namin ng ilang pangunahing mga pag-andar upang makapagsulat sa mga rehistro ng MAX7219.

  • Sumusulat ng isang byte sa MAX7219.
  • Pagsulat ng isang salita (2 bytes) sa MAX7219.

Ang pag-andar na nagsusulat ng isang byte sa controller ay ganito:

void max7219_byte (uint8_t data) {para sa (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // Set CLK to LOW if (data & 0x80) // Mask the MSB of the data PORTB | = (1 << MAX7219_DIN); // Itakda ang DIN sa TAAS pa PORTB & = ~ (1 << MAX7219_DIN); // Itakda ang DIN sa LOW PORTB | = (1 << MAX7219_CLK); // Itakda ang CLK sa TAAS na data << = 1; // Shift to the left}}

Ngayon na maaari kaming magpadala ng mga byte sa MAX7219 maaari naming simulan ang pagpapadala ng mga utos. Ginagawa ito sa pamamagitan ng pagpapadala ng 2 byes - Ika-1 para sa address ng panloob na rehistro at ika-2 para sa data na nais naming ipadala.

Mayroong higit sa isang dosenang rehistro sa MAX7219 controller.

Ang pagpapadala ng isang utos, o isang salita, ay karaniwang nagpapadala ng 2 magkasunod na byte. Ang pagpapaandar ng pagpapatupad na napaka-simple.

void max7219_word (uint8_t address, uint8_t data) {PORTB & = ~ (1 << MAX7219_CS); // Itakda ang CS sa LOW max7219_byte (address); // Pagpapadala ng address max7219_byte (data); // Pagpadala ng data ng PORTB | = (1 << MAX7219_CS); // Itakda ang CS sa TAAS NA PORTB & = ~ (1 << MAX7219_CLK); // Itakda ang CLK sa Mababa}

Mahalagang tandaan dito ang linya kung saan ibabalik namin ang signal ng CS sa TAAS - marka nito ang pagtatapos ng pagkakasunud-sunod - sa kasong ito, ang pagtatapos ng utos. Ang isang katulad na pamamaraan ay ginagamit kapag kinokontrol ang higit pa sa isang matrix na konektado sa isang kadena. Susunod na hakbang, bago namin simulan ang pag-on at pag-off ng mga LED, ay upang gawing simula ang MAX7219 controller. Ginagawa ito sa pamamagitan ng pagsusulat ng ilang mga halaga sa ilang mga rehistro. Para sa kaginhawaan, habang naka-cod ito maaari naming ilagay ang pagkakasunud-sunod ng pagkakasunud-sunod sa isang array.

uint8_t initseq = {0x09, 0x00, // Decode-Mode Register, 00 = Walang decode 0x0a, 0x01, // Intensity Register, 0x00.. 0x0f 0x0b, 0x07, // Scan-Limit Register, 0x07 upang maipakita ang lahat ng mga linya 0x0c, 0x01, // Shutdown Register, 0x01 = Normal Operation 0x0f, 0x00, // Display-Test Rehistro, 0x00 = Normal Operation};

Kailangan lamang naming ipadala ang 5 mga utos sa itaas sa isang pagkakasunud-sunod bilang mga pares ng address / data. Susunod na hakbang - pag-iilaw ng isang hilera ng mga LED.

Napakadali - nagsusulat lamang kami ng isang utos kung saan ang 1st byte ang address (mula 0 hanggang 7) at ang ika-2 byte ay ang 8 bits na kumakatawan sa 8 LEDs sa hilera.

void max7219_row (uint8_t address, uint8_t data) {if (address> = 1 && address <= 8) max7219_word (address, data); }

Mahalagang tandaan na gagana ito para sa 1 matrix lamang. Kung kumokonekta kami ng higit pang mga matrice sa isang kadena ipapakita nilang lahat ang parehong data. Ang dahilan para dito ay pagkatapos maipadala ang utos ay ibabalik namin ang signal ng CS sa TAAS na sanhi ng lahat ng mga kontroler ng MAX7219 sa kadena na magkabit at ipakita kung anuman ang huling utos.

Inirerekumendang: