Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Примеры применения в среде Баском » ! Исследование MAX7219 (SPI драйвер 7seg led индикаторов) !


! Исследование MAX7219 (SPI драйвер 7seg led индикаторов) !

Сообщений 1 страница 23 из 23

1

Ссылки по теме:

http://www.gaw.ru/html.cgi/txt/ic/Maxim … 219_21.htm

http://mcucpu.ru/index.php/pdevices/ust … orkmax7219

http://avrproject.ru/publ/kak_podkljuch … /2-1-0-146

Исходники написаны для примера, с избыточным кодом.

32 разряда 7seg led индикаторов через 4xMAX7219 + Attiny85

http://s6.uploads.ru/t/8YbkG.jpg

Симуляция в Протеус (7.10) + Исходник Bascom (2.0.7.1) - скачать

64 разряда 7seg led индикаторов через 8xMAX7219 + Attiny85

http://s6.uploads.ru/t/3H8dk.jpg

Симуляция в Протеус (7.10) + Исходник Bascom (2.0.7.1) - скачать

32 разряда 7seg led индикаторов через 4xMAX7219 + Atmega328P

http://s7.uploads.ru/t/j6tqO.jpg

Симуляция в Протеус (7.10) + Исходник Bascom (2.0.7.1) - скачать

64 разряда 7seg led индикаторов через 8xMAX7219 + Atmega328P

http://s6.uploads.ru/t/nd1TW.jpg

Симуляция в Протеус (7.10) + Исходник Bascom (2.0.7.1) - скачать

Отредактировано sasha_1973 (2013-12-02 05:31:10)

+4

2

Atbanned6A + 2 x 7-seg led + MAX7219

http://s7.uploads.ru/t/f95Zs.jpg http://s7.uploads.ru/t/kG6oc.jpg

Симуляция (Протеус 7.10) + исходники (Bascom 2.0.7.1)  -  скачать

Этот исходник будет считать 2 переменные

'===============================================================================
'*
'*  Автор: Sasha_1973
'*  Дата:  14.01.2014 г.
'*  МК:  ATbanned6A
'*  Тактовая частота МК:  1 MГц
'*
'*  Компилятор: BASCOM-AVR 2.0.7.1
'*  Используемый шрифт в Bascom: Consolas; размер = 14
'*
'*  Программа симулятор: Proteus 7.10 SR0 rus
'*
'*  Кодировка символов:  &B HABCDEFG
'*
'*  Описание: Исследование MAX7219_7221
'*
'===============================================================================
  $map              ' Получаем карту распределения памяти
  $regfile = "m16def.dat"       ' Используемый контроллер
  $crystal = 1000000       ' 1 МГц
'  $crystal = 8000000       ' 8 МГц
  $framesize = 32   'размер области используемой и необходимой для преобразований
  $hwstack = 40     ' Размер аппаратного стека
  $swstack = 16     ' Размер программного стека
'  $baud = 4800      '4800     '9600     '19200     '38400
'===============================================================================

'--------------------------  Настройка шины SPI  -------------------------------

'--------------------------  Настройка шины SPI  -------------------------------

  Load_max7219 Alias Porta.4 : Config Load_max7219 = Output

  Config Spi = Soft , Dout = Porta.5 , Ss = None , Clock = Porta.6 , Mode = 1
  Spiinit

' Настройка прерывания TIMER0. Временные интервалы, 7-seg LED индикация, клавиатура

'  Config Timer0 = Timer , Prescale = 1024 , Clear Timer = 0       ' Конфигурируем таймер индикации    Prescale = 1|8|64|256|1024
'  On Timer0 Обработка_прерывания_timer0       'Nosave       ' Ссылка на подпрограмму обработчика прерывания TIMER0
'  Stop Timer0

'----------------------  Используемые константы  -------------------------------

'----------------------  Используемые переменные  ------------------------------

  Dim Данные As Byte
  Dim Регистр As Byte
  Dim Знакоместо As Byte
  Dim Цикл_разряды As Byte
  Dim Флаг_точка(8) As Byte
  Dim Цикл_индикаторы As Byte
  Dim Цикл_знакоместо As Byte
  Dim Temp_буфер_7seg As Byte
  Dim Количество_символов As Byte
  Dim Выводимая_цифра_led_byte As Byte       ' переменная, для загрузки цифр в порт
  Dim Буфер_знакоместа_byte(4) As Byte       ' Буфер индикации(копия сегментов) для каждого знакоместа
  Dim Флаг_перекодировка_символов As Byte
  Dim Буфер_знакоместа_string As String * 1
  Dim Буфер_led_индикации_string As String * 4       ' Выводимая текстовая строка

  Dim Разряд(2) As Byte
  Dim Переменная(2) As Word

  Dim 1_переменная_str As String * 5
  Dim 2_переменная_str As String * 5

  Dim Нет_операции(2) As Byte
  Нет_операции(1) = 0 : Нет_операции(2) = 0

'------------------  Запуск и предварительные настройки  -----------------------

'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Gosub Настройка_max7219

Разряд(2) = 4

Переменная(1) = 0
Переменная(2) = 10000

'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

'--------------  Разрешаем работу необходимых прерываний  ----------------------
'  Enable Timer0     ' Прерывание после переполнения таймера
'  Start Timer0      ' Запускаем таймер, до этого момента он был выключен
'------------  Разрешаем работу всех включенных прерываний  --------------------
'  Enable Interrupts ' Разрешаем работу прерываний
'===============================================================================

'                   Г Л А В Н Ы Й         Ц И К Л

'===============================================================================
  Главный_цикл:

     Gosub Считаем_переменные

     For Цикл_индикаторы = 1 To 2

         Select Case Цикл_индикаторы
             Case 1 : Буфер_led_индикации_string = 2_переменная_str
             Case 2 : Буфер_led_индикации_string = 1_переменная_str
         End Select

         Gosub Перекодировка_символов

         For Цикл_разряды = 1 To 8
             On Цикл_индикаторы Gosub Запись_0 , Запись_1 , Запись_2
         Next Цикл_разряды

     Next Цикл_индикаторы

   Waitms 250
  Goto Главный_цикл
End
'===============================================================================

'                        П о д п р о г р а м м ы

'===============================================================================

'===============================================================================
  Настройка_max7219:
'-------------------------------------------------------------------------------
' 'Режим Shutdown (0-дисплей выключен, 1-нормальная работа)
    Регистр = 12
    Данные = 1
    Gosub Запись_0

' 'Выбор режим управления сегментами индикатора
    Регистр = 9
    Данные = 0      'нет декодирования
'   Данные = 255     'декодируются все разряды
    Gosub Запись_0

' 'Уровень свечения сегментов (0-минимум, 15-максимум)
    Регистр = 10
    Данные = 15     'задаем максимум
    Gosub Запись_0

' 'Число используемых разрядов (счет от 0)
    Регистр = 11
    Данные = 7      'выбираем все разряды
    Gosub Запись_0

