допустим колоны имеют 1
тогда задвигаю в 595к movlw b'11111111'
и один раз и после 8 раз гружу строки
друг за другом или всеж надо как вы ранее писали
строка+колонка
строка+колонка
Посмотрите опять на ету картинку. В "один раз" въ можете засветить одну колону. Подсвечивая их одну за другую въ получите ету картинку. Если в 595к все 1 (11111111) то (скорее всего - в зависимости от индикатора) ни одна колона не засветится
Если в 595К 0111111 - левая колона (1-ая)
10111111 - вторая
11011111 - 3-я
и т.д. Т.е. в 595К есть только сдвиг вправо активного сигнала - на каждом байте один сдвиг
У вас два подхода - с counter до 16 тогда должнъ передавать и информацию о 595К
Ету:
bbbbbbbb01111111
bbbbbbbb10111111
bbbbbbbb11011111
bbbbbbbb11101111
bbbbbbbb11110111
bbbbbbbb11111011
bbbbbbbb11111101
bbbbbbbb11111110
и counter до 8 (только для въводимой информацией) тогда надо делать сдвиг вправо 595К.
Лом - ето город в Болгарии, а не инструмент юстировки електроники.
БЫРР....
Это что "поштучно" точки поджигать собрались? (Типа растровой попиксельной развертки).
Иначе чей-то "задымится"...
Стандартный ток светика миллиампер 20... А в группе их может включится одновременно 8 - итог 0,02*8=0,16 ампера на вывод регистра. Хоша б ULN2803 для нормальной работы прицепить.
пытаюсь понять как отрисовывать на лед маьрице
через 595 сдвиговый.. он не дорогой
не получается капец
у меня матрица с общим +
понял что надо строки включать и гасить их быстро
SILF, Вы с таким стилем задавания вопросов, никогда нормальных ответов не услышите
Реально не понятно, что Вы от нас хотите услышать и в чём у Вас проблема. Какие то отрывки мыслей вслух...
Или не может сформулировать вопрос на русском...
Одна часть задачи - обеспечение работы самого дисплея, другая - предобработка данных для отображения.
Если взят pic16f628 то вобщем - то достаточно одного регистра по одной из координат и 8 выводов собственно с МК по другой. Частота развертки примерно 62 герца. Собстенно ежли не добавлять всяческих ШИМ-усложнений... Там и счетчик-дешифратора дополнительно 8-битному порту может хватить. Без усяких регистеров...
Если решил на регистрах - да будет. Я сам делал на HC4094 для управления LCD и обслуживание клавиатуръ на том же 628А. Получилось как хотел. При занятъх 5 ножек 628 управляю LCD + 8 кнопок. Мог бъ сделать и на 4 ножек но ето стоило бъ еще одну 4094 или переход на управление LCD по 4-х битной схеме.
Лом - ето город в Болгарии, а не инструмент юстировки електроники.
;;;;Конфигурируем регистры;;;;;
PORTA equ 05h
TRISA equ 05h
PORTB equ 06h;добавим регистры порта В для кнопок
TRISB equ 06h;
STATUS equ 03h
CMCON equ 1Fh; компаратор
PC equ 02h; Счетчик PCL
stroka equ 23h;регистр в который занесем значение для вывода в индикатор0
stolb equ 24h;регистр в который занесем значение для вывода в индикатор0
Count equ 25h;счетчик для IND0
Count1 equ 26h;счетчик для IND0
W equ 0;результат пихаем в аккумулятор
F equ 1;результат идет в регистр
C equ 0
RP0 equ 5;присваиваем RP0=5
как я понял теперь добавляю в код таблицы из 8ми вариантов каждая типа как снизу показал?
table addwf PC,F
retlw b'11111100';0
retlw b'01100000';1
retlw b'11011010';2
retlw b'11110010';3
retlw b'01100110';4
retlw b'10110110';5
retlw b'10111110';6
retlw b'11100000';7
retlw b'11111110';8
retlw b'11110110';9
только как мне играть подгрузкой вариантов из этой таблицы вот что не пойму
Уффф...
имеем индикатор 8 позиций по 8 точек;
имеем буфер отображения из 8 байт;
сооружаем схемку, обеспечивающую физический вывод данных из буфера отображения в индикатор;
пишем программку, обеспечивающую обслуживание схемки.
запускаем сей девайс в режиме непрерывной регенерации дисплея как подпрограммки, работающей по маркеру от таймера.
итого экран готов.
Теперь займемся собственно самим изображением.
Для отсутствия некорректных проблесков смену содержимого буфера отображения необходимо обеспечить в конце цикла развертки дисплея (флажковый семафор готовности/подтверждения ибо прцесс регенерации и подготовки данных асинхронны).
Собственно подготовкой новых данных занимается основная программа. Когда данные в буфере предподготовки готовы выставляется флаг и основная программа приостанавливается (а может и без такового) до обнаружения статуса "данные перенесены".
Прожка обработки дисплея узрев флажок готовности новой порции для отображения всего лишь копирует содержимое из буфера предподготовки в буфер отображения и затем сбрасывает флаг запроса. Далее все крутится само-по-себе до готовности новой порции данных.
Побочным продуктом развертки при динамической индикации является обработчик клавиатуры, встраиваемый в подпрограмму регенерации.
А далее делаем деталировку каждого процесса...
LIST p=16F628a
__CONFIG 0x3F6B
#include P16F628A.inc
;;;;Конфигурируем регистры;;;;;
PORTA equ 05h
;TRISA equ 05h
PORTB equ 06h;добавим регистры порта В для кнопок
;TRISB equ 06h;
STATUS equ 03h
CMCON equ 1Fh; компаратор
PC equ 02h; Счетчик PCL
stroka equ 23h;регистр в который занесем значение для вывода в индикатор0
stolb equ 24h;регистр в который занесем значение для вывода в индикатор0
Count equ 25h;счетчик для IND0
Count1 equ 26h;счетчик для IND0
W equ 0;результат пихаем в аккумулятор
F equ 1;результат идет в регистр
C equ 0
RP0 equ 5;присваиваем RP0=5
CBLOCK 0x60
col ; здесь будем сохранять колону - бегущая ноль
row ; что будем въводить
c1,c2 ;счетчик
tmp_var
endc
#DEFINE clock PORTA,0;такт
#DEFINE bite PORTA,1;передача данных
#DEFINE switch PORTA,2; защелка
#DEFINE knopka PORTA,3;кнопка
org 0;программа стартует отсюда
goto main
nop
nop
nop
goto main
nop
;ИНИЦИАЛИЗАЦИЯ
main
bcf STATUS,RP0; выбрали первый банк памяти
movlw 0x07
movwf CMCON; все цифровые каналы вход выход
bsf STATUS,RP0
movlw 0x00
movwf TRISA;значение для инициализации защелок
movlw 0x00
movwf TRISB
movlw b'11111111'
movwf PORTB
bsf STATUS,0
bcf STATUS,RP0
tt
call val1
nop
nop
goto tt
start
movlw .8;счетчик сдвига битов
movwf Count
movlw .8;счетчик сдвига битов
movwf Count1
call shift2
goto start
shift2;U3 в протеусе
movlw b'11100000'
movwf stroka
bsf switch
;bcf switch
m1 bcf clock
bsf bite
btfss stroka,0
bcf bite
bsf clock;тактовый импульс
rrf stroka,F
decfsz Count,1;уменьшаем на еденицу, достигнув нуля прыгаем на goto serial,
goto m1;пока не достигнем 0
btfsc Count,0
goto shift1
shift1 ;U2 в протеусе
movlw b'10000000'
movwf stolb
bsf switch
bcf switch
m2 bcf clock
bsf bite
btfss stolb,0
bcf bite
bsf clock;тактовый импульс
rrf stolb,F
decfsz Count1,1;уменьшаем на еденицу, достигнув нуля прыгаем на goto serial,
goto m2;пока не достигнем 0
btfsc Count1,0
goto shift2
val1
movlw b'01111111' ;будем вращат ету 0 по байту
;если необходимо можно поставить и
; movlw b'10000000' ;бегущая единица
bcf switch ;для всякии случай
bcf clock
movwf col
clrf c1 ;начнем с нуля
decf c1,f
loop_char
movf col,w
call to_595_8 ;въсилаен колону to 595
bsf STATUS,C
rrf col,f ;next column
incf c1,f ;следующии
movf c1,w ;для табле
call table ;берем инфо с table
btfsc STATUS , Z
goto end_val1 ;если table return 0 ->exit
call to_595_8 ;въсилаем дата к 595
bsf switch
nop
nop
nop
bcf switch
goto loop_char
end_val1
return
to_595_8
movwf tmp_var ;сохранем что будемм въводить
movlw 0x08 ; 8 такта
movwf c2
loop_to_595
bcf bite ; на вход D 595
rrf tmp_var,F ;получаем следующего бита
btfsc STATUS,C ;если он 0 мъ его уже установили
bsf bite ; данни за регистъра на вход D 595
;бит не ноль - здесь устанавливаем его в 1
nop ;чтоб вход D установился
bsf clock ;Такт
nop
nop
nop
bcf clock ; и маленкая задержка для такта
decfsz c2,f
goto loop_to_595 ;имеем еще для въвода
return
table addwf PC,F
retlw b'11111100';0
retlw b'01100000';1
retlw b'11011010';2
retlw b'11110010';3
retlw b'01100110';4
retlw b'10110110';5
retlw b'10111110';6
retlw b'11100000';7
retlw b'00000000'; null - чтобь можно закончит въвода.
retlw b'11111110';8
retlw b'11110110';9
end
Пътался не трогать твоего кода. Попробуй. Две новъе функции Val1 и to_595_8
PS:Маленко зигрался. Переставил условие въхода в Table на 8-ое место. Иначе будут "бегущие огни" SILF не забъвай про умощнение въхода 595.
Лом - ето город в Болгарии, а не инструмент юстировки електроники.