Контроллер индикации MAX7219

Все прочитали, вроде даже поняли, взяли паяльник - а нифига не получается? Скорее сюда! Поможем. Чем можем...
Ответить
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Контроллер индикации MAX7219

Сообщение serg_svd »

В общем накидал схемку в протеусе на 8 7-сегментных индикаторов. Собственно индикатор, MAX и мк.
процес инициализации шел в следующей последовательности
1. shutdown
2. Intensity
3. Scan Limit
4. Decode Mode
5. Display Test
На индикаторе все нули. Сегмент G и точка не светятся.
Если выводить потом цифру 8 высвечивается без проблем.
В чем причина провала команды тест?

PS Переключение режимов отображения BCD на свободно программируемые символы и их вывод тоже прохоит успешно.
Среда программирования - баском
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3780
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: Контроллер индикации MAX7219

Сообщение Ser60 »

Вообще-то без текста программы судить сложно, но вполне возможно, что Proteus врет. Вот для примера мой код инициализации MAX7221 на АСМе для PIC:

Спойлер

Код: Выделить всё

init_MAX7221
   clrf   tmp
   incf   tmp, f                    ; digits clear loop
   movf   tmp, w
   movwf   dat+1            ; digit address
   clrf   dat
   call   write_MAX7221
   btfss   tmp, 3
    goto   $-6

   movlw   0x09
   movwf   dat+1            ; decode register
   clrf   dat                       ; disable decoding for all digits
   call   write_MAX7221
 
   movlw   0x0A
   movwf   dat+1            ; intensity register
   movlw   15
   movwf   dat               ; set max intensity 15/16
   call   write_MAX7221

   movlw   0x0B
   movwf   dat+1            ; scan limit register
   movlw   7
   movwf   dat               ; scan 8 digits
   call   write_MAX7221
   
   movlw   0x0C
   movwf   dat+1            ; config register
   movlw   1               ; normal operation
   movwf   dat               
   call   write_MAX7221

   movlw   0x0F
   movwf   dat+1            ; display test register
   clrf   dat                       ; normal operation
   call   write_MAX7221 
   retlw   0
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: Контроллер индикации MAX7219

Сообщение serg_svd »

Да я код специально не приводил. Поскольку написан в баскоме.
Адреса и коды брались из даташита. Поэтому я написал только последовательность инициализации. Сдаается мне что тут действительно може протеус быть виноват. Спешно разрабатываю тестовую ПП с индикаторами для проверки вживую.

Код: Выделить всё

Const Decode_mode = &H9                                     ' Команда режима декодирования  D11-D8 (1001)
Const Intensity = &HA                                       ' Интенсивность свечения индикаторов D11-D8 (1010)
Const Scan_limit = &HB                                      ' Число разрядов индикатора D11-D8(1011)
Const Shutdown = &HC                                        ' Гашение индикаторов D11-D8 (1100)
Const Display_test = &HF                                    ' Команда теста индикатора (свечение всех сегментов) D11-D8 (1111)
_____

Sub Max7219_init()
' Инициализация микросхемы MAX72109
' Разряд 0, 4 - непосредственное управление сегментами, остальные разряды - декодирование BCD. D7-D0 (11101110)
' Интенсивность свечения 15/32. D3-D0 (0111)
' Число индикаторов - 8. D2-D0 (111)

   Call Max7219_out(shutdown , &H1)                         ' Нормальный режим индикатора
   Call Max7219_out(intensity , &H7)                        ' Интенсивность свечения индикатора
   Call Max7219_out(scan_limit , &H7)                       ' Число индикаторов
   Call Max7219_out(decode_mode , &HFF)                     ' Режим декодирования. Все индикаторы BCD
   Call Max7219_out(display_test , 1)                       ' Тест индикаторов
   Wait 3
   Call Max7219_out(display_test , 0)                       ' Отключение теста индикаторов
   Call Max7219_out(decode_mode , &B11101110)               ' Режим декодирования для дальнейшей работы

End Sub

'*****************************************************************

Sub Max7219_out(byval H As Byte , Byval L As Byte)
   Reset 7219_load                                          ' Устанавливаем низкий уровень на линии LOAD
   Shiftout 7219_din , 7219_clk , H , 1                     ' Загоняем старший байт. Option - 1 – MSB shifted out first when clock goes high
   Shiftout 7219_din , 7219_clk , L , 1
   Set 7219_load                                            ' Устанавливаем высокий уровень на линии LOAD
End Sub

привел только часть с кодом инициализации.
Последний раз редактировалось serg_svd Пт сен 14, 2012 23:42:26, всего редактировалось 1 раз.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3780
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: Контроллер индикации MAX7219

Сообщение Ser60 »

Вроде, все выглядит логично. Я только не понял назначения инструкции
Call Max7219_out(decode_mode , &B11101110) ' Режим декодирования для дальнейшей работы
т.к. режим декодирования 0хЕЕ не оговорен в ДШ.
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: Контроллер индикации MAX7219

Сообщение serg_svd »