' 'Тестовый режим (0-выключен, 1-включен)
    Регистр = 15
    Данные = 1
    Gosub Запись_0

    Wait 5

' 'Тестовый режим (0-выключен, 1-включен)
    Регистр = 15
    Данные = 0
    Gosub Запись_0

'-------------------------------
  Return
'===============================
  Запись_0:
'-------------------------------
    Load_max7219 = 0
    Spiout Нет_операции(1) , 2
    Spiout Регистр , 1
    Spiout Данные , 1
    Load_max7219 = 1
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Запись_1:
'-------------------------------------------------------------------------------
    Incr Разряд(1) : If Разряд(1) > 4 Then Разряд(1) = 1
    Temp_буфер_7seg = Буфер_знакоместа_byte(разряд(1))
    Регистр = Разряд(1)
    Load_max7219 = 0
'    Spiout Нет_операции(1) , 2
    Spiout Регистр , 1
    Spiout Temp_буфер_7seg , 1
    Load_max7219 = 1
'-------------------------------
  Return
'===============================
  Запись_2:
'-------------------------------------------------------------------------------
    Incr Разряд(2) : If Разряд(2) > 4 Then Разряд(2) = 1
    Temp_буфер_7seg = Буфер_знакоместа_byte(разряд(2))
    Регистр = Разряд(2)
    Регистр = Регистр + 4
    Load_max7219 = 0
'    Spiout Нет_операции(1) , 2
    Spiout Регистр , 1
    Spiout Temp_буфер_7seg , 1
    Load_max7219 = 1
'-------------------------------
  Return
'===============================================================================

'===============================================================================
  Считаем_переменные:
'-------------------------------------------------------------------------------
    Incr Переменная(1) : If Переменная(1) > 9999 Then Переменная(1) = 0

    1_переменная_str = Str(переменная(1))
    1_переменная_str = Format(1_переменная_str , "   0")

    Decr Переменная(2) : If Переменная(2) = 0 Then Переменная(2) = 9999

    2_переменная_str = Str(переменная(2))
    2_переменная_str = Format(2_переменная_str , "   0")
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Перекодировка_символов:
'-------------------------------------------------------------------------------
nop
      Знакоместо = 1

      Количество_символов = Len(буфер_led_индикации_string)

      For Цикл_знакоместо = 1 To Количество_символов
          Буфер_знакоместа_string = Mid(буфер_led_индикации_string , Цикл_знакоместо , 1)
          Выводимая_цифра_led_byte = Asc(буфер_знакоместа_string)
          If Выводимая_цифра_led_byte = 46 Then       ' 46 - это символ точка "." в кодировке ASCII
            '  Флаг_точка(знакоместо -1) = 1       ' Добавляем точку в предыдущем знакоместе
              Буфер_знакоместа_byte(знакоместо -1) = Буфер_знакоместа_byte(знакоместо -1) Xor &H80
            Else

              Gosub Перекодировка_символов_1       ' Если не точка ".", идем на кодировку символов

              Incr Знакоместо

          End If
      Next Цикл_знакоместо

      Флаг_перекодировка_символов = 1
nop
'-------------------------------
  Return
'===============================
    Перекодировка_символов_1:
'-------------------------------
nop
        If Буфер_знакоместа_string = "-" Then       ' Выводим знак "-" минус
            Буфер_знакоместа_byte(знакоместо) = &H01       ' Выводим знак "-" минус
            !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = "°" Then       ' Выводим значек градуса Сельсия
                  Буфер_знакоместа_byte(знакоместо) = &H63       ' Выводим значек градуса Сельсия "°"
                  !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = " " Then       ' Выводим "пустое место"
                  Буфер_знакоместа_byte(знакоместо) = &H00       ' Выводим "пустое место"
                  !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = "E" Then       ' Выводим символ "E"
                  Буфер_знакоместа_byte(знакоместо) = &H4F       ' Выводим символ "E"
                  !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = "r" Then       ' Выводим символ "r"
                  Буфер_знакоместа_byte(знакоместо) = &H05       ' Выводим символ "r"
                  !rjmp Выход_перекодировка_символов
'        Elseif Буфер_знакоместа_string = "." Then       ' Выводим символ
'                  Буфер_знакоместа_byte(цикл_знакоместо) = &H       ' Выводим символ
'                  !rjmp Выход_перекодировка_символов
        Else
            Выводимая_цифра_led_byte = Выводимая_цифра_led_byte - 48       ' &H30       ' (DEC) 48      преобразовать строковое значение символа ASCII в байтовое значение символа    ' Время обработки команды = 7 тактов
            Буфер_знакоместа_byte(знакоместо) = Lookup(выводимая_цифра_led_byte , Цифры_ok)
        End If
    Выход_перекодировка_символов:
nop
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Сброс_флагов:
'-------------------------------------------------------------------------------

'    Флаг_точка(1) = 0 : Флаг_точка(2) = 0 : Флаг_точка(3) = 0 : Флаг_точка(4) = 0
'    Флаг_мигание(1) = 0 : Флаг_мигание(2) = 0 : Флаг_мигание(3) = 0 : Флаг_мигание(4) = 0
'    Флаг_гашение(1) = 0 : Флаг_гашение(2) = 0 : Флаг_гашение(3) = 0 : Флаг_гашение(4) = 0

'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Цифры_ok:
'===============================================================================
      Data &H7E     ' 0   "0"
      Data &H30     ' 1   "1"
      Data &H6D     ' 2   "2"
      Data &H79     ' 3   "3"
      Data &H33     ' 4   "4"
      Data &H5B     ' 5   "5"
      Data &H5F     ' 6   "6"
      Data &H70     ' 7   "7"
      Data &H7F     ' 8   "8"
      Data &H7B     ' 9   "9"
      Data &HBF     ' 10  "-"
      Data &H00     ' 11  "Пустое место"
      Data &H63     ' 12  "Значек градуса"
'===============================================================================

Отредактировано sasha_1973 (2014-01-14 23:21:35)

+3

3

Что-то не понял, как вывести буквы P, H, C. Давно хочу собрать такие часы:
http://s7.uploads.ru/t/ypF1X.jpg

0

4

max написал(а):

Что-то не понял, как вывести буквы P, H, C. Давно хочу собрать такие часы

Замени соответствующий фрагмент в исходнике "Test 64 seg led & 8xMAX7219 + Atmega328P.bas" на нижеприведённый.

Фрагмент исходника

'===============================================================================
    Перекодировка_символов_1:
