Для усиления тока строк установим полевой транзистор. Будем устанавливать ПТ на каждый вывод сдвигового регистра.
Данный полевой триод должен иметь большой номинальный ток (5-10-40 А) и очень маленькое пороговое напряжение (0,5-1,5-2 В), поэтому выбираем транзистор серии: IRF7324
Он содержит 2 транзистора в одном корпусе, поэтому таких ПТ в данном курсовом проекте понадобится не 16 штук, а всего 8. Подробные характеристики указаны в приложенной литературе[9].
Т.к. через резисторы R2-R17(строки) ток не протекает, их номиналы выбираем равными 100 Ом. Рассчитаем сопротивления R18-R217(столбцы):
Таким образом, выбираем данные сопротивления равными 47 Ом[5].
5. Алгоритм программы
НЕТ
ДА
6. Программа
#include <LPC214X.H> #include "Font_12x16.H" //файл, содержащий таблицу знакогенератора
const char Str[]=" "; //строковая константа хранит движущиеся символы int I,i,k; // const int L=200; //ширина индикатора (число точек) const int M=20; //число кадров, когда строка остается неподвижной const int N=sizeof(Str)-1; // формирование длины строки (число символов) int T=0, K=0; // счетчики столбцов изображения и столбцов индикатора char Map[N*6]; //карта индикатора, которая хранит изображение всей строки, поэтому имеет размерность 6N
__irq void STROKA() // процедура обработки прерывания
{ unsigned int Code; I=K % L+T; // для «цикличности»,посл. столбец сменяется первым if (I>=N*6) I-=N*6;// Если I больше значения 6N, он откорректируется Code=0x100 << K % L | Map[I];// Формирование управляющего кода S0SPDR=~Code; // передача по SPI while (!(S0SPSR & 0x80)); // передача? IO0SET=0x8000; //формирование строба на входах RCK микросхем IO0CLR=0x8000; // 74HC595, подключенных параллельно к линии P0.15.
if (++K==L*M) { K=0; if (++T==6*N) T=0; }
T0IR=1; // cброс флага запроса прерывания VICVectAddr=0; }
int main (void)// основная программа { IO0DIR=0x8000; //настройка на выход линии P0.15 PINSEL0=0x1100; //перевод линии P0.6 в режим MOSI, линии P0.4 в SCK S0SPCR=0x64; //настройка передатчика SPI S0SPCCR=8; //настройка тактовой частоты на линию SCK
for (k=0;k<N;k++) // формирование карты индикатора { for (i=0;i<6;i++)
{ Map[k*6+i]=Font_6x8_Data[Str[k]*6+i]; } }
T0MR0=9375; //настройка таймера T0MCR=3; //разрешить сброс и запрос прерывания при совпадении T0TCR=1; //включить таймер VICVectAddr0=(unsigned) STROKA; // настройка прерывания VICVectCntl0=0x20|4; VICIntEnable=0x10;
while (1); // вечный цикл }
7. Принцип работы:
Динамическая индикация - это процесс вывода информации, изменяющейся во времени. Т.е. на небольшом участке пространства(в нашем случае – матричного индикатора) можно отобразить целую строку символов. Сделать это достаточно просто - необходимо лишь сдвигать информацию(строку) в одном направлении с течением времени. Другими словами- в 1-ю секунду мы отображаем “СТР”, во вторую-“ТРО”, а в третью –“РОК”, и четвертую-“ОКА”. Если промежуток времени достаточно малый, то человек воспринимает все как бегущую надпись “СТРОКА”. Однако, если нам необходимо вывести этот текст на светодиодный матрице, скажем 16 строк на 200 столбцов, то минимальное количество отводов будет 200 х 16 = 3200 шт. Это достаточно много для такой небольшой матрицы. Поэтому было придумано управлять такими сборками по принципу СТОЛБЕЦ-СТРОКА. Т.е. для включения любого одного сегмента(светодиода) необходимо подать «+» питания на строку, в которой находиться данный сегмент, и «-»на столбец с тем же сегментом. Теперь подсчитаем: 16 «+» и 200 «-» = 216 отводов, вместо 3200. Однако не всё так просто. Нам в момент времени надо вывести конкретный набор символов, а не сегмент. И опять на помощь приходит «человеческий фактор». Когда мы смотрим на большую быстро мерцающую лампочку, то для нас она кажется просто горящей. Аналогично и с мониторами - частота обновления заставляет нас воспринимать набор мерцающих пикселей как картинку. Значит для получения простых и неподвижных символов нам необходимо в короткий промежуток времени включать определенные сегменты строк на соответствующем столбце (например, у нас матрица 3х3 светодиода, нам необходимо вывести +, это делается так: сначала зажигаем середину первого столбца, ждем небольшое время(видим -), выключаем столбец, включаем 2 столбец и зажигаем три сегмента (видим |), опять ждем и выключаем, потом переходим на последний, выключаем середину (видим -) и опять переходим на начало. Так при повторении с достаточной частотой мы воспримем это как подвижный символ (+). Значит, для вывода бегущей строки в таком режиме, необходимо выводить неподвижную часть символов с достаточной частотой обновления, меняя их через определенное время для эффекта бега.
Список использованной литературы: 1. Сташин В.В. Проектирование цифровых устройств на однокристальных микроконтроллерах.. –М,: Энергоатомиздат. 1990. 2. Александров К.К.,Кузьмина Е.Г. Электротехнические чертежи и схемы. –М,: Энергоатомиздат. 1990 3. Конспект лекций по дисциплине: Проектирование микропроцессорных систем. ВлГУ 4. Кочуров О. М., Программирование встраиваемых систем на основе микроконтроллеров LPC214x. — Владимир: ВлГУ — 2011, 258 с. 5. Аксенов А.И., Нефедов А.В. Элементы схем бытовой радиоаппаратуры. Конденсаторы. Резисторы: Справочник. - М.: Радио и связь. 1995.- 272 с. 6. www.nxp.com 7. www.maxim-ic.com 8. www.kingbright.com 9. www.irf.com
|