Микропроцессорный модуль управления цифровой магнитолой

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

СОДЕРЖАНИЕ

Введение

Техническое задание

Функциональная схема

Выбор управляющего контроллера

Разработка функционирования программы

Заключение

Приложение 1

ПРИЛОЖЕНИЕ 2

Введение

Развитие микроэлектроники и широкое применение её изделий в промышленном производстве, в устройствах и системах управления самыми разнообразными объектами и процессами является в настоящее время одним из основных направлений научно-технического прогресса.

Использование микроэлектронных средств в изделиях производственного и культурно-бытового назначения приводит не только к повышению технико-экономических показателей изделия (стоимости, потребляемой мощности, габаритных размеров) и позволяет многократно сократить сроки разработки и отодвинуть сроки «морального старения» изделий, но придает им принципиально новые потребительские качества (расширенные функциональные возможности, модифицируемость, адаптивность и т. д.).

В связи с бурным развитием микроэлектроники стали появляться все более сложные и более функциональные микроконтроллеры. Микроконтроллеры известных фирм-производителей окружают нас везде: в лифте, в таксофонных аппаратах, автомобильных сигнализациях, музыкальных центрах, телевизорах, всевозможных играх и другой как бытовой, так и промышленной технике.

Техническое задание

В данном курсовом проекте поставлена задача разработать микропроцессорный модуль управления цифровой магнитолой, обеспечивающий полнофункциональное управление тюнером с автоматическим поиском станций по обнаружению максимума несущей и запоминание 4 станций. Модуль должен управлять громкостью, уровнем НЧ и ВЧ, а так же декой магнитофона, а именно, воспроизведение, перемотка, поиск предшествующей песни, поиск следующей песни и команду стоп. А так же электронно-управляемый по шине I2C тембр-блок.

В качестве устройства отображения по заданию определено

использование активного, матричного, двух строчного жидко кристаллического индикатора, размерностью 12×2, что позволяет нам наблюдать на его экране все необходимые информационные сообщения о режиме работы и параметрах устройства.

Для управления используются восемь клавиш, две клавиши работают как энкодер, клавиша включения режима магнитола, клавиша ВЧ, НЧ, громкость. А так же клавиша выключения звука «mute».

1 — перемотка влево, стоп, поиск предшествующей песни, воспроизведение, поиск следующей песни, смена направления, перемотка вправо;

2 — AMFM, поиск следующей станции.

Функциональная схема

/

Рис. 1

Описание функциональных блоков:

МП — микропроцессор;

БТ — блок тюнера;

ЦАП — цифровой аналоговый преобразователь;

КС — компоратор сигнала;

БК — блок клавиш;

ЖКИ — жидкокристаллический индикатор;

БКМ — блок коммутации;

БР-1,2,3 — буфер регистров.

Выбор управляющего контроллера

Перед тем как выбрать контроллер, я решил провести анализ след серий микроконтроллеров представленных на рынке и используемых в аналогичных устройствах: AVR, PIC, MK-51.

Обзор PIC

Альтернативой является PIC 16С745. Все команды данного контроллера состоят из одного слова (14 бит шириной) и исполняются за один цикл (200 нс при 20 МГц), кроме команд перехода, которые выполняются за два цикла (400 нс). Контроллер имеет прерывание, срабатывающее от четырех источников, и восьмиуровневый аппаратный стек. Высокая нагрузочная способность (25 мА макс. втекающий ток, 20 мА макс. вытекающий ток) линий ввода/вывода упрощают внешние драйверы и, тем самым, уменьшается общая стоимость системы. Имеется возможность работы с тремя таймерами и каналом I2C. Но при всем этом цена более высокая, чем у 52 контроллера. Так же недостатком является однократно программируемое ПЗУ, что требует покупки более дорогого отладочного кристалла.

Краткий обзор AVR

AVR ядро базируется на усовершенствованной RISC архитектуре, с регистровым файлом быстрого доступа, содержащим 32 регистра общего назначения, непосредственно связанных с арифметико-логическим устройством (ALU), и мощной системой команд. За один тактовый цикл из регистрового файла извлекаются два операнда, выполняется команда и результат записывается в регистр назначения. Такая высокоэффективная архитектура обеспечивает производительность почти в десять раз большую, чем стандартные CISC микроконтроллеры. Одним из основных минусов является отсутствие аппаратной возможности использования функции деления. Ее необходимо прописывать программно, что влечет к риску переполнения ПЗУ.

Обзор семейства МК51

МК семейства МК-51 используют гарвардскую архитектуру: память программ (ПЗУ) и память данных (ОЗУ) имеют раздельное адресное пространство. И, как следствие, для обращения к ячейкам памяти разного типа должны быть использованы разные типы команд. Максимальный размер адресного пространства для каждого типа памяти составляет 64 Кбайта. Однако непосредственно на кристалле МК 8051 АН располагаются только 4 Кбайта ПЗУ и 128 байт ОЗУ. МК семейства MCS-51 имеют открытую архитектуру, т. е. позволяют подключать внешнюю память. Поэтому при необходимости, как память программ, так и память данных могут быть увеличены посредством подключения дополнительных микросхем памяти. МК-51 имеет четыре 8-разрядных параллельных порта ввода/вывода и два 16-разрядных программируемых таймера. В отличии от 51 контроллеры 52 серии имеет больший объем ОЗУ, 3 таймера, возможность работы по шине I2C, что позволяет подключить внешнее ПЗУ и достаточное количество портов (4Ч8).

Свой выбор я остановил на контроллере семейства МК51 AT89C51. Потому что у этого контроллера наиболее доступная цена при достаточном количестве портов, памяти и функций; архитектура данного контролера изучена в курсе лабораторных работ.

Параметры AT89C51:

Память программ — 4 Кбайта

Память данных — 128 байт

Выводы ввода/вывода — 32

16 битовые таймеры счётчики — 2

Источники прерываний — 6

Биты защиты — 3

Разработка функционирования программы

Перед началом разработки алгоритма работы программы необходимо продумать назначение клавиш и индикацию на ЖКИ дисплее.

При включении устройства в сеть происходит автоматическое включение радио тюнера. Автоматический поиск станций продолжается до тех пор, пока не найдется активная радиостанция. Громкость по умолчанию 25% от мощности УЗЧ. Громкость звучания отображается как V и 15 — единиц громкости по шкале от 0−60.

Индикация на ЖКИ будет выглядеть следующим образом:

_

T

U

N

E

R

_

A

M

_

_

_

V

1

5

Рисунок 1 — Индикация на ЖКИ

Для регулировки громкости используем энкодер подключенный к выводам 3 и 4 буфера регистров БК-3.

Для перехода в режим авто магнитолы нажимаем клавишу 7, для возврата в режим радиоприемника нажимаем клавишу 8.

_

M

A

G

N

I

T

O

L

A

_

_

P

L

A

Y

V

1

5

Рисунок 2 — Индикация на ЖКИ

Для включения режима CD плеера нажимаем клавишу 13. Индикация на дисплее показана на рисунке 3.

_

C

D

-

P

L

A

E

R

_

_

_

S

T

O

P

V

1

5

Рисунок 3 — Индикация на ЖКИ

Клавиши 14, 17, 18 имеют многофункциональное назначение. В режиме авто магнитолы и CD плеера — это клавиши перемотка назад, играть остановить, перемотка вперед. В режиме радио НЧ ВЧ, AM FM, Выкл звук (MUTE).

Для того чтобы выводить на экран данные я решил объявить массив и в дальнейшем в цикле выполнять вывод массива с определёнными задержками между передачей каждого элемента на ЖК — индикатор. Чтобы экономить память, процедура вывода использует автоматический переход на вторую строчку с заполнением невидимых позиций нулями. Поэтому первая строчка заполняет первые 12 символ, вторая — вторые 12 символ.

Для удобства использования, большую часть флагов я задал как битовые, но некоторые флаги, например, направление перемотки, как байт, чтобы младшими битами каждой тетрады идёт перемотка и её направление. Так как всё подключено через буферный регистр, я запоминаю их состояния, текущее и предшествующее, чтобы выполнить сравнения.

Большая часть процедур вынесена в обработчик прерываний. В обработчике прерывания таймера задал предделитель равный 10 мс, что соответствует 20 Гц переполнения. Для того чтобы выполнить функцию счётчика времени подсчитали секунды, минуты, часы в диапазоне 60,60,24.

Для того, чтобы определить состояние датчиков, в обработчике таймера выполняется проверка текущего значения сейчас и в предыдущем такте таймера. Частота опроса 10 раз в секунду вполне достаточна. Если срабатывает в начале первый потом второй датчик, то производится прибавление, в противном случае производится вычитание.

Микровыключатели К1-К6 выполняют следующие функции:

К1 — прижатие головки;

К2 — подмотка вправо;

К3 — подмотка влево;

К4 — перемотка вправо;

К5 — перемотка влево;

К6 — автостоп

Для восприятия нажатия клавиатуры сигнал со специального клавиатурного шифратора К155ИВ3 заведён на прерывание EX1, что позволяет просто считав код нажатой клавиши, определить какое нужно выполнить действие: клавиша 0/1 переключает режимы. Далее идёт основная процедура (тело программы). В начале выполняется инициализация таймеров-счётчиков, далее разрешаются все требуемые прерывания, запускаются таймеры-счётчики, устанавливается в нужное состояние порты контроллера. После чего программа переходить в бесконечный цикл обслуживания, при этом на индикатор в цикле выводится время. Если не установлен режим сна, выполняется отображение режима тюнера или магнитофона при этом во второй строчке отображается частота настройки или метраж и режим работы магнитофона. Здесь же выполняется дополнительный блок функций: автоматический поиск предыдущей/ следующей станции или перемотка на предыдущую следующую песню. В таком режиме система функционирует всё время. Приращение часов, минут или убавление их производится в режиме сна по контролю флага sleep. Таким образом, обеспечивается полное управление всеми функциями простого музыкального центра, включающего в себя тюнер, CD плеер и магнитофон.

Заключение

В процессе выполнения курсового проекта по предмету «Микропроцессорные системы» я научился проектировать музыкальный центр под управление микропроцессорной системы на платформе МК 51.

Научился писать программу в среде Kiel для программирования системы управления музыкальным центром.

Полученные знания по предмету, несомненно, пригодятся в моей будущей карьерной деятельности.

Приложение 1

Схема устройства

Приложение 2

Листинг программы

микроконтроллер магнитола программа

#include < REG52. H> /* special function register declarations */

#include < stdio. h> /* prototype declarations for I/O functions */

#ifdef MONITOR51 /* Debugging with Monitor-51 needs */

char code reserve [3] _at_ 0×23; /* space for serial interrupt if */

#endif /* Stop Exection with Serial Intr. */

unsigned char dacnastr; //uroven U dla nastroiki priemnika

sbit bolch_mench=P33; //upravlen tranzistorami

sbit FM=P06;

sbit am=P07;

sbit upravl=P02;

sbit sda=0;

sbit scl=0;

sbit rs=0;

sbit e=0;

unsigned char takt, uprbyte;

unsigned char key, keyold;

unsigned char regim; //

unsigned char reginmagnit; //

unsigned char param[]={10,0,0}; // gromk bass & trable

unsigned char bas; //

unsigned char treble; //

unsigned char regimplai;

unsigned char unastr; //stupen nastr

unsigned char pp, i, j, n;

unsigned char parametr;

unsigned char line; //input line CD Magn, Radio

unsigned char sot, sek, min, chas;

unsigned char lcd1[]={0,0,0,0,0,0,0,0,0,0,0,0};

unsigned char lcd2[]={0,0,0,0,0,0,0,0,0,0,0,0};

unsigned char cd[]={0x5 °F, 0×43,0×44,0x2D, 0×50,0x4C, 0×41,0×45,0×52, 0x5 °F, 0x5 °F, 0x5F};

unsigned char tuner[]={0x5 °F, 0×54,0×55,0x4E, 0×45,0×52,0x5 °F, 0x, 0x, 0x, 0x, 0x};

unsigned char mag[]={0x5 °F, 0x4D, 0×41,0×47,0x4E, 0×49,0×54,0x4 °F, 0x4C, 0×41,0x5 °F, 0x5F};

void delay (void)//timeout na 5mks)

{

unsigned char k;

for (k=0; k<4;k++);

}

void i2c (void)//timeout na 5mks)

{

for (n=0; n<4;n++)//peredat 4 parametra

{

scl=1; delay ();sda=0;//start puls

pp=0xc0; //koman write parametr

for (j=0; j<8;j++)

{scl=0; delay ();pp=pp>>1;sda=CY;delay ();scl=1;delay ();delay ();}

if (n< 3)

{

pp=param[n]; if (n==1)pp=pp|0xc0;if (n==2)pp=pp|0×80;

for (j=0; j<8;j++)

{scl=0; delay ();pp=pp>>1;sda=CY;delay ();scl=1;delay ();delay ();}

}

else

{pp=line|0xe0; //set input line

for (j=0; j<8;j++)

{scl=0; delay ();pp=pp>>1;sda=CY;delay ();scl=1;delay ();delay ();}}

}

}

void 0int0 (void) interrupt 0 using 1

{

key=P1;

if (keyold==0)& &(key==1)

{

keyold=key; param[parametr]++; if (param[parametr]> =61)param[parametr]=60;

lcd[10]=param[parametr]/10+0×30; lcd[11]=param[parametr]%10+0×30;

}

if (keyold==1)& &(key==0)

{keyold=key; param[parametr]--; if (param[parametr]< =1)param[parametr]=1;

lcd[10]=param[parametr]/10+0×30; lcd[11]=param[parametr]%10+0×30;

}

if (keyold≠2)& &(key==2){line=0;for (j=0;j<12;j++)lcd1[j]= cd[j]; }//CD line

if (keyold≠3)& &(key==3){line=1;for (j=0;j<12;j++)lcd1[j]= tuner[j]; }//Tuner

if (keyold≠4)& &(key==4){line=2;for (j=0;j<12;j++)lcd1[j]= mag[j];} //Magnitofon

if (line==2)

{if (keyold≠5)& &(key==5){upravl=0;P2=0×10; upravl=1; }//peremotka left

if (keyold≠6)& &(key==6){

regimplai++; if (regimplai==3) regimplai=0; //stop

if (regimplai==1){upravl=0; P2=0×03; upravl=1; lcd[9]=0x3e;}//proigratpravo

if (regimplai==2){upravl=0; P2=0×05; upravl=1; lcd[9]=0x3e;}//proigratlevo

if (regimplai==0){upravl=0; P2=0×00; upravl=1; lcd[9]=0x3e;}//proigratpravo

if (keyold≠7)& &(key==7){upravl=0;P2=0×20; upravl=1; }//peremotka rich

}

if (line==0)

{

if (keyold≠5)& &(key==5){parametr=2;}//vibor treble

if (keyold≠6)& &(key==6){parametr=1;}//vibor bass

if (keyold≠6)& &(key==6){parametr=0;}//vibor bass

}

if (line==1) //upravlen tuner +nastorika

{

if (keyold==0)& &(key==1)

{keyold=key; unastr++; while (bolch_mench){unastr++; if (unastr> =255)unastr=254;}} //verner nastraivaet tuner

if (keyold==1)& &(key==0)

{keyold=key; unastr--;while (bolch_mench){unast--; if (unastr< =1)unastr=1;}}

if (keyold≠5)& &(key==5) { fm=1; am=0;}}//nastr FM diapazona

if (keyold≠6)& &(key==6){fm=0;am=1;}//vibor AM diapasona

if (keyold≠6)& &(key==7){fm=1;am=1;}//vibor FM2s diapazona

}

i2c (); //zapis v regulator ustanov parametr

}

void timer0int (void) interrupt 1 using 1

{TL0=0xff; //delid dla chastoti 10 000 mks — 10ms

TH0=0xb8;

if (++sot==100)//prohla sek

{

if (++sek==60)

{

sek=0;

if (++min==60)

{

min=0;

if (++chas==24) chas=0;

}

lcd2[1]=chas/10+0×30; lcd2[2]=chas%10+0×30;lcd2[3]=0x3a;

lcd2[4]=min/10+0×30; lcd2[5]=min%10+0×30;lcd2[6]=0x3a;

lcd2[7]=sek/10+0×30; lcd2[8]=sek%10+0×30;

}

}

}

void main (void)

void main (void) {

unsigned char i, p;

bit n1, n2;

/*------------------------------------------------

Setup the serial port for 9600 baud at 11. 0592MHz.

------------------------------------------------*/

#ifndef MONITOR51

SCON = 0×50; /* SCON: mode 1, 8-bit UART, enable rcvr */

TMOD |= 0×21; /* TMOD: timer 1, mode 2, 8-bit reload */

TH1 = 0xfd; /* TH1: reload value for 9600 baud @ 11. 0592MHz */

TR1 = 1; /* TR1: timer 1 run */

TR0 = 1;

TI = 1; /* TI: set TI to send first char of UART */

TI = 0; //set obrabot prerivanii

ET0 = 1;

EA = 1;

#endif

pp=0;

while (1)//osnovnoi cikl raboti

{

//out data lcd

e=0; rs=0;rw=0;P2=1;e=1;delay ();delay ();delay ();e=0;delay ();delay ();

for (j=0; j<12;j++)

{rs=1; rw=0;P2=lcd1[j];e=1;delay ();delay ();delay ();e=0;delay ();delay ();} //out 1

for (j=0; j<28;j++)

{rs=1; rw=0;P2=0×20;e=1;delay ();delay ();delay ();e=0;delay ();delay ();} //out ---- do end string

for (j=0; j<12;j++)

{rs=1; rw=0;P2=lcd1[j];e=1;delay ();delay ();delay ();e=0;delay ();delay ();} //out 2 string

}

for (j=0; j<255;j++) delay ();

}

ПоказатьСвернуть
Заполнить форму текущей работой