'-------------------------------------------------------------------------------

        If Буфер_знакоместа_string = "-" Then       ' Выводим знак "-" минус
            Буфер_знакоместа_byte(знакоместо) = &H01       ' Выводим знак "-" минус
            !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = "°" Then       ' Выводим значек градуса Сельсия
                  Буфер_знакоместа_byte(знакоместо) = &H63       ' Выводим значек градуса Сельсия "°"
                  !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = " " Then       ' Выводим "пустое место"
                  Буфер_знакоместа_byte(знакоместо) = &H00       ' Выводим "пустое место"
                  !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = "E" Then       ' Выводим символ "E"
                  Буфер_знакоместа_byte(знакоместо) = &H4F       ' Выводим символ "E"
                  !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = "r" Then       ' Выводим символ "r"
                  Буфер_знакоместа_byte(знакоместо) = &H05       ' Выводим символ "r"
                  !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = "P" Then       ' Выводим символ "P"
                  Буфер_знакоместа_byte(знакоместо) = &H67       ' Выводим символ "P"
                  !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = "H" Then       ' Выводим символ "H"
                  Буфер_знакоместа_byte(знакоместо) = &H37       ' Выводим символ "H"
                  !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = "C" Then       ' Выводим символ "C"
                  Буфер_знакоместа_byte(знакоместо) = &H4E       ' Выводим символ "C"
                  !rjmp Выход_перекодировка_символов
'        Elseif Буфер_знакоместа_string = "" Then       ' Выводим символ ""
'                  Буфер_знакоместа_byte(знакоместо) = &H       ' Выводим символ
'                  !rjmp Выход_перекодировка_символов
        Else
            Выводимая_цифра_led_byte = Выводимая_цифра_led_byte - 48       ' &H30       ' (DEC) 48      преобразовать строковое значение символа ASCII в байтовое значение символа    ' Время обработки команды = 7 тактов
            Буфер_знакоместа_byte(знакоместо) = Lookup(выводимая_цифра_led_byte , Цифры_ok)
        End If
    Выход_перекодировка_символов:

'-------------------------------------------------------------------------------
  Return
'===============================================================================

Отредактировано sasha_1973 (2014-01-14 20:52:53)

0

5

Упрощённый вариант, выводится 4 четырёхразрядные переменные

Исходник

'===============================================================================
'*
'*  Автор: Sasha_1973
'*  Дата:  15.05.2014 г.
'*  МК:  ATmega328P
'*  Тактовая частота МК:  1 MГц
'*
'*  Компилятор: BASCOM-AVR 2.0.7.1
'*  Используемый шрифт в Bascom: Consolas; размер = 14
'*
'*  Программа симулятор: Proteus 7.10 SR0 rus
'*
'*  Кодировка символов:  &B HABCDEFG
'*
'*  Описание: Исследование MAX7219_7221
'*
'===============================================================================
  $map              ' Получаем карту распределения памяти
  $regfile = "m328pdef.dat"       ' Используемый контроллер
  $crystal = 1000000       ' 1 МГц
'  $crystal = 8000000       ' 8 МГц
  $framesize = 32   'размер области используемой и необходимой для преобразований
  $hwstack = 40     ' Размер аппаратного стека
  $swstack = 16     ' Размер программного стека
'  $baud = 4800      '4800     '9600     '19200     '38400
'===============================================================================

'--------------------------  Настройка шины SPI  -------------------------------

  Load_max7219 Alias Portb.0 : Config Load_max7219 = Output : Load_max7219 = 1
'  Clk_max7219 Alias Portd.7 : Config Clk_max7219 = Output
'  Din_max7219 Alias Portb.0 : Config Din_max7219 = Output
' '''CONFIG SPI = HARD, INTERRUPT=ON|OFF, DATA ORDER = LSB|MSB , MASTER = YES|NO , POLARITY = HIGH|LOW , PHASE = 0|1, CLOCKRATE = 4|16|64|128 , NOSS=1|0 , SPIIN=value
  Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 4 , Noss = 1
  Spiinit

' Настройка прерывания TIMER0. Временные интервалы, 7-seg LED индикация, клавиатура

  Config Timer0 = Timer , Prescale = 1024 , Clear Timer = 0       ' Конфигурируем таймер индикации    Prescale = 1|8|64|256|1024
  On Timer0 Обработка_прерывания_timer0       'Nosave       ' Ссылка на подпрограмму обработчика прерывания TIMER0
  Stop Timer0

'----------------------  Используемые константы  -------------------------------

  Const Const_режим_работы = 9       ' Выбор режим управления сегментами индикатора
  Const Const_яркость_led = 10       ' Уровень свечения сегментов (0-минимум, 15-максимум)
  Const Const_режим_shutdown = 12       ' Режим Shutdown (0-дисплей выключен, 1-нормальная работа)
  Const Const_тестовый_режим = 15       ' Тестовый режим (0-выключен, 1-включен)
  Const Const_количество_разрядов = 11       ' Число используемых разрядов (счет от 0)

'----------------------  Используемые подпрограммы  ----------------------------

  Declare Sub Запись_max7219(byval Регистр As Byte , Byval Данные As Byte , Byval Чип As Byte)

'----------------------  Используемые переменные  ------------------------------

  Dim Данные As Byte
  Dim Регистр As Byte
  Dim Разряд(4) As Byte
  Dim Знакоместо As Byte
  Dim Цикл_разряды As Byte
  Dim Temp_регистр As Byte
  Dim Флаг_точка(4) As Byte
  Dim Переменная(4) As Word
  Dim Цикл_индикаторы As Byte
  Dim Цикл_знакоместо As Byte
  Dim Temp_буфер_7seg As Byte
  Dim Количество_символов As Byte
  Dim Выводимая_цифра_led_byte As Byte       ' переменная, для загрузки цифр в порт
  Dim Буфер_знакоместа_byte(4) As Byte       ' Буфер индикации(копия сегментов) для каждого знакоместа
  Dim Флаг_перекодировка_символов As Byte
  Dim Буфер_знакоместа_string As String * 1
  Dim Буфер_led_индикации_string As String * 4       ' Выводимая текстовая строка

  Dim 1_переменная_str As String * 5
  Dim 2_переменная_str As String * 5
  Dim 3_переменная_str As String * 5
  Dim 4_переменная_str As String * 5

'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
'   З А П У С К     И     П Р Е Д В А Р И Т Е ЛЬ Н Ы Е     Н А С Т Р О Й К И
'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Переменная(1) = 0
Переменная(2) = 10000
Переменная(3) = 1111
Переменная(4) = 5555

'----------------  Предварительные настройки MAX7219_7221  ---------------------

    Call Запись_max7219(const_режим_shutdown , 1 , 1)       ' Режим Shutdown (0-дисплей выключен, 1-нормальная работа)
    Call Запись_max7219(const_режим_shutdown , 1 , 2)       ' Режим Shutdown (0-дисплей выключен, 1-нормальная работа)

    Call Запись_max7219(const_режим_работы , 0 , 1)       ' Выбор режим управления сегментами индикатора, декодирование аппаратное или программное
    Call Запись_max7219(const_режим_работы , 0 , 2)       ' Выбор режим управления сегментами индикатора, декодирование аппаратное или программное

    Call Запись_max7219(const_яркость_led , 15 , 1)       ' Уровень свечения сегментов (0-минимум, 15-максимум)
    Call Запись_max7219(const_яркость_led , 15 , 2)       ' Уровень свечения сегментов (0-минимум, 15-максимум)

    Call Запись_max7219(const_количество_разрядов , 7 , 1)       ' Число используемых разрядов (счет от 0)
    Call Запись_max7219(const_количество_разрядов , 7 , 2)       ' Число используемых разрядов (счет от 0)

    Call Запись_max7219(const_тестовый_режим , 0 , 1)       ' Тестовый режим (0-выключен, 1-включен)
    Call Запись_max7219(const_тестовый_режим , 0 , 2)       ' Тестовый режим (0-выключен, 1-включен)

