Пт апр 14, 2017 09:58:26
Пт апр 14, 2017 09:59:44
Сб апр 15, 2017 15:57:18
'Запись из ПАМЯТИ Disp_ram() в дисплей max7221
Max7219_load:
P_iclk = 0 ' Тактовый вывод
P_iload = 0 ' Вывод LOAD
Disp_ra_1 = 1 ' Установка начальных адресов
Disp_ra_2 = Disp_ra_1 + 32 ' в массиве ОЗУ экрана
Disp_ra_3 = Disp_ra_2 + 32 ' для каждого ряда матриц
Disp_sh_row = 8 ' счетчик строк в матрице
While Disp_sh_row > 0 ' Перебор строк
Spi_data(1) = Disp_sh_row ' Адрес регистра (1 - 8)
Disp_sh_col = 1 ' Счетчик матриц (1-4)
While Disp_sh_col < 5
Spi_data(2) = Disp_ram(disp_ra_1) ' Этот байт передается в ряд 1 матриц
Spi_data(3) = Disp_ram(disp_ra_2) ' Этот байт передается в ряд 2 матриц
Spi_data(4) = Disp_ram(disp_ra_3) ' Этот байт передается в ряд 3 матриц
Waitms 5
Gosub Disp_shift ' Передача по SPI сразу в 3 ряда
P_iload = 1 ' Для ПРОБЫ
Waitms 50
P_iload = 0
' Следущий байт в массиве
Incr Disp_ra_1
Incr Disp_ra_2
Incr Disp_ra_3
Incr Disp_sh_col ' Следущая матрица
Wend
P_iload = 1 ' Запись в MAX
Waitms 500
Waitms 500
Decr Disp_sh_row ' Следущая строка в матрице
Wend
Return
P_iload = 1 ' Для ПРОБЫ
Waitms 50
P_iload = 0
Вс апр 16, 2017 19:13:35
SV12 писал(а):Прошу помощи.
Я сделал индикатор из светодиодных матриц 8х8 + max7219
Вс апр 16, 2017 22:31:03
max50 писал(а):Есть готовое решение.
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 4 , Noss = 0
'=========================
Sub Write_matrix_reg_data(byval Copy_matrix As Byte , Byval Copy_reg As Byte , Byval Copy_data As Byte)
'----------
Local Tmp_count_matrix As Byte
Local Tmp_ckip_max7219 As Byte
Tmp_ckip_max7219 = 0
'Даём понять чипам MAX7219_7221, что начинаем передавать данные
Load_max7219_7221 = 0
For Tmp_count_matrix = Const_amount_matrix To 1 Step -1
If Copy_matrix = Tmp_count_matrix Then
Write_data_max7219_7221 Copy_reg
Write_data_max7219_7221 Copy_data
Else
Write_data_max7219_7221 Tmp_ckip_max7219
Write_data_max7219_7221 Tmp_ckip_max7219
End If
Next Tmp_count_matrix
'Даём понять чипам MAX7219_7221, что закончили передавать данные, тем самым разрешая применить введённые данные
Load_max7219_7221 = 1
'----------
End Sub
'=========================
?? писал(а): 24 - DOUT. Последовательный вывод данных. На этом выводе появляются принятые на входе DIN данные c задержкой в 16 с половиной тактов.
Пн апр 17, 2017 16:21:04
SV12 писал(а): Вроде как можно. Но на практике не получается.
Ср апр 19, 2017 16:04:47
Ср апр 19, 2017 17:00:47
if b >= period then
b=0
some_action()
end if
Ср апр 19, 2017 18:21:46
Чт апр 20, 2017 00:03:39
Чт апр 20, 2017 11:18:14
Попробуйте лучше B=секунда and 1twinsen_kiev писал(а):Испытал метод деления по модулю, работает в моем случае.
B=секунда mod 2
Пт апр 21, 2017 09:40:12
Пн май 01, 2017 08:19:09
Пн май 01, 2017 08:26:56
Пн май 01, 2017 08:37:01
Вт май 02, 2017 10:43:44
'----------
' (c) April 27, 2017 KOTик
' АМЕРИКАНСКИЙ СТИЛЬ ДХО(ГАБАРИТ) - ПОВОРОТНИКИ
' Частота ШИМ = (частота кварца/предделитель) / (размер счетного регистра *2)
' (4800000/256) / (256*2) = 36 Гц
' (9600000/256) / (256*2) = 73 Гц
' (4800000/64) / (256*2) = 146 Гц
' (9600000/64) / (256*2) = 293 Гц
'----------
$regfile = "attiny13.dat" 'specify the used micro
$crystal = 9600000 'used crystal frequency
$hwstack = 32 'default use 32 for the hardware stack
$swstack = 8 'default use 8 for the SW stack
$framesize = 16 'default use 40 for the frame space
Config Debounce = 100 'время задержки в мс
'================ О Б Ъ Я В Л Е Н И Е П Е Р Е М Е Н Н Ы Х ===
Dim V As Eram Byte 'Переменная, записанная в EEPROM
Dim Click As Byte 'Переменная нажатий
Dim Store As Byte 'Переменная для уровня ШИМ
Dim Button As Bit
Button = 1
Dim Count As Byte 'счетчик кол-ва нажатий
Dim S As Eram Byte 'Переменная, записанная в EEPROM
Dim Mmode As Byte 'Переменная установки режима работы, привязанная к переменной S Eram
'== Н А С Т Р О Й К А П О Р Т О В =======
Config Portb.0 = Output 'PWM OUT
Config Portb.3 = Output 'STATUS LED
Config Pinb.1 = Input 'TURN
Config Pinb.2 = Input 'ADJUST BUTTON
'Pinb.1 = 1
'Pinb = &B00000110 'Подтягивающие резисторы PINB.1 and PINB.4
Turn Alias Pinb.1 'Обзываем TURN для PINB.1
Btn Alias Pinb.2 'Обзываем SETUP для PINB.2
Led Alias Portb.3 'Обзываем SETUP для PINB.3
'===== Н А С Т Р О Й К А Ш И М ==========
Config Timer0 = Pwm , Prescale = 256 , Compare A Pwm = Clear Up
Start Timer0
'/// ---> НАСТРОЙКА РЕЖИМА РАБОТЫ
'До подачи питания нажимаем кнопку и держим до тех пор,
'Значение Mmode не изменится
'LED мигнет 1раз сигнализируя о том, что настройка сохранилась
If Btn = 0 Then
Waitms 500
Mmode = Mmode + 1 'инкрементируем
Waitms 500
S = Mmode 'сохраняем в S Eram
Waitms 500
Led = 1 'мигаем 1 раз
Waitms 100
Led = 0
Waitms 100
If Mmode >= 2 Then 'Сбрасывам в ноль, если Mmode больше или равно 2.
Mmode = 0
Else 'в противном случае
If Btn = 1 Then 'если кнопку не нажимали
Waitms 500
Mmode = S 'считываем раннее записанное значение Mmode (режима)
End If 'конец условия
Wait 3
End If 'конец условия
End If 'конец условия
'=============== ПРОГРАММА =================
Main:
Do
'/// ---> ДРЕБЕЗГ ВХОДОВ
Debounce Turn , 1 , Drl_off , Sub 'Если поворотник включен (пульсирующий сигнал)
Debounce Turn , 0 , Drl_on , Sub 'Если поворотник выключен
'/// ---> УСТАНОВКА УРОВНЯ ШИМ
If Click >= 4 Then Click = 1 'Если нажали кнопку 4ый раз, тогда сбрасываем на минимум
If Click = 1 Then Pwm0a = 40 'pwm = 15%
If Click = 2 Then Pwm0a = 77 'pwm = 30%
If Click = 3 Then Pwm0a = 115 'pwm = 45%
If Button = 1 Then
If Btn = 0 Then
Button = 0
Store = Click + 1 'Увеличиваем яркость на 1 шаг
Waitms 50
V = Store 'Записываем значение ШИМ в V Eram
End If 'конец условия
End If 'конец условия
If Btn = 1 Then Button = 1
Loop
'================= О Б Р А Б О Т Ч И К П Р Е Р Ы В А Н И Й ==
'/// ---> ВЫКЛЮЧАЕМ ДХО
Drl_off: 'метка
If Mmode = 1 And Turn = 1 Then 'Если выбран Режим=1 и включен поворотник, тогда
Pwm0a = 255 'Включаем ШИМ на полную яркость
Else 'В противном случае, Режим=0 + включен поворотник, тогда
Pwm0a = 0 'Выключаем ШИМ вовсе
End If 'конец условия
Bitwait Turn , Reset 'ждем когда поворотник перестанет мигать
Return 'выходим
'/// ---> ВКЛЮЧАЕМ ДХО
Drl_on: 'метка
Pwm0a = Click
Click = Store
Store = V 'Считываем яркость из ЕЕПРОМ
Return 'выходим
'----------
'обрабатываем мигание поворотника
'Turn: 'метка
While Turn = 1 'до тех пор пока поворотник включен (мигает)
Incr Count 'увеличиваем счетчик задержки на выключение
Waitms 50 'задержка
If Count => 20 Then 'если поворотник выключен 100 мсек.
Gosub Drl_on 'переход к метке
Bitwait Turn , Reset 'ждем когда он выключится
Gosub Drl_off 'переход к метке
Goto Ext 'переход к метке
End If 'конец условия
Wend
'если мигание поворотника было менее секунды
Count = 0 'сбрасываем Count
Ext:
Return 'выходим
'----------
End 'end program
Вт май 02, 2017 14:15:31
Вт май 02, 2017 15:29:43
Вт май 02, 2017 15:35:54
Вт май 02, 2017 15:50:45