набросал простенькую программу - задвигаю данные в регистры, делаю задержку 10 мс. картинка на матрицах визуально заметно "дрожит".
позже все перепишу на прерываниях,
хотелось бы прикинуть с какой частотой обновляться ? 5*25-30Гц ? второй вопрос где хранить знакогенератор. если только цифры - то наверное поместятся в память, а если знаки ... может прописать это в епром и просто "вычитывать" оттуда ?
p.s. камень 16f630. код выложу позже..
Добавлено (07.10.2011, 20.56.35) --------------------------------------------- на первом месте пишем 0, на втором зажигаем все
' Define clock options DEFINE OSC 4 Define OSCCAL_1K 1 ' Set OSCCAL for 1K device
' Disable part CMCON = 7 ' disable comparators
'Define port pins as outputs... TRISA = %00011111 ' ra0-ra2 input TRISC = %00000000 ' rc0-rc5 output
SET var PORTC.4 CLOCK var PORTC.0 DATAOUT var PORTC.5
MODE var PORTA.4 LED var PORTA.5
' define variables i var byte k var byte j var byte pattern var byte
'запишем знакогенератор в eeprom ' доступ к знакам 5*K(цифра в таблице 0-10)* + I (от нуля до 4) data %01111100,%10000010,%10000010,%10000010,%01111100,_ %00000000,%10000100,%11111110,%10000000,%00000000,_ %11000100,%10100010,%10010010,%10010010,%10001100,_ %01000100,%10000010,%10010010,%10010010,%01101100,_ %00011110,%00010000,%00010000,%00010000,%11111110,_ %01001110,%10001010,%10001010,%10001010,%01110000,_ %01101100,%10010010,%10010010,%10010010,%01100000,_ %00000100,%11000010,%00100010,%00010010,%00001100,_ %01101100,%10010010,%10010010,%10010010,%01101100,_ %00001100,%10010010,%10010010,%10010010,%01101100
high LED ' starting - мигнем ледом pause 500 toggle LEd
pause 1000
k=0: j=0
main: for i=0 to 4 lookup i,[%00000001,%00000010,%00000100,%00001000,%00010000],pattern SHIFTOUT DataOut,Clock,1,[pattern] ' номер колонки read (k*5+i), pattern ' читаем из eeproma SHIFTOUT DataOut,Clock,1,[pattern] ' пишем значения строк в 1 матрице SHIFTOUT DataOut,Clock,1,[pattern] ' тоже самое
high SET ' latch outputs pauseus 50 low set
j=j+1 pause 3 if j>200 then k=k+1 : j=0 endif if k>10 then k=0 endif Next
goto main
даже с задержкой в 3 мс есть но уже слабое мерцание...
имеет ли смысл зашунтировать ноги strob/clock/data - емкостями небольшими ?
ps. если коротко, в чем смысл директивы INTCON.7 ' Бит глобального разрешения прерываний. ибо даже без него прерывания через таймер работают ?
только если вне обработки прерывания использовать pause - то наблюдается "сбой" исполнения.. это может быть как то связано между собой (глобальные прерывания и pause) ??