Отключаемые счетчики электроэнергии на пульте. Все с документами пломбами, гарантией и без посредников!

КОГДА НЕ ХВАТАЕТ НОГ. ЧАСТЬ 3. ДРАЙВЕР ИНДИКАТОРОВ MAX7221. Часть 2

 В первой части, посвященной методике работы с драйвером светодиодных индикаторов MAX7221, было знакомство с этим драйвером. В частности был описан режим прямого управления сегментами. Осталось научится работать во втором режиме, при котором используется встроенный в микросхему декодер символов.

 Если пропустили первую часть об этой микросхеме, советую почитать.

 Итак, в прошлый раз мы выводили цифры на индикатор путем прямого управления сегментами, то есть зажигали каждый сегмент в каждом разряде по отдельности. Это заставляет поначалу поломать голову над подключением индикатора и соответствии регистров и сегментов. В режиме BCD code B с этим намного проще. Например, чтобы вывести в первый разряд какую-нибудь цифру, мы отправляем адрес этого разряда (как и в случае прямого управления) а затем отправляем саму эту цифру.  Это стало доступно благодаря встроенному в микросхему декодера символов, который сам зажжет нужные сегменты индикатора. Декодер имеет память всего на 16 символов: цифры от 0 до 9, знак “-“, пустой символ и 4 буквы – “E”, “H”, “L”, “P”.  Как это работает: например нам нужно вывести цифру 9, мы просто берем и отправляем эту цифру в микросхему (см. значение в Register Data в таблице ниже). Понятно что отправленная цифра будет соответствовать выводимой цифре. 

 

 Дальше идут спецсимволы, для того чтобы их вывести тоже нужно отправить цифру. Для вывода знака “-” отправляем цифру 10. Соответственно, чтобы вывести на индикатор букву “E” отправим в микросхему цифру 11 и так далее. На самом деле просто и очень удобно.  Теперь перейдем к делу, подключим драйвер к микроконтроллеру и выведем какие нибудь данные на индикатор, настроив MAX7221 в режим декодирования.

 Схема подключения драйвера осталась от прошлого раза:

 Как и в прошлый раз для тестирования использовал 4х разрядный индикатор.

 Вот исходник тестовой прошивки, которая сначала выведет на индикатор “—-“, затем слово “HELP” и потом увеличивающееся значение переменной А: 

$regfile = “attiny2313.dat”

$crystal = 8000000

$hwstack = 32

$swstack = 10

$framesize = 40

Config Portd = Output

Cs Alias Portd.1

Ser_clk Alias Portd.2

Ser_data Alias Portd.3

Dim A As Word

Dim Digit(8)as Byte

Dim Y As Byte

Dim Disp_num As Byte

Dim Disp_data As Byte

Dim Digit_str As String * 4

Dim Temp_str As String * 2

Gosub Max7219_setup  ‘выполняем обязательную настройку микросхемы

‘выведем эти строки на индикатор

Digit_str = “—-“

Gosub Prepare

Wait 2

Digit_str = “HELP”

Gosub Prepare

Wait 2

Do ‘в главном цикле будем отображать значение увеличивающейся переменной

Wait 1

Incr A                   ‘переменная значение которой выводим на индикатор

Digit_str = Str(a)

Digit_str = Format(digit_str , “0000”)

Gosub Prepare

Loop

End

‘Подготовка данных для передачи

Prepare:

Do

For Y = 1 To 4

   Temp_str = Mid(digit_str , Y , 1)

   Select Case Temp_str

     ‘каждый символ в Case имеет собственное цифровое значение (см. таблицу)

      Case “0” : Temp_str = “0”

      Case “1” : Temp_str = “1”

      Case “2” : Temp_str = “2”

      Case “3” : Temp_str = “3”

      Case “4” : Temp_str = “4”

      Case “5” : Temp_str = “5”

      Case “6” : Temp_str = “6”

      Case “7” : Temp_str = “7”

      Case “8” : Temp_str = “8”

      Case “9” : Temp_str = “9”

      Case “-” : Temp_str = “10”

      Case “E” : Temp_str = “11”

      Case “H” : Temp_str = “12”

      Case “L” : Temp_str = “13”

      Case “P” : Temp_str = “14”

      Case ” ” : Temp_str = “15”

   End Select

   Digit(y) = Val(temp_str)

      Disp_num = Y           ‘номер разряда в который будут записаны данные

      Disp_data = Digit(y)   ‘данные которые будут записаны в этот разряд

      Gosub Disp_write

Next Y

Loop Until Y = 5

Return

‘Передаем данные в Max7221

Disp_write:

Ser_data = 0

Ser_clk = 0

Cs = 0

Shiftout Ser_data , Ser_clk , Disp_num , 1  ‘номер разряда для вывода информации

Shiftout Ser_data , Ser_clk , Disp_data , 1  ‘данные, выводимые в  этот разряд

Cs = 1

Return

‘инициализации max7221

Max7219_setup:

Disp_num = &H0C : Disp_data = 0  ‘будим микросхему и начинаем ее настраивать

Gosub Disp_write

Disp_num = &H09 : Disp_data = &B11111111       ‘включаем режим BCD code B

Gosub Disp_write

Disp_num = &H0A : Disp_data = 10   ‘уровень свечения сегментов от 0 до 15

Gosub Disp_write

Disp_num = &H0B : Disp_data = 3    ‘число используемых разрядов (4 разряда)

Gosub Disp_write

Disp_num = &H0F : Disp_data = 0    ‘тестовый режим выключен (0-вык, 1-вкл)

Gosub Disp_write

Disp_num = &H0C : Disp_data = 1

Gosub Disp_write

Return

Видео работы (я тут немного изменил программу, для поочередного вывода символов)


Взято с: avrproject.ru


Категория: AVR
Метки:

Написать коментарий

*
= 4 + 6

Добавить изображение

Последние статьи