Оговорен :)
Микра просто прелесть. Она может сама декодировать числа от 0 до 9, а возможен и прямой вывод своего символа. Вот эта строчка у меня и указывает, что 7-5 разряды декодируются цифры, 4 разряд я вывожу что хочу. Оставшиеся три точно также.
Просто изначально я сразу настраивал микру на нужную мне работу. Но в протеусе разряды без установленого бита декодирования BCD при тесте индикатора не засвечивались вообще. Вот мне и пришлось вначале давать команду декодирования на все разряды, потом делать тест, а потом включать нужную мне работу. Это или глюк протеуса, или я не дочитал даташит на микру. Поэтому взялся делать тестовый индикатор и опробовать все в железе
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3780
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: Контроллер индикации MAX7219

Сообщение Ser60 »

Значит я уже сам подзабыл что к чему. Пару лет назад использовал эти драйверы в своих проектах. На всякий случай вот линки, может пригодится.
http://mcs.uwsuper.edu/sb/Electronics/MAX6950/
http://mcs.uwsuper.edu/sb/Electronics/Vmeter/
Но не в одном из них я не пробовал режим тестирования.
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: Контроллер индикации MAX7219

Сообщение serg_svd »

сделал платку с индикатором и подключил к макетке с контроллером ATmega8.
Тест работает адекватно, все сегменты засвечиваются. Как бы похоже на глюк протеуса.
Но! при попытке вывести цифры от 1 до 8 на все сегменты наблюдается пропадание на индикаторе отдельных сегментов. Причем выборочно. 2ка и 3ка без сегмента А, 4ка без сегмента f.... закономерности нет, чтоб грешить на непропай. При этом в протеусе вывод работает без проблем.
Плату всю под микроскопом проглядел, процарапал на всякий случай между дорожками. глюк остался.


ЗЫ. Все заработало. Дефект был в плате. 2 дорожки соседние имели коротыш. причем увидел только подняв микруху с платы и поглядев в микроскоп под ней
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
active85
Родился
Сообщения: 11
Зарегистрирован: Пт ноя 04, 2011 11:55:14

Re: Контроллер индикации MAX7219

Сообщение active85 »

serg_svd писал(а):В общем накидал схемку в протеусе на 8 7-сегментных индикаторов. Собственно индикатор, MAX и мк.
процес инициализации шел в следующей последовательности
1. shutdown
2. Intensity
3. Scan Limit
4. Decode Mode
5. Display Test
На индикаторе все нули. Сегмент G и точка не светятся.
Если выводить потом цифру 8 высвечивается без проблем.
В чем причина провала команды тест?

PS Переключение режимов отображения BCD на свободно программируемые символы и их вывод тоже прохоит успешно.
Среда программирования - баском


Добрый день.
Можете дать свой код на BASCOM и схему. Пытаюсь запустить MAX7219 и матрицу, ничего не получается :( Начинающий.
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: Контроллер индикации MAX7219

Сообщение serg_svd »

Матрица подключается и управляется по-другому.
Я делал для семисегментного индикатора. Но вывод ничем не отличается.
По адресу decode_mode запишите 0 (ноль). Для того, чтобы можно было выводить произвольные данные на матрицу. Кодирование изображения на матрице смотрите в даташите.
Код управления на странице выше.
Процедура вывода будет заключаться в расчете значений H и L и выода их путем вызова процедуры
Call Max7219_out( H , L )
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
axillent
Электрический кот
Сообщения: 1040
Зарегистрирован: Вс сен 25, 2011 19:09:33

Re: Контроллер индикации MAX7219

Сообщение axillent »

не стал новую тему заводить
нужна помощь

сделал платку с индикатором на max7219. взял за основу чужую простую библиотеку для записи 16 битных регистров в max7219
все работает отлично с момента включения питания
но иногда после многих часов работы я обнаруживаю индикатор со всеми сегментами засвеченными при этом программа работает и судя по поведению портов ввода-вывода работает все кроме собственно индикации
у меня настроен сторожевой таймер
с чем это может быть связано?

после сброса питания соответственно все приходит в норму

в голову приходит только одна идея - сбой последовательности записи частей 16-битного слова из-за перезапуска по сторожевому таймеру
перечитал даташит и не нашел способа как гарантировано инициализировать max7219 если мы не знаем было в него записано полное слово или нет
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: Контроллер индикации MAX7219

Сообщение serg_svd »

А для чего сторожевой таймер?
Если он вам необходим в программе, то по вектору его сброса надо заново производить процедуру инициализации 7219
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
axillent
Электрический кот
Сообщения: 1040
Зарегистрирован: Вс сен 25, 2011 19:09:33

Re: Контроллер индикации MAX7219

Сообщение axillent »

Выяснилось что из за помех по питанию, которые я не смог побороть, max меняла состояния регистров, в частности активировался тестовый режим при которои зажигаются все сегменты
Вставил запись во все рабочие регистры в основной цикл
Регистры"сносит" даже когда МК не перезапускается.
Ответить

Вернуться в «Практика»