Контроллер индикации MAX7219
Контроллер индикации MAX7219
В общем накидал схемку в протеусе на 8 7-сегментных индикаторов. Собственно индикатор, MAX и мк.
процес инициализации шел в следующей последовательности
1. shutdown
2. Intensity
3. Scan Limit
4. Decode Mode
5. Display Test
На индикаторе все нули. Сегмент G и точка не светятся.
Если выводить потом цифру 8 высвечивается без проблем.
В чем причина провала команды тест?
PS Переключение режимов отображения BCD на свободно программируемые символы и их вывод тоже прохоит успешно.
Среда программирования - баском
процес инициализации шел в следующей последовательности
1. shutdown
2. Intensity
3. Scan Limit
4. Decode Mode
5. Display Test
На индикаторе все нули. Сегмент G и точка не светятся.
Если выводить потом цифру 8 высвечивается без проблем.
В чем причина провала команды тест?
PS Переключение режимов отображения BCD на свободно программируемые символы и их вывод тоже прохоит успешно.
Среда программирования - баском
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Re: Контроллер индикации MAX7219
Вообще-то без текста программы судить сложно, но вполне возможно, что 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
Re: Контроллер индикации MAX7219
Да я код специально не приводил. Поскольку написан в баскоме.
Адреса и коды брались из даташита. Поэтому я написал только последовательность инициализации. Сдаается мне что тут действительно може протеус быть виноват. Спешно разрабатываю тестовую ПП с индикаторами для проверки вживую.
привел только часть с кодом инициализации.
Адреса и коды брались из даташита. Поэтому я написал только последовательность инициализации. Сдаается мне что тут действительно може протеус быть виноват. Спешно разрабатываю тестовую ПП с индикаторами для проверки вживую.
Код: Выделить всё
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 раз.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Re: Контроллер индикации MAX7219
Вроде, все выглядит логично. Я только не понял назначения инструкции
Call Max7219_out(decode_mode , &B11101110) ' Режим декодирования для дальнейшей работы
т.к. режим декодирования 0хЕЕ не оговорен в ДШ.
Call Max7219_out(decode_mode , &B11101110) ' Режим декодирования для дальнейшей работы
т.к. режим декодирования 0хЕЕ не оговорен в ДШ.
Re: Контроллер индикации MAX7219
Оговорен 
Микра просто прелесть. Она может сама декодировать числа от 0 до 9, а возможен и прямой вывод своего символа. Вот эта строчка у меня и указывает, что 7-5 разряды декодируются цифры, 4 разряд я вывожу что хочу. Оставшиеся три точно также.
Просто изначально я сразу настраивал микру на нужную мне работу. Но в протеусе разряды без установленого бита декодирования BCD при тесте индикатора не засвечивались вообще. Вот мне и пришлось вначале давать команду декодирования на все разряды, потом делать тест, а потом включать нужную мне работу. Это или глюк протеуса, или я не дочитал даташит на микру. Поэтому взялся делать тестовый индикатор и опробовать все в железе
Микра просто прелесть. Она может сама декодировать числа от 0 до 9, а возможен и прямой вывод своего символа. Вот эта строчка у меня и указывает, что 7-5 разряды декодируются цифры, 4 разряд я вывожу что хочу. Оставшиеся три точно также.
Просто изначально я сразу настраивал микру на нужную мне работу. Но в протеусе разряды без установленого бита декодирования BCD при тесте индикатора не засвечивались вообще. Вот мне и пришлось вначале давать команду декодирования на все разряды, потом делать тест, а потом включать нужную мне работу. Это или глюк протеуса, или я не дочитал даташит на микру. Поэтому взялся делать тестовый индикатор и опробовать все в железе
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Re: Контроллер индикации MAX7219
Значит я уже сам подзабыл что к чему. Пару лет назад использовал эти драйверы в своих проектах. На всякий случай вот линки, может пригодится.
http://mcs.uwsuper.edu/sb/Electronics/MAX6950/
http://mcs.uwsuper.edu/sb/Electronics/Vmeter/
Но не в одном из них я не пробовал режим тестирования.
http://mcs.uwsuper.edu/sb/Electronics/MAX6950/
http://mcs.uwsuper.edu/sb/Electronics/Vmeter/
Но не в одном из них я не пробовал режим тестирования.
Re: Контроллер индикации MAX7219
сделал платку с индикатором и подключил к макетке с контроллером ATmega8.
Тест работает адекватно, все сегменты засвечиваются. Как бы похоже на глюк протеуса.
Но! при попытке вывести цифры от 1 до 8 на все сегменты наблюдается пропадание на индикаторе отдельных сегментов. Причем выборочно. 2ка и 3ка без сегмента А, 4ка без сегмента f.... закономерности нет, чтоб грешить на непропай. При этом в протеусе вывод работает без проблем.
Плату всю под микроскопом проглядел, процарапал на всякий случай между дорожками. глюк остался.
ЗЫ. Все заработало. Дефект был в плате. 2 дорожки соседние имели коротыш. причем увидел только подняв микруху с платы и поглядев в микроскоп под ней
Тест работает адекватно, все сегменты засвечиваются. Как бы похоже на глюк протеуса.
Но! при попытке вывести цифры от 1 до 8 на все сегменты наблюдается пропадание на индикаторе отдельных сегментов. Причем выборочно. 2ка и 3ка без сегмента А, 4ка без сегмента f.... закономерности нет, чтоб грешить на непропай. При этом в протеусе вывод работает без проблем.
Плату всю под микроскопом проглядел, процарапал на всякий случай между дорожками. глюк остался.
ЗЫ. Все заработало. Дефект был в плате. 2 дорожки соседние имели коротыш. причем увидел только подняв микруху с платы и поглядев в микроскоп под ней
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Re: Контроллер индикации MAX7219
serg_svd писал(а):В общем накидал схемку в протеусе на 8 7-сегментных индикаторов. Собственно индикатор, MAX и мк.
процес инициализации шел в следующей последовательности
1. shutdown
2. Intensity
3. Scan Limit
4. Decode Mode
5. Display Test
На индикаторе все нули. Сегмент G и точка не светятся.
Если выводить потом цифру 8 высвечивается без проблем.
В чем причина провала команды тест?
PS Переключение режимов отображения BCD на свободно программируемые символы и их вывод тоже прохоит успешно.
Среда программирования - баском
Добрый день.
Можете дать свой код на BASCOM и схему. Пытаюсь запустить MAX7219 и матрицу, ничего не получается
Re: Контроллер индикации MAX7219
Матрица подключается и управляется по-другому.
Я делал для семисегментного индикатора. Но вывод ничем не отличается.
По адресу decode_mode запишите 0 (ноль). Для того, чтобы можно было выводить произвольные данные на матрицу. Кодирование изображения на матрице смотрите в даташите.
Код управления на странице выше.
Процедура вывода будет заключаться в расчете значений H и L и выода их путем вызова процедуры
Call Max7219_out( H , L )
Я делал для семисегментного индикатора. Но вывод ничем не отличается.
По адресу decode_mode запишите 0 (ноль). Для того, чтобы можно было выводить произвольные данные на матрицу. Кодирование изображения на матрице смотрите в даташите.
Код управления на странице выше.
Процедура вывода будет заключаться в расчете значений H и L и выода их путем вызова процедуры
Call Max7219_out( H , L )
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Re: Контроллер индикации MAX7219
не стал новую тему заводить
нужна помощь
сделал платку с индикатором на max7219. взял за основу чужую простую библиотеку для записи 16 битных регистров в max7219
все работает отлично с момента включения питания
но иногда после многих часов работы я обнаруживаю индикатор со всеми сегментами засвеченными при этом программа работает и судя по поведению портов ввода-вывода работает все кроме собственно индикации
у меня настроен сторожевой таймер
с чем это может быть связано?
после сброса питания соответственно все приходит в норму
в голову приходит только одна идея - сбой последовательности записи частей 16-битного слова из-за перезапуска по сторожевому таймеру
перечитал даташит и не нашел способа как гарантировано инициализировать max7219 если мы не знаем было в него записано полное слово или нет
нужна помощь
сделал платку с индикатором на max7219. взял за основу чужую простую библиотеку для записи 16 битных регистров в max7219
все работает отлично с момента включения питания
но иногда после многих часов работы я обнаруживаю индикатор со всеми сегментами засвеченными при этом программа работает и судя по поведению портов ввода-вывода работает все кроме собственно индикации
у меня настроен сторожевой таймер
с чем это может быть связано?
после сброса питания соответственно все приходит в норму
в голову приходит только одна идея - сбой последовательности записи частей 16-битного слова из-за перезапуска по сторожевому таймеру
перечитал даташит и не нашел способа как гарантировано инициализировать max7219 если мы не знаем было в него записано полное слово или нет
Re: Контроллер индикации MAX7219
А для чего сторожевой таймер?
Если он вам необходим в программе, то по вектору его сброса надо заново производить процедуру инициализации 7219
Если он вам необходим в программе, то по вектору его сброса надо заново производить процедуру инициализации 7219
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Re: Контроллер индикации MAX7219
Выяснилось что из за помех по питанию, которые я не смог побороть, max меняла состояния регистров, в частности активировался тестовый режим при которои зажигаются все сегменты
Вставил запись во все рабочие регистры в основной цикл
Регистры"сносит" даже когда МК не перезапускается.
Вставил запись во все рабочие регистры в основной цикл
Регистры"сносит" даже когда МК не перезапускается.