'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

'--------------  Разрешаем работу необходимых прерываний  ----------------------
  Enable Timer0     ' Прерывание после переполнения таймера
  Start Timer0      ' Запускаем таймер, до этого момента он был выключен
'------------  Разрешаем работу всех включенных прерываний  --------------------
  Enable Interrupts ' Разрешаем работу прерываний
'===============================================================================
'                   Г Л А В Н Ы Й         Ц И К Л
'===============================================================================
  Главный_цикл:

     Gosub Считаем_переменные

     Gosub Считаем_переменные_str

     For Цикл_индикаторы = 1 To 4

         Select Case Цикл_индикаторы
             Case 1 : Буфер_led_индикации_string = Str(переменная(1))       '1_переменная_str
             Case 2 : Буфер_led_индикации_string = Str(переменная(2))       '2_переменная_str
             Case 3 : Буфер_led_индикации_string = 3_переменная_str
             Case 4 : Буфер_led_индикации_string = 4_переменная_str
         End Select

         Gosub Перекодировка_символов

         For Цикл_разряды = 1 To 4
             Select Case Цикл_индикаторы
                 Case 1 :
                          Incr Разряд(1) : If Разряд(1) > 4 Then Разряд(1) = 1
                          Call Запись_max7219(разряд(1) , Буфер_знакоместа_byte(разряд(1)) , 1)
                 Case 2 :
                          Incr Разряд(2) : If Разряд(2) > 4 Then Разряд(2) = 1
                          Temp_регистр = Разряд(2) + 4
                          Call Запись_max7219(temp_регистр , Буфер_знакоместа_byte(разряд(2)) , 1)
                 Case 3 :
                          Incr Разряд(3) : If Разряд(3) > 4 Then Разряд(3) = 1
                          Call Запись_max7219(разряд(3) , Буфер_знакоместа_byte(разряд(3)) , 2)
                 Case 4 :
                          Incr Разряд(4) : If Разряд(4) > 4 Then Разряд(4) = 1
                          Temp_регистр = Разряд(4) + 4
                          Call Запись_max7219(temp_регистр , Буфер_знакоместа_byte(разряд(4)) , 2)
             End Select
         Next Цикл_разряды

     Next Цикл_индикаторы

   Waitms 100
  Goto Главный_цикл
End
'===============================================================================
'           И С П О Л Ь З У Е М Ы Е     П О Д П Р О Г Р А М М Ы
'===============================================================================

'===============================================================================
  Считаем_переменные:
'-------------------------------------------------------------------------------
    Incr Переменная(1) : If Переменная(1) > 9999 Then Переменная(1) = 0
    Decr Переменная(2) : If Переменная(2) = 0 Then Переменная(2) = 9999
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Считаем_переменные_str:
'-------------------------------------------------------------------------------
    3_переменная_str = "2013"
    4_переменная_str = "-12.4"
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Обработка_прерывания_timer0:
'-------------------------------------------------------------------------------
    nop
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Перекодировка_символов:
'-------------------------------------------------------------------------------
nop
      Знакоместо = 1

      ''' Gosub Сброс_флагов

      Количество_символов = Len(буфер_led_индикации_string)

      For Цикл_знакоместо = 1 To Количество_символов
          Буфер_знакоместа_string = Mid(буфер_led_индикации_string , Цикл_знакоместо , 1)
          Выводимая_цифра_led_byte = Asc(буфер_знакоместа_string)
          If Выводимая_цифра_led_byte = 46 Then       ' 46 - это символ точка "." в кодировке ASCII
            '  Флаг_точка(знакоместо -1) = 1       ' Добавляем точку в предыдущем знакоместе
              Буфер_знакоместа_byte(знакоместо -1) = Буфер_знакоместа_byte(знакоместо -1) Xor &H80
            Else

              Gosub Перекодировка_символов_1       ' Если не точка ".", идем на кодировку символов

              Incr Знакоместо

          End If
      Next Цикл_знакоместо

      Флаг_перекодировка_символов = 1
nop
'-------------------------------
  Return
'===============================
    Перекодировка_символов_1:
'-------------------------------
nop
        If Буфер_знакоместа_string = "-" Then       ' Выводим знак "-" минус
            Буфер_знакоместа_byte(знакоместо) = &H01       ' Выводим знак "-" минус
            !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = "°" Then       ' Выводим значек градуса Сельсия
                  Буфер_знакоместа_byte(знакоместо) = &H63       ' Выводим значек градуса Сельсия "°"
                  !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = " " Then       ' Выводим "пустое место"
                  Буфер_знакоместа_byte(знакоместо) = &H00       ' Выводим "пустое место"
                  !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = "E" Then       ' Выводим символ "E"
                  Буфер_знакоместа_byte(знакоместо) = &H4F       ' Выводим символ "E"
                  !rjmp Выход_перекодировка_символов
        Elseif Буфер_знакоместа_string = "r" Then       ' Выводим символ "r"
                  Буфер_знакоместа_byte(знакоместо) = &H05       ' Выводим символ "r"
                  !rjmp Выход_перекодировка_символов
'        Elseif Буфер_знакоместа_string = "." Then       ' Выводим символ
'                  Буфер_знакоместа_byte(цикл_знакоместо) = &H       ' Выводим символ
'                  !rjmp Выход_перекодировка_символов
        Else
            Выводимая_цифра_led_byte = Выводимая_цифра_led_byte - 48       ' &H30       ' (DEC) 48      преобразовать строковое значение символа ASCII в байтовое значение символа    ' Время обработки команды = 7 тактов
            Буфер_знакоместа_byte(знакоместо) = Lookup(выводимая_цифра_led_byte , Цифры_ok)
        End If
    Выход_перекодировка_символов:
nop
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Sub Запись_max7219(byval Регистр As Byte , Byval Данные As Byte , Byval Чип As Byte)
'-------------------------------------------------------------------------------
  Local Пропуск_операции As Byte : Пропуск_операции = 0
'-------------------------------------------------------------------------------
    Load_max7219 = 0

    If Чип = 1 Then
        Spiout Пропуск_операции , 2
        Spiout Регистр , 1
        Spiout Данные , 1
      Else
        Spiout Регистр , 1
        Spiout Данные , 1
        Spiout Пропуск_операции , 2
    End If

    Load_max7219 = 1
'-------------------------------------------------------------------------------
  End Sub
'===============================================================================

'===============================================================================
  Цифры_ok:
'===============================================================================
      Data &H7E     ' 0   "0"
      Data &H30     ' 1   "1"
      Data &H6D     ' 2   "2"
      Data &H79     ' 3   "3"
      Data &H33     ' 4   "4"
      Data &H5B     ' 5   "5"
      Data &H5F     ' 6   "6"
      Data &H70     ' 7   "7"
      Data &H7F     ' 8   "8"
      Data &H7B     ' 9   "9"
      Data &HBF     ' 10  "-"
      Data &H00     ' 11  "Пустое место"
      Data &H63     ' 12  "Значек градуса"
'===============================================================================

Симуляция + исходник + программа-конвертер -  скачать

http://se.uploads.ru/t/8pKQV.jpg

0

6

Atmega328P + 64 seg led через 8 x MAX7219 + Ds1307 + 4 х Ds18b20

Симуляция (Протеус 7.10) + исходники (Bascom 2.0.7.1)  -  скачать

http://sa.uploads.ru/t/Egd07.jpg

0

7

Обновлённая версия драйвера для работы с MAX7219 и MAX7221  -  скачать

Выводятся все символы, которые можно вывести на семисегментный индикатор

Количество чипов и соответственно индикаторов устанавливается в исходнике одной константой, по умолчанию - 10 чипов, соответственно 40 разрядов семесегментников.

Как работать с драйвером:

'                         +---------------- Строковая переменная или строковое значение. Значение больше 4 символов (без учёта точек) обрезается
'                          |       +--------- На какой чип MAX7219 передать. Счёт начинается с 1
'                          |       |    +--- 1- выводится на 1;2;3;4 разряды, 2 - выводится на 5;6;7;8 разряды
'                         /|\      |    |
' Print_max7219 "Abcd" , 1 , 2

'                        +------------- Чип, который будем регулировать
'                         |     +------- Значение яркости 0...15
'                         |     |
' Bright_max7219 2 , 15

'                         +------------- Чип, который будем включать / выключать
'                          |     +------- 0 - выключен; 1 - включен  (значение в регистрах не меняется, индикатор просто гаснет)
'                          |     |
' On_off_max7219 2 , 15

0

8

Английский вариант исходника

$map       ' Obtain a map of the distribution of memory
  $regfile = "m328pdef.dat"       ' Used controller
  $crystal = 16000000
  $framesize = 64       ' The size of the area used and needed to convert
  $hwstack = 64       ' The size of the hardware stack
  $swstack = 64       ' The size of the software stack
  $baud = 38400
  'Ucsr0a.1 = 1       ' Baud = Baud * 2

'===============================================================================
'                         CONFIG    SPI
'===============================================================================
  Const Const_realization_spi = 0       ' If "0" - implementation of hardware (hardware terminals), if "1" - implementation of software (any conclusions)

  #if Const_realization_spi = 0
      Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 4 , Noss = 0
  #endif

  #if Const_realization_spi = 1
      Config Spi = Soft , Din = Pinb.4 , Dout = Portb.3 , Clock = Portb.5 , Ss = None
  #endif

  Cs_max7219 Alias Portb.0 : Config Cs_max7219 = Output

  Spsr.0 = 1       ' F_spi = F_osc / 2; Double Speed (CK/2) Master SPI Mode

  Spiinit
  Waitms 50

'===============================================================================
'                            CONSTANTS
'===============================================================================

  Const Const_amount_max7219 = 10       ' Количество чипов MAX7219

  Const Const_decode_mode = &H09       ' Выбор режим управления сегментами индикатора
  Const Const_intensity = &H0A       ' Уровень яркости свечения сегментов (0-минимум, 15-максимум)
  Const Const_scan_limit = &H0B       ' Число используемых разрядов (счет от 0)
  Const Const_shutdown = &H0C       ' Режим Shutdown (0-дисплей выключен, 1-нормальная работа)
  Const Const_display_test = &H0F       ' Тестовый режим (0-выключен, 1-включен)

'===============================================================================
'                             VARIABLE
'===============================================================================
  Dim Reg_max7219 As Byte
  Dim Led_max7219 As Byte
  Dim Data_max7219 As Byte
  Dim Chip_max7219 As Byte
  Dim Count_max7219 As Byte
  Dim Buffer_led_max7219(8) As Byte

  Dim Symbol_byte As Byte
  Dim Count_digit_1 As Byte , Count_digit_2 As Byte , Len_string As Byte , Symbolic_place As Byte
  Dim Str_max7219 As String * 10 , Symbol_str As String * 1

'===============================================================================
'                           SUBROUTINES
'===============================================================================
  Declare Sub Init_max7219()
  Declare Sub Write_data_max7219()
  Declare Sub Write_register_max7219()
  Declare Sub Skip_chip(byval Copy_skip_chip_max7219 As Byte)
  Declare Sub On_off_max7219(byval Copy_chip_max7219 As Byte , Byval On_off_max7219 As Byte)
  Declare Sub Bright_max7219(byval Copy_chip_max7219 As Byte , Byval Bright_max7219 As Byte)
  Declare Sub Write_data_reg_max7219(byval Copy_reg_max7219 As Byte , Byval Copy_data_max7219 As Byte , Byval Copy_chip_max7219 As Byte)
  Declare Sub Print_max7219(byval Copy_str_max7219 As String * 10 , Byval Copy_chip_max7219 As Byte , Byval Copy_led_max7219 As Byte)

  Init_max7219       ' Initialization MAX7219

'===============================================================================
'                     HOW TO USE THE DRIVER
'===============================================================================

'                  +------------- A string variable or a string value. A value greater than 4 characters (without dots) is cut
'                  |     +------- On a MAX7219 chip pass. The offset is 1
'                  |     |   +--- 1 - output 1; 2; 3; 4 bits, 2 - appears on the 5, 6, 7, 8 bits
'                 /|\    |   |
' Print_max7219 "Abcd" , 1 , 2

'------------------  Variables for the test output  ----------------------------
  Dim Flag As Byte

  Dim A As Word : A = 0
  Dim B As Word : B = 10000

  Dim Count As Byte

  Dim Buffer_led_max7219_str As String * 10
  Dim 1_buffer_led_max7219_str As String * 10
  Dim 2_buffer_led_max7219_str As String * 10

'===============================================================================

  Main:

'===============================================================================

      Incr A
      Buffer_led_max7219_str = Str(a)
      Buffer_led_max7219_str = Format(buffer_led_max7219_str , "   0")
      Print_max7219 Buffer_led_max7219_str , 2 , 1

      Decr B
      Buffer_led_max7219_str = Str(b)
      Buffer_led_max7219_str = Format(buffer_led_max7219_str , "   0")
      Print_max7219 Buffer_led_max7219_str , 2 , 2

      Waitms 400

'===============================================================================
  Goto Main
End
'===============================================================================

'===============================================================================
'                     HOW TO USE THE DRIVER
'===============================================================================

'                  +------------- A string variable or a string value. A value greater than 4 characters (without dots) is cut
'                  |     +------- On a MAX7219 chip pass. The offset is 1
'                  |     |   +--- 1 - output 1; 2; 3; 4 bits, 2 - appears on the 5, 6, 7, 8 bits
'                 /|\    |   |
' Print_max7219 "Abcd" , 1 , 2

'===============================================================================
  Sub Print_max7219(byval Copy_str_max7219 As String * 10 , Byval Copy_chip_max7219 As Byte , Byval Copy_led_max7219 As Byte)
'-------------------------------------------------------------------------------

    Str_max7219 = Copy_str_max7219       ' Taking the output variable

    If Copy_led_max7219 = 1 Then       ' Exhibiting counter depending on the output quartet of numbers
        Symbolic_place = 0
      Else
        Symbolic_place = 4
    End If

    Len_string = Len(str_max7219)       ' Learn the length of the string variable

    If Len_string > 4 Then       ' Prune unnecessary
        Len_string = 5
    End If       ' If Len_string > 4 Then

    For Count_digit_1 = 1 To Len_string       ' Pour into a string variable codes for 7-seg led indicator

        Symbolic_place = Symbolic_place + 1       ' Array of bytes read

        Symbol_str = Mid(str_max7219 , Count_digit_1 , 1)       ' Taking the variable of one character

        Symbol_byte = Asc(symbol_str)       ' Obtain the character code in ASCII

        If Symbol_byte = 46 Then       ' If the point ".", Adding points in the previous discharge
            Symbolic_place = Symbolic_place - 1       ' Derive "symbol" point "" in !!! previous discharge !!!
            Buffer_led_max7219(symbolic_place) = Buffer_led_max7219(symbolic_place) Xor &B_1000_0000       ' Derive "symbol" point "" in !!! previous discharge !!!
        Elseif Symbol_byte = 176 Then       ' If the symbol "°", icon degree Celso
            Buffer_led_max7219(symbolic_place) = &H63       ' Derive the symbol "°", icon Celso degrees for indicators with OK
          Else       ' Everything else
            Symbol_byte = Symbol_byte - 32
            Buffer_led_max7219(symbolic_place) = Lookup(symbol_byte , Coding_7seg_led_max7219_ok)
        End If

    Next Count_digit_1       ' Loop through all the characters

    If Copy_led_max7219 = 1 Then
        For Count_digit_2 = 1 To 4       ' Throws in the MAX7219
            Write_data_reg_max7219 Count_digit_2 , Buffer_led_max7219(count_digit_2) , Copy_chip_max7219
        Next Count_digit_2
      Else
        For Count_digit_2 = 5 To 8       ' Throws in the MAX7219
            Write_data_reg_max7219 Count_digit_2 , Buffer_led_max7219(count_digit_2) , Copy_chip_max7219
        Next Count_digit_2
    End If       ' If Copy_led_max7219 = 1 Then

'-------------------------------------------------------------------------------
  End Sub
'===============================================================================

'===============================================================================
  Sub On_off_max7219(byval Copy_chip_max7219 As Byte , Byval On_off_max7219 As Byte)
'-------------------------------------------------------------------------------
    Write_data_reg_max7219 Const_shutdown , On_off_max7219 , Copy_chip_max7219
'-------------------------------------------------------------------------------
  End Sub
'===============================================================================

'===============================================================================
  Sub Bright_max7219(byval Copy_chip_max7219 As Byte , Byval Bright_max7219 As Byte)
'-------------------------------------------------------------------------------
    Write_data_reg_max7219 Const_intensity , Bright_max7219 , Copy_chip_max7219
'-------------------------------------------------------------------------------
  End Sub
'===============================================================================

'===============================================================================
  Sub Write_data_reg_max7219(byval Copy_reg_max7219 As Byte , Byval Copy_data_max7219 As Byte , Byval Copy_chip_max7219 As Byte)
'-------------------------------------------------------------------------------
    Local Skip_chip_max7219 As Byte , Temp_skip_chip_max7219 As Byte

    Skip_chip_max7219 = Copy_chip_max7219 - 1       ' For transfer to the format of understanding MAX7219_7221

    Cs_max7219 = 0
    Spiout Copy_reg_max7219 , 1
    Spiout Copy_data_max7219 , 1

    If Skip_chip_max7219 > 0 Then
        Temp_skip_chip_max7219 = 0       ' You need to pass two zero bytes (16 bits of zeros)
        Skip_chip_max7219 = Skip_chip_max7219 * 2       ' These skip the chip is 2 bytes
        Spiout Temp_skip_chip_max7219 , Skip_chip_max7219
    End If

    Cs_max7219 = 1
'-------------------------------------------------------------------------------
  End Sub
'===============================================================================

'===============================================================================
  Sub Init_max7219()       ' Presets MAX7219_7221
'-------------------------------------------------------------------------------
    For Count_max7219 = 1 To Const_amount_max7219
        Write_data_reg_max7219 Const_shutdown , 1 , Count_max7219       ' Mode Shutdown (0 screen is turned off, 1-normal)
        Write_data_reg_max7219 Const_decode_mode , 0 , Count_max7219       ' Selecting the operating mode indicator segments, decoding hardware or software
        Write_data_reg_max7219 Const_intensity , 15 , Count_max7219       ' The level of luminescence segments (minimum 0, maximum 15)
        Write_data_reg_max7219 Const_scan_limit , 7 , Count_max7219       ' The number of bits used (score of 0)
        Write_data_reg_max7219 Const_display_test , 0 , Count_max7219       ' Test mode (0-off, 1-on)
    Next Count_max7219
'-------------------------------------------------------------------------------
  End Sub
'===============================================================================

'===============================================================================
  Coding_7seg_led_max7219_ok:
'-------------------------------------------------------------------------------
    $asm
     .db &H00       ' 32 - "space"
     .db &H00       ' 33 - "!"
     .db &H00       ' 34 - "top quotes"
     .db &H00       ' 35 - "#"
     .db &H00       ' 36 - "$"
     .db &H00       ' 37 - "%"
     .db &H00       ' 38 - "&"
     .db &H00       ' 39 - "'"
     .db &H00       ' 40 - "("
     .db &H00       ' 41 - ")"
     .db &H00       ' 42 - "*"
     .db &H00       ' 43 - "+"
     .db &H00       ' 44 - ","
     .db &H01       ' 45 - "-"
     .db &H80       ' 46 - "."
     .db &H00       ' 47 - "/"
     .db &H7E       ' 48 - "0"
     .db &H30       ' 49 - "1"
     .db &H6D       ' 50 - "2"
     .db &H79       ' 51 - "3"
     .db &H33       ' 52 - "4"
     .db &H5B       ' 53 - "5"
     .db &H5F       ' 54 - "6"
     .db &H70       ' 55 - "7"
     .db &H7F       ' 56 - "8"
     .db &H7B       ' 57 - "9"
     .db &H00       ' 58 - ":"
     .db &H00       ' 59 - ";"
     .db &H00       ' 60 - "<"
     .db &H00       ' 61 - "="
     .db &H00       ' 62 - ">"
     .db &H00       ' 63 - "?"
     .db &H00       ' 64 - "@"
     .db &H77       ' 65 - "A"
     .db &H00       ' 66 - "B"
     .db &H4E       ' 67 - "C"
     .db &H00       ' 68 - "D"
     .db &H4F       ' 69 - "E"
     .db &H47       ' 70 - "F"
     .db &H5E       ' 71 - "G"
     .db &H37       ' 72 - "H"
     .db &H06       ' 73 - "I"
     .db &H38       ' 74 - "J"
     .db &H00       ' 75 - "K"
     .db &H0E       ' 76 - "L"
     .db &H00       ' 77 - "M"
     .db &H00       ' 78 - "N"
     .db &H7E       ' 79 - "O"
     .db &H67       ' 80 - "P"
     .db &H00       ' 81 - "Q"
     .db &H00       ' 82 - "R"
     .db &H5B       ' 83 - "S"
     .db &H00       ' 84 - "T"
     .db &H3E       ' 85 - "U"
     .db &H00       ' 86 - "V"
     .db &H00       ' 87 - "W"
     .db &H00       ' 88 - "X"
     .db &H38       ' 89 - "Y"
     .db &H00       ' 90 - "Z"
     .db &H4E       ' 91 - "["
     .db &H00       ' 92 - "\"
     .db &H78       ' 93 - "]"
     .db &H00       ' 94 - "^"
     .db &H08       ' 95 - "_" - underscore
     .db &H00       ' 96 - "`"
     .db &H00       ' 97 - "a"
     .db &H1F       ' 98 - "b"
     .db &H0D       ' 99 - "c"
     .db &H3D       ' 100 - "d"
     .db &H00       ' 101 - "e"
     .db &H00       ' 102 - "f"
     .db &H00       ' 103 - "g"
     .db &H17       ' 104 - "h"
     .db &H00       ' 105 - "i"
     .db &H00       ' 106 - "j"
     .db &H00       ' 107 - "k"
     .db &H00       ' 108 - "l"
     .db &H00       ' 109 - "m"
     .db &H15       ' 110 - "n"
     .db &H1D       ' 111 - "o"
     .db &H00       ' 112 - "p"
     .db &H00       ' 113 - "q"
     .db &H05       ' 114 - "r"
     .db &H00       ' 115 - "s"
     .db &H0F       ' 116 - "t"
     .db &H1C       ' 117 - "u"
    $end Asm
'===============================================================================

http://se.uploads.ru/t/LVIEb.jpg

0

9

СПАСИБО за помощь в тестировании  -  max и ptihka

Проверка в железе, симуляция (Протеус 7.10; 8.2) + исходники (Bascom 2.0.7.1; 2.0.7.8) + плата (Diptrace 2.4.0.2) + фото и видео:

Драйвер расчитан на 10 чипов MAX7219, но, при желании, легко расширить, согласно документации, до 40 шт., т.е., 40 х 8 = 320 разрядов семисегментной индикации

Atmega328P + Ds3231 + BMP180 + DHT22 + 2 x Ds18b20 + 5 x MAX7219  -  скачать

Платы заказывались  здесь. Сроки: с момента заказа до момента получения 2 дня.

Фото + 3d вид

http://s8.uploads.ru/t/uwyNQ.jpg http://s8.uploads.ru/t/JoFgM.jpg
http://s8.uploads.ru/t/yXR6J.jpg http://s8.uploads.ru/t/YXHE6.jpg
http://s8.uploads.ru/t/0eX7m.jpg
http://s8.uploads.ru/t/n3qTd.jpg http://s8.uploads.ru/t/UCj1O.jpg
http://s8.uploads.ru/t/SNVkf.jpg http://s8.uploads.ru/t/VLbsg.jpg

http://s8.uploads.ru/t/avH6e.jpg http://s8.uploads.ru/t/nGOdm.jpg
http://s8.uploads.ru/t/DeKV5.jpg http://s8.uploads.ru/t/5g3LK.jpg

http://s8.uploads.ru/t/ZeyER.jpg

+2

10


Обновление архива - 13.04.2015   23:00


В результате тестирования предыдущей версии, выявлены глюки, обновлённая версия  -  скачать 

СПАСИБО  max; Skull  -  за тестирование драйвера в реальном железе

Отдельное, ОГРОМНОЕ СПАСИБО  1kostik1976  -  за предоставленные семисегментные индикаторы, по нынешним ценам, довольно дорогое удовольствие.


Проверено на МК  Atmega328P; Atbanned284P; Atmega2560
Симулятор  -  Proteus 7.10; Proteus 8.1
Компилятор  -  Bascom 2.0.7.1; Bascom 2.0.7.8
 

Количество используемых чипов, определяется константой   "Const_amount_max7219 = xx" , где х - количество подключенных чипов MAX7219
которая находится  здесь  -  "Готовые модули\Настройка MAX7219.bas"

Как пользоваться драйвером

'*******************************************************************************
'Инициализация всех чипов MAX7219
' Init_max7219

'*******************************************************************************
'Очистка всех подключенных чипов MAX7219
' Clear_all_max7219

'*******************************************************************************
'Включение выбранного чипа MAX7219
'            +------- На какой чип MAX7219 передать. Счёт начинается с 1
'            |
' On_max7219 1

'*******************************************************************************
'Включение всех чипов MAX7219
' On_all_max7219

'*******************************************************************************
'Выключение всех чипов MAX7219
' Off_all_max7219

'*******************************************************************************
'Выключение выбранного чипа MAX7219
'             +------- На какой чип MAX7219 передать. Счёт начинается с 1
'             |
' Off_max7219 1

'*******************************************************************************
'Очистка выбранного чипа MAX7219
'               +------- На какой чип MAX7219 передать. Счёт начинается с 1
'               |
' Clear_max7219 1

'*******************************************************************************
'Включение теста всех сегментов выбранного чипа MAX7219
'                    +------- На какой чип MAX7219 передать. Счёт начинается с 1
'                    |
' On_test_max7219 , 1

'*******************************************************************************
'Выключение теста всех сегментов выбранного чипа MAX7219
'                    +------- На какой чип MAX7219 передать. Счёт начинается с 1
'                    |
' Off_test_max7219 , 1

'*******************************************************************************
'Установка яркости свечения выбранного чипа MAX7219
'                  +------- На какой чип MAX7219 передать. Счёт начинается с 1
'                  |    +--- 0...15 - значение яркости
'                  |   /|
' Bright_max7219 , 1 , 10

'*******************************************************************************
'Установка яркости свечения всех подключенных чипов MAX7219
'                     +--- 0...15 - значение яркости
'                    /|
' Bright_all_max7219 10

'*******************************************************************************
'Вывод данных на выбранные 4 разряда, выбранного чипа MAX7219
'                  +------------- Строковая переменная или строковое значение. Значение больше 4 символов (без учёта точек) обрезается
'                  |     +------- На какой чип MAX7219 передать. Счёт начинается с 1
'                  |     |   +--- 1 - выводится на 1;2;3;4 разряды, 2 - выводится на 5;6;7;8 разряды указанного чипа
'                 /|\    |   |
' Print_max7219 "Abcd" , 1 , 1 или 2

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


Вопросы, пожелания, предложения  и  т.д.,  -  пишите в теме , ЛС или на mail.

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


Реализовано:

Поддержка всех удобо-выводимых символов таблицы ASСII, т.е., пишем "-15.6°C" или "Abcd" или "Err" или "tESt" -  так и выводится

очистка всех чипов
включение всех чипов
выключение всех чипов
очистка выбранного чипа
включение выбранного чипа
выключение выбранного чипа
регулировка яркости всех чипов
регулировка яркости выбранного чипа
включение теста всех сегментов выбранного чипа
выключение теста всех сегментов выбранного чипа
передача строкового значения или строковой переменной на выбранную половинку выбранного чипа (строка более 4 символов + точка - обрезается)


http://sh.uploads.ru/t/A3VEk.jpg http://sh.uploads.ru/t/ESGZI.jpg

+2

11

Применение драйвера в реальном устройстве.

http://s2.uploads.ru/t/oPVAn.jpg

+1

12

Заготовки

Однострочные экраны, состоящие из LED матриц, подключенных через MAX7219.

Матрицы выделили на пару дней, во временное пользование. Приедут мои, будет продолжение.

В архиве 2 варианта, 5 и 10 матриц.
Количество используемых матриц выставляется константой "Const_amount_matrix = х" в исходнике. х - количество используемых матриц.
Поддерживается кириллица, смотреть файл "Font matrix.bas"


Реализован прямой вывод на матрицы, без видеобуфера. Вывод по столбцам сверху вниз, 1 столбец - крайний левый

"Print_column (номер столбца) , (выводимые данные)"

Очистка экрана (во все столбцы заливаются "0")
"Clear_screen"

Текст выводится так:
Print_string (строковое значение или строковая переменная)


у кого вылазит такое окно

http://s7.uploads.ru/t/dEqFC.jpg

ставить ничего ненадо, просто скопируйте и вставьте ссылку в ваш браузер последней версии

Симуляции (Протеус 7.10) + исходники (Bascom 2.0.7.1) + кириллический шрифт + фотки  -  ( https://yadi.sk/d/9IO9WGYhjccww )

http://s3.uploads.ru/t/A3b9t.jpg http://s3.uploads.ru/t/yxULl.jpg

http://s3.uploads.ru/t/xMU5S.jpg http://s3.uploads.ru/t/ISx3J.jpg

+3

13

Вывод прямо на экран
Вывод бегущей строки через видео буфер
Стандартные шрифты Bascom с расширением   .font  (можно редактировать в "Font Editor")


2 варианта, 5 и 10 матриц
Симуляции (Протеус 7.10) + исходники (Bascom 2.0.7.1) + кириллические шрифты + снимки экрана  -   скачать


http://s3.uploads.ru/t/R0tsz.jpg http://s7.uploads.ru/t/v41Ff.jpg




Пожалуйста, у кого есть возможность, проверьте в железе




+2

14

Вывод прямо на экран
Вывод на экран через видеобуфер
Вывод бегущей строки через видеобуфер

Сдвиг вниз
Сдвиг вверх
Сдиг вправо
сдвиг влево

Вывод точки с координатами X , Y
Вывод строки с координатой Х

Стандартные шрифты Bascom с расширением   .font  (можно редактировать в "Font Editor")


2 варианта, 5 и 10 матриц
Симуляции (Протеус 7.10) + исходники (Bascom 2.0.7.1) + кириллические шрифты + снимки экрана  -   скачать


http://s6.uploads.ru/t/iVsxL.jpg http://s7.uploads.ru/t/2cLer.jpg
http://s3.uploads.ru/t/YBv6K.jpg http://s7.uploads.ru/t/egRlr.jpg
http://s7.uploads.ru/t/7PMp8.jpg http://s3.uploads.ru/t/sFyt7.jpg


Всё довольно просто, возникнут непонятки, спрашивайте здесь , ЛС или на mail.


0

15

Примерчик работы с матрицами  -  скачать

http://s6.uploads.ru/t/pFiPy.jpg http://s3.uploads.ru/t/h21WH.jpg

+2

16

Еще один вариант применения драйвера.
http://s008.radikal.ru/i305/1602/4d/cdb36948923et.jpg

+3

17

Atmega8 + max7219 + ds3231

Симуляция (Протеус 7.10) + исходник (Bascom 2.0.7.1)  -  скачать

+2

18

Универсальный драйвер для матриц с развёрткой на MAX7219

Для разных вариантов платок из Китая

Выбирается в исходнике константой  -   Const Rotation_matrix = 1
Возможные варианты: 0 (платки с MAX7219 в DIP); 1 (платки с MAX7219 в SMD)

SMD
http://sh.uploads.ru/t/eV9sm.jpg

DIP
http://s3.uploads.ru/t/ISx3J.jpg

Симуляция (Протеус 7.10) + исходник (Bascom 2.0.7.1)  -  скачать, для форумчан из Украины качать через VPN, или пишите, закину на mail.

http://s9.uploads.ru/t/20Cpt.jpg

+1

19

sasha_1973 написал(а):

Симуляция (Протеус 7.10) + исходник (Bascom 2.0.7.1)  -  скачать, для форумчан из Украины качать через VPN, или пишите, закину на mail.

"Ничего не найдено. Владелец удалил файлы либо закрыл к ним доступ или в ссылке опечатка."

0

20

radan написал(а):

"Ничего не найдено. Владелец удалил файлы либо закрыл к ним доступ или в ссылке опечатка."

Исправил.

0

21

Платки для матриц размером 20х20 мм

gerber в виде панели 100х100 мм

Схемы + платы + тест_исходник  -  скачать

https://upforme.ru/uploads/0000/25/b8/1217/t79036.jpg
https://upforme.ru/uploads/0000/25/b8/1217/t843228.jpg

Платы для установки через цанговый разъём                                      платы для прямой установки
https://upforme.ru/uploads/0000/25/b8/1217/t86201.jpg

+2

22

sasha_1973 написал(а):

Atmega8 + max7219 + ds3231

Я тоже не удержался и нечто похожее сделал в праздники. :D

0

23

Матрицы на AliExpress

max7219

Цанговые разъёмы

!!!  ВНИМАНИЕ  !!!

Платы сделаны для матриц с общим катодом, диаметр пикселя 1.9 мм

!!!  ВНИМАНИЕ  !!!

0


Вы здесь » Программирование ATMEL в BASCOM. » Примеры применения в среде Баском » ! Исследование MAX7219 (SPI драйвер 7seg led индикаторов) !