Сайт

 Звонок  по  России  бесплатный

8-800-20002-74

 Челябинск: 8 (351) 267-20-10
   xxx-xxx         
  xxx    
Главная Контакты Карта сайта

Авто на заказ

  • Логин:
    Пароль:
Зарегистрироваться | Забыли пароль?
» »

Управление микросхемой MAX7219

Опубликовано: 05.09.2018

видео Управление микросхемой MAX7219

Бегущая строка на MAX7219 - управляем Android устройством

Не скажу что я большой фанат семисегментников, более того где это возможно стараюсь обойтись без них. На этот раз, все оказалось как раз наоборот, сама суть устройства нечто вроде шахматных часов. Первый игрок нажимает кнопку, начинается отсчет на вторых часах, при этом первые стоят. Затем второй игрок нажимает на кнопку, останавливая свои часы и запуская тем самым часы соперника. Третьи часы отсчитывают назад общее время раунда.



В целом реализация алгоритма в данном случае простая, поэтому жирный камень тут явно не нужен. За исключением одной проблемы, даже если использовать динамическую индикацию, то на один индикатор 7+4 выводов, очевидно что с ножками все плохо. Первая мысль — сдвиговый регистр. В целом идея рабочая и наверно так бы с стал делать, если бы мне не показали такой модуль:


Программирование МК STM32. УРОК 26. HAL. SPI. Драйвер индикатора MAX7219

Он содержит в себе микросхему MAX7219 и семисегментный дисплей на 4 разряда. Для его подключения к микроконтроллеру, нужно питание и 3 управляющих SPI линии CS, CLK, MOSI. Дисплей с общим катодом.

Ключевая здесь управляющая микросхема MAX7219, достаточно передать ей один раз данные, и она сама будет выводить нужные числа в нужный разряд и сама по себе будет крутить динамическую индикацию. Т.е. если вам нужно обновлять информацию на дисплее 1 раз в секунду, то микроконтроллер будет делать что то только в моменты передачи все остальное время он будет не загружен.

Работа с самой микросхемой довольно таки не сложная. Есть регистр куда задвигаются данные, адрес и данные.

Поэтому вся работа сводится к простой функции:

void write ( char data , char adress ) { unsigned char i ; //опускаем CS _soft_latch = 0 ; #asm("nop") //latch //задвигаем адрес for ( i= 0 ; i< 8 ; i++ ) { if ( adress & 0x80 ) { _soft_data = 1 ; } else { _soft_data = 0 ; } #asm("nop") //shift _soft_shift = 1 ; #asm("nop") _soft_shift = 0 ; adress <<= 1 ; } //задвигаем данные for ( i= 0 ; i< 8 ; i++ ) { if ( data & 0x80 ) { _soft_data = 1 ; } else { _soft_data = 0 ; } #asm("nop") //shift _soft_shift = 1 ; #asm("nop") _soft_shift = 0 ; data <<= 1 ; } _soft_latch = 1 ; }

Данные уходят по восходящему фронту CS (latch).

После подачи напряжения ничего работать не будет, пока не будет записана единица по адресу 0x0c:

Max7219 поддерживает до 8 семисегментников подключенных одновременно, у меня было задействовано только 4 выхода, поэтому в регистр количества сканируемых линий можно поставить ограничение 4. Для этого по адресу 0x0b, нужно записать 0x04.

Дальнейшая работа сводится к тому, чтобы записать данные в нужные разряды:

Т.е. чтобы записать в 0 семисегментник, число 5 нужно отправить 0x05 по адресу 0x01;

Только надо не забывать про перекодировку числа в сегменты. В принципе можно посмотреть как это сделано в прошивке. Для желающих можно поковырять окончательный вариант схемы в протеусе




Хиты продаж!

Акции!

Нам 66 лет!

В наличии


Новости

rss