Главная » Статьи » Как подключить |
КОГДА НЕ ХВАТАЕТ НОГ. ЧАСТЬ 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 Видео работы (я тут немного изменил программу, для поочередного вывода символов) | |
Просмотров: 19385 | Комментарии: 13
| Теги: |
Всего комментариев: 13 | ||||||||||||
| ||||||||||||
авторизация
рубрики
Проекты [46] |
Как подключить [32] |
Инструменты [3] |
Полезная информация [18] |
Объявления [3] |
метки