Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Таймер на семисегментном индикаторе

.docx
Скачиваний:
28
Добавлен:
24.02.2016
Размер:
50.82 Кб
Скачать

Таймер на семисегментном индикаторе

Код схемы:

#include <io.h>  #include <delay.h>  static flash unsigned char digit[] =    {    (0b11000000), //0    (0b11111001), //1    (0b10100100), //2    (0b10110000), //3    (0b10011001), //4    (0b10010010), //5    (0b10000010), //6    (0b11111000), //7    (0b10000000), //8    (0b10010000) //9    };       static flash unsigned char razryad[] =    {    (1), //0    (2), //1    (4), //2    (8), //3  };       void main(void)  {    int i,j,k,m;    PORTD=0x00;      DDRD=0b11111111;    PORTC=0xFF;      DDRC=0b11111111;       while (1)    {      for(i=0;i<10;i++)    {    for(k=0;k<10;k++)    {    m=k;    for(j=0;j<50;j++)    {    PORTD=digit[i];      PORTC=razryad[2];    delay_ms(10);      PORTD=digit[m];      PORTC=razryad[3];      delay_ms(10);    }      }    }    }  } 

"В реале" работает чётко, в Протеусе же с такой частотой обновления семисегментика реалтайм не получается.

Для аппаратуры с батарейным питанием применение LCD-индикаторов, как правило, считается более предпочтительным, чем светодиодных (LED) из-за большого тока потребления последних. Данный постулат мне кажется совсем не очевидным по следующим причинам: 1) в современных LCD-индикаторах существует подсветка, которая потребляет до 100 мА; 2) они относительно хрупки и боятся прямых лучей солнца; 3) современные LED-индикаторы (особенно superRED и ultraRED) обладают достаточной яркостью даже при токе в 1 мА через них, и при оперативной регулировке яркости в зависимости от условий освещения, средний ток потребления 4-разрядного индикатора получается не более 30 мА даже на улице, что меньше чем потребление подсветки LCD.

Несмотря на обилие в сети схем с динамической индикацией, схему с программной регулировкой яркости на PIC16 я не встречал. В данной статье показан мой скромный взгляд на реализацию такой задачи. Она предназначена, в основном, для радиолюбителей делающих первые шаги от повторения конструкций к самостоятельному программированию микроконтроллеров.

В статье рассматривается способ управления светодиодной матрицей микроконтроллером PIC среднего семейства, используя прерывания от таймеров TMR0 и TMR2. Таймер TMR2 используется для ШИМ-регулирования среднего тока через включенные сегменты. Алгоритм организации работы следующий:

1. Инициализация. Настраиваем порты микроконтроллера в соответствии со схемой подключения индикатора. Для таймеров 1 и 2 включается режим внутреннего тактирования с предделителем, равным 16 . Разрешается прерывания от периферии.

2. Создаем таблицу-знакогенератор для вывода на индикатор цифр и некоторых (преимущественно латинских) букв и знаков.

3. Резервируем два четырехразрядных переменных. В одну заносим последовательно цифровой код (для цифр – просто цифру) необходимого для вывода знака в соответствии с таблицей из п.2. В другую переменную передаются преобразованные значения из таблицы для постоянного высвечивания на индикаторе.

4. В прерывании от TMR0 последовательно высвечиваются разряды знаков в соответствии с таблицей. Перед сменой разрядов индикатор гасится. В каждом прерывании высвечивается один разряд. После этого обнуляется таймер TMR2, сбрасывается флаг прерывания от TMR2 и разрешаются от него прерывания.

5. В прерывании от TMR2 гасится индикатор и запрещается прерывание от TMR2.

6. В основной программе осуществляется регулировка периода прерывания от TMR2, а значит, времени включенного состояния индикатора путем занесения в регистр PR2 чисел от 7 до 255 в десятичном исчислении по формуле X(n+1)=2*X(n)+1. Получается шесть градаций яркости с разницей между ними в 2 раза. При PR2=255 длительность максимальна (4мс из 4мс), при PR2=7 длительность равна примерно 0.25мс.

Для демонстрации указанного принципа управления, ниже приводится схема на недорогом PIC16F628A и тестовая программа на Ассемблере, которая выводит на индикатор слово «test». При нажатии на кнопку, на индикаторе высвечивается яркость (условно цифрами от 0 до 5). При последующих нажатиях, яркость изменяется по кругу и это сразу видно на индикаторе. Сразу хочу предупредить начинающих: моделирование схемы на симуляторе типа Proteus не позволит увидеть изменение яркости в силу особенностей этой программы (Proteus). Макет схемы для проверки и экспериментов придется собирать в «железе».   Впрочем, для наблюдения собственно за организацией динамической индикации (кроме изменения яркости) Proteus-модель прилагается.

Потребление схемы при минимальной яркости менее 4 мА, при максимальной – около 80 мА.

В архиве приведена тестовая программа на Ассемблере MPASM.

Для упрощения схемы и освобождения «ног» для различных действий, применена конфигурация с внутренним генератором и внутренним сбросом. При этом, у тех, что пользуется самодельным программатором без возможности подачи сигнала MCLR раньше Upp, могут быть проблемы с последующими верификацией, чтением и стиранием. Тем, кто не уверен в своем программаторе, а так же если требуется высокая стабильность генератора, можно установить кварц 4 МГц по типовой схеме с выбором  в конфигурации “OSC_XT”. В случае, если в конечной схеме требуются прерывания с вывода INT0 (RB0), запятой можно управлять посредством вывода RA4, для индикатора с ОА индикатор к этому выводу подключается напрямую, несмотря на то, что он открытый. Освободившийся вывод RB0 можно использовать по назначению. Однако, в исходном виде все гораздо проще и понятнее (поместил в OUT_ и забыл), а так же при множественных выводах с разных мест программы получается экономия кода (4 слова на 1 вывод) – думается хорошая компенсация за лишние 4 байта ОЗУ.

То же самое касается и вывода запятой через переменную comma_.

В подпрограмме-таблице Table_s приняты меры для корректной работы при помещении ее в любое место памяти программ без ограничений на пересечение блоков 256 байт.

Переменная pause_ в прерывании от TMR0 используется для задания временных интервалов 4 мс.

Остальное, я думаю, понятно из алгоритма и комментариев.

P.S. Для 2 или 3 разрядов в программе требуется произвести минимальные изменения, которые, думается, по силам даже для начинающих. Для управления индикатором с количеством разрядов от 5 до 8 необходимо или применить контроллер с большим количеством выводов или же для управления разрядами применить дешифратор 3 на 8.

В первом случае изменения в программе также минимальны (применение вместо порта А другого порта и т.д.). В случае применения дешифратора программа в части прерывания от TMR0 изменится довольно серьезно.   

Обозначение

Тип

Номинал

Количество

Примечание

U1

МК PIC 8-бит

PIC16F628A

1

H1

Индикатор

4х7 FIQ-3641A

1

Q1-Q4

Биполярный транзистор

КТ361Е

4

C3

Конденсатор

22 нФ

1

R1-R7, R14

Резистор

150 Ом

8

R8

Резистор

39 кОм

1

R9

Резистор

1 кОм

1

R10-R13, R15-R18

Резистор

6.2 кОм

8

Скачать список элементов (PDF)

Основные параметры

Цвет

Красный (GaAsP/GaP)

λd,нм

625

Дес. точка

Справа

Размер,мм

50.3x19.0x8.1

IF (тип.),мА

20

Высота символа,мм

14.22

VF (тип.)

2

Цвет лицевой панели

Серый

Кол-во символов,шт

4

IV,мКд

от 1900 до 8000

Конфигурация

Общий анод

Общее описание

  • Высота символа 14.22мм (0.56 дюйма).

  • Малый ток потребления

  • Легко устанавливается на печатную плату или гнездо.

  • Превосходные характеристики.

  • Серый фон, белый сегмент.

  • I.C. совместимый

  • RoHS совместимый.