Мазмуну:

ATtiny85 микроконтроллери менен MAX7219 жетектелген LED Matrix 8x8 менен кантип интерфейс түзүү керек: 7 кадам
ATtiny85 микроконтроллери менен MAX7219 жетектелген LED Matrix 8x8 менен кантип интерфейс түзүү керек: 7 кадам

Video: ATtiny85 микроконтроллери менен MAX7219 жетектелген LED Matrix 8x8 менен кантип интерфейс түзүү керек: 7 кадам

Video: ATtiny85 микроконтроллери менен MAX7219 жетектелген LED Matrix 8x8 менен кантип интерфейс түзүү керек: 7 кадам
Video: M#2: Назначение контактов макетной платы Atmega128 | Outseal Dev. ПЛК Мега 2024, Ноябрь
Anonim
ATtiny85 микроконтроллери менен MAX7219 жетектелген LED Matrix 8x8 менен кантип интерфейс кылуу керек
ATtiny85 микроконтроллери менен MAX7219 жетектелген LED Matrix 8x8 менен кантип интерфейс кылуу керек

MAX7219 контроллери Maxim Integrated тарабынан чыгарылган, чакан, сериялык киргизүү/чыгаруу жалпы катоддук дисплей драйвери, ал микроконтроллерди 64 жеке LEDге, 7 сегменттүү сандык LED дисплейлерине чейин, 8 цифраларга чейин, бар-графикалык дисплейлерге ж. -чип-бул BCD коду-В декодери, мультиплекс сканерлөө схемасы, сегмент жана цифралык драйверлер жана ар бир цифраны сактаган 8 × 8 статикалык RAM.

MAX7219 модулдары ATtiny85, же биздин учурда Tinusaur Board сыяктуу микроконтроллерлер менен колдонууга абдан ыңгайлуу.

1 -кадам: Аппараттык

Аппараттык
Аппараттык
Аппараттык
Аппараттык

MAX7219 модулдары көбүнчө ушундай көрүнөт. Алардын бир жагында кириш автобусу, экинчи жагында чыгыш автобусу бар. Бул татаал орнотууларды түзүү үчүн 2 же андан көп модулдарды, б.а. биринин артынан бирин чайкап алууга мүмкүндүк берет.

Биз колдонуп жаткан модулдар 5 кичинекей секиргичти колдонуп, чынжырга туташа алат. Төмөндөгү сүрөттү караңыз.

2 -кадам: Pinout жана сигналдар

MAX7219 модулунда 5 төөнөгүч бар:

  • VCC - кубат (+)
  • GND-жер (-)
  • DIN - маалыматтарды киргизүү
  • CS - Чип тандоо
  • CLK - Саат

Бул бизге модулду башкаруу үчүн ATtiny85 микроконтроллери тарабында 3 төөнөгүч керек экенин билдирет. Булар:

  • PB0 - CLKга туташкан
  • PB1 - CSге туташкан
  • PB2 - DINге туташкан

Бул MAX7219 модулуна туташуу жана аны программалоо үчүн жетиштүү.

3 -кадам: Протокол

Протокол
Протокол

MAX7219 менен байланышуу салыштырмалуу оңой - бул синхрондуу протоколду колдонот, демек биз жөнөткөн ар бир маалымат бит үчүн ошол маалымат битинин бар экенин билдирген саат цикли бар.

Башкача айтканда, биз биттерге 2 параллелдүү ырааттуулукту жөнөтөбүз - бири саат үчүн, экинчиси маалымат үчүн. Бул программа эмне кылат.

4 -кадам: Программалык камсыздоо

Программалык камсыздоо
Программалык камсыздоо

Бул MAX7219 модулунун иштөө жолу мындай:

  • Биз анын ички реестрине байт жазабыз.
  • MAX7219 маалыматтарды чечмелейт.
  • MAX7219 матрицада LED диоддорун башкарат.

Бул ошондой эле, биз аларды жарык кылуу үчүн дайыма LED диапазонун айланып өтүүнүн кажети жок дегенди билдирет - MAX7219 контролери муну карайт. Ал ошондой эле LEDдин интенсивдүүлүгүн башкара алат.

Ошентип, MAX7219 модулдарын ыңгайлуу түрдө колдонуу үчүн, биз бул максатка кызмат кыла турган функциялар китепканасына муктажбыз.

Биринчиден, MAX7219 регистрлерине жазуу үчүн бизге кээ бир негизги функциялар керек.

  • MAX7219 үчүн байт жазуу.
  • MAX7219га сөз (2 байт) жазуу.

Контроллерге бир байт жазуучу функция мындай көрүнөт:

void max7219_byte (uint8_t data) {for (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // CLKти LOW деп кой, эгерде (data & 0x80) // PORTB маалыматтын MSB маскасын | = (1 << MAX7219_DIN); // DINди башкага коюңуз PORTB & = ~ (1 << MAX7219_DIN); // DINди LOW PORTB деп коюңуз | = (1 << MAX7219_CLK); // CLKти Жогорку маалыматка коюңуз << = 1; // Солго жылдыруу}}

Эми биз MAX7219га байт жөнөтө алабыз, биз буйруктарды жөнөтө баштайбыз. Бул 2 байсты жөнөтүү менен ишке ашат - 1чи ички реестрдин дареги үчүн, экинчиси биз жибергибиз келген маалыматтар үчүн.

MAX7219 контроллеринде ондон ашык реестр бар.

Команданы же сөздү жөнөтүү негизинен удаалаш 2 байтты жөнөтөт. Муну ишке ашыруу функциясы абдан жөнөкөй.

жараксыз max7219_word (uint8_t дареги, uint8_t маалыматы) {PORTB & = ~ (1 << MAX7219_CS); // CSди LOW max7219_byte деп коюңуз (дарек); // max7219_byte дарегин жөнөтүү (маалыматтар); // маалыматтарды жөнөтүү PORTB | = (1 << MAX7219_CS); // CSди ЖОГОРКУ ПОРТБОго орнотуу & = ~ (1 << MAX7219_CLK); // CLKти ТӨМӨНгө коюу}

Бул жерде биз CS сигналын кайра ЖОГОРУГА алып келген сапты белгилеп кетүү маанилүү - бул ырааттуулуктун бүтүшүн билдирет - бул учурда буйруктун аягы. Окшош ыкма чынжырга туташкан бирден көп матрицаны көзөмөлдөөдө колдонулат. Кийинки кадам, диоддорду күйгүзүп жана өчүрүүдөн мурун, MAX7219 контроллерин баштоо. Бул белгилүү бир реестрлерге белгилүү бир баалуулуктарды жазуу аркылуу жасалат. Ыңгайлуулук үчүн, аны коддоодо биз инициализация тизмегин массивге коё алмакпыз.

uint8_t initseq = {0x09, 0x00, // Декоддоо режиминин реестри, 00 = 0x0a, 0x01, // Интенсивдүүлүк реестри, 0x00.. 0x0f 0x0b, 0x07, // Scan-Limit Register, 0x07 бардык саптарды көрсөтүү үчүн 0x0c, 0x01, // Өчүрүү реестри, 0x01 = Кадимки иш 0x0f, 0x00, // Дисплей-Тест Реестри, 0x00 = Кадимки Иш};

Биз жөн гана дарек/маалымат түгөйү катары 5 буйрукту ырааттуу түрдө жөнөтүшүбүз керек. Кийинки кадам - LED диапазонун жарыктандыруу.

Бул абдан жөнөкөй - биз жөн гана бир буйрук жазабыз, анда 1 -байт дарек (0дон 7ге чейин) жана 2 -байт катардагы 8 LEDди билдирген 8 бит.

жараксыз max7219_row (uint8_t дареги, uint8_t маалыматы) {if (address> = 1 && address <= 8) max7219_word (address, data); }

Бул 1 матрицада гана иштей турганын белгилей кетүү маанилүү. Эгерде биз дагы матрицаларды чынжырча туташтырсак, анда алар бир эле маалыматты көрсөтүшөт. Мунун себеби, буйрукту жөнөткөндөн кийин, CS сигналын кайра ЖОГОРУГА алып келебиз, бул чынжырдагы бардык MAX7219 контроллерлеринин кармалышына жана акыркы буйруктун бардыгын көрсөтүшүнө алып келет.

Сунушталууда: