Реферат: Проектирование удаленного устройства индикации
--PAGE_BREAK--Рис.1 Схемавключениямикроконтроллера
2.2 Формированиетактовыхимпульсов
Тактовыеимпульсыдляработымикроконтроллераможно формироватьспомощьюлибовстроенногогенератораимпульсов, либоподключаявнешнийгенераторнакварцевомрезонаторе. Внутреннийгенератортактовыхимпульсоввнашемслучаене обеспечитнеобходимуюстабильностьдляработысинтерфейсомRS-485, поэтомумыбудемиспользоватьвнешнийкварцевыйгенератор на7.3728 MHz. Дляработынатакойчастотеразработчикифирмы ATMELсоветуютиспользоватьдвадополнительныхконденсатора емкостью22 pF, включенныепоследующейсхеме:
<img width=«474» height=«126» src=«ref-1_1278486468-7158.coolpic» v:shapes=«Рисунок_x0020_2»>
2.3 Схемасброса
Схемасбросадолжнаформироватьимпульслогическогонулядля подачиегонаинверсныйвыводсбросамикроконтроллераRESET. Это импульсдолженформироватьсяпри, например, нажатиинакнопку сбросаустройстваилиприпереключенииключа. Кромеэтого, этот сигналсбросадолженподаватьсяинавыводсбросаLCD— дисплея.
Длятакойсхемыподходитвключениетранзистора, показанноена рис.3. Когдаключоткрыт, транзисторнаходитсявзакрытом состоянииинавходыRESETAVRиRSTLCD-дисплеяпоступает сигналлогическойединицы. Когдаключзамыкается, транзистор открываетсяинавходысбросаустройствпоступаетсигнал логическогонуля.
<img width=«437» height=«267» src=«ref-1_1278493626-5847.coolpic» v:shapes=«Рисунок_x0020_3»>
Рис.3 Схемаформированиясигналасброса
2.4 Схемывходныхивыходныхустройств
Входнымустройствомвнашемпроектеявляетсямикросхема обеспечениясвязипопротоколупередачиданныхRS-485 МАХ485 со следующимиэлектрическимихарактеристиками:
Изэтихпараметроввидно, чтомикросхемаМАХ485 согласуетсяс микроконтроллеромATmegal6.
<img width=«474» height=«174» src=«ref-1_1278499473-6854.coolpic» v:shapes=«Рисунок_x0020_4»>
Рис. 4 ПодключениемикросхемыMAX4S5
Выходноеустройствожидкокристаллическийграфический дисплейBG12864DфирмыBolyminсовстроеннымконтроллером Т6963С. Этотдисплейобладаетследующимихарактеристиками:
•Механическиехарактеристики
•Назначениевыводов
ВсоответствиисэтимипараметрамисхемаподключенияLCD-дисплеякмикроконтроллерубудетследующей:
<img width=«411» height=«400» src=«ref-1_1278506327-16062.coolpic» v:shapes=«Рисунок_x0020_5»>
2.5 Схемастабилизаторанапряжения
Вкачествестабилизаторанапряжениявнашемустройстве используетсяимпульсныйпонижающийстабилизаторLM2574, который обладаетследующимихарактеристиками:
• входноенапряжение— до60 V{дляHVверсий)
• выходноенапряжение— 3.3 V, 5 V, 12 V, 15V
• выходнойток— 0.5 А
Схемавключениястабилизаторадляпреобразования+10 V— +5 Vприведенанарис.6:
<img width=«424» height=«128» src=«ref-1_1278522389-5869.coolpic» v:shapes=«Рисунок_x0020_6»>
Рис. 6 (Схема стабилизатора напряжения
3. Проектированиепрограммногообеспечения микроконтроллера
3.1 Проектированиефункцииинициализациимикроконтроллера
Процедураинициализациимикроконтроллерадолжнасостоятьиз процедурилиоператоровинициализациивсехузловсамого микроконтроллераивсехпериферийныхустройств, иустановитьвсе начальныезначениядляихрегистров. Такимобразом, мыдолжны проинициализироватьследующиеузлыустройства— портА, портС, УСАПП, таймер0 иLCD-дисплей.
ПортыАиСвначалеработыустройстваработаюттолькона выводданных, поэтомуприихнастройкенеобходимов соответствующиерегистрыDDRxзаписатьзначение0, темсамым настроив все их выводы на передачу данных. Для этого используются две процедуры;
voidInitPortAWrite(void){
DDRA= Oxff; }
void InitPortCWrite(void){ DDRC = Oxff; PORTC = 0x30;
ИнициализациятаймераОпроходитпоследующемуалгоритму— устанавливаетсяделительчастотына1024 записьюзначения5 в регистрTCCRO. Затемразрешаетсяпрерываниеэтоготаймераи устанавливаетсяегоначальноезначение:
void InitTimer(void)
i
_disable_interrupt() ;
TCCRO= 5;// установитьделительчастоты1024
TIMSK|= (1 «TOIEO); // разрешитьпрерываниятаймера
TCNTO = TmrO_Reload;
enable_interrupt{);
]
ИнициализацияУСАППработаетследующимобразом— врегистр
UBRRзаписываетсязначение, котороесоответствуетзаданной скоростипередачиданныхдлясоответствующейчастотыработы микроконтроллера.
УСАПП и параметры кадра данных. Кроме этого, т.к. прием и обработка данных в программе происходит через кольцевой буфер, то в процедуре инициализации необходимо провести начальные установки для головы и хвост буфера — обнулить их.
void USART_Init( unsigned int baudrate )
i
unsigned char x;
UBRROH = (unsigned char) (baudrate»8); UBRROL = (unsigned char) baudrate;
UCSRB = ({1 «RXCIE) j <1«ЮСЈН) ) ;
UCSRC = (1«URSEL) | (3«UCSZO) | (1«UPM1);
x = 0;
USART_RxTail = x; USARTJRxHead = x;
}
3.2 Проектирование процедур обработки прерываний
В процессе работы нашего устройства могут возникнуть два прерывания — от таймера 0 и от УСАПП. Прерывание от таймера О обрабатывается очень просто: перезагружается начальное значение и флаг его срабатывания устанавливается в 1.
pragma vector=TIMERO_OVF_vect
interrupt void TIMERO_OVF_interrupt(void)
{
TCNT0=TmrO_Reload; TmrOFlag= 1;
}
ПрерываниеотУСАППговоритотом, чтоприемпакетаданных былзаконченипринятвбуферныйрегистрUDR. Обработчикэтого прерываниядолженпринятьэтиданныеипоместитьвкольцевой буфер. Дляэтогодолженбытьрассчитанновыйиндексбуфера (указательголовы) иеслиэтотиндексвдругсталравенуказателю хвоста, этоговоритотом, чтопроизошлаошибкаибуфер приемникапереполнился.
^pragma vector=USART_RXC__vect
^interrupt void USART_RX_interrupt{ void )
{
unsigned char data; unsigned char tmphead;
data = UDR;
tmphead = ( USART_RxHead + 1 );
USART_RxHead= tmphead; /* СохранитьновыйиндексV
if < tmphead == USART_RxTail )
(
/* Ошибка! Буфферприемникапереполнен*/
)
USART_RxBuf[tmphead] = data; /* Сохранитьполученныеданныевбуффере*/
}
3.3 Проектированиепроцедурвводаинформации
Вводинформациивразрабатываемоеустройствоосуществляется черезУСАППпопротоколуRS-4 85. Какужеотмечалось, прием данныхвпрограммепроисходитпопрерываниюотУСАПП, обработчик которогопомещаетпринятыйбайтвОуферприемника. Вглавной программе, длятого, чтобыможнобылоанализироватьэтотбуфери читатьданныеуженепосредственноизнего, необходимапроцедура, котораябудетдоставатьданныеизбуфератакимобразом, чтобы первымипоступалибайты, попавшиевбуферраньшевсех. Это делаетпроцедураUSART_Receive(), котораясначалаждет поступленияданныхвбуфер, азатемпоодномубайтудостаетих оттуда.
BYTE USART_Receive( void )
1
unsigned char tmptail;
while ( USARTJixHead == USART_RxTail )
;
tmptail = USART_RxTail + 1; USART_RxTail = tmptail; return USART_RxBuf[tmptail];
f
3.4 Проектированиепроцедурвыводаинформации
ВыводинформациивнашемустройствеосуществляетсянаLCD-дисплей. Основнойпроцедурой, котораяотображаетстроки поступившихданныхнадисплее— этопроцедураAutoWriteMode(), котораяпосутиуправляетдисплеем, выводянанего последовательносимволы, хранящиесявглобальноммассиве OutString[], врежимеавтозаписи, Приэтомнамнеобходимотолько менятьадреспозиции, вкоторуювыводятсяданные.
WORD AutoWriteMode(WORD Address, BYTE NumBytes)
{
SetAddressPointer(Address); SendCommanct{SET_DATA_AUTO_HRITE_COMMAND);
forfint i = 0; i < NumBytes; i++) {
AutoWrite(OutString[i]);
Address++; }
SendCommand(AUTO_RESET_COMMAND); return Address; }
3.5 Проектирование процедур управления периферийными устройствами
Все процедуры управления LCD-дисплеем осуществляются согласно системе команд встроенного контроллера Т6963:
<img width=«261» height=«98» src=«ref-1_1278528258-5423.coolpic» v:shapes=«Рисунок_x0020_7»> продолжение
--PAGE_BREAK--
еще рефераты
Еще работы по коммуникациям
Реферат по коммуникациям
Жидкие кристаллы как основа развития современных технологий
2 Сентября 2013
Реферат по коммуникациям
Управление динамической системой
2 Сентября 2013
Реферат по коммуникациям
Система отображения и регистрации информации
2 Сентября 2013
Реферат по коммуникациям
Проектирование цифрового фильтра верхних частот
2 Сентября 2013