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

МПЗПК лаби / LR_PMZV-7

.doc
Скачиваний:
5
Добавлен:
18.03.2016
Размер:
2.99 Mб
Скачать

Міністерство освіти і науки, молоді та спорту України

Вінницький національний технічний університет

Інститут автоматики, електроніки та комп‘ютерних систем управління

Кафедра метрології та промислової автоматики

Методичні вказівки

до лабораторної роботи №7

по курсу : "Проектування мікропроцесорних засобів вимірювання "

«Послідовний зв’язок»

Вінниця - 2012

Мета: метою цієї лабораторної роботи є вивчення послідовних зв'язків з мікроконтролером MSP430. У цій лабораторній роботі ми будемо досліджувати програмне забезпечення UART і підключатись до ПК через порт USB.

• Зміна коду для запуску на WDT + Таймер

• Додає код для аналізу HI/LO/IN температурного діапазону

• Додає код UART для відправки даних на ПК через USB-COM порт

Порядок виконання роботи:

Створіть New Project

1. Створіть новий проект (File → New → CCS Project) і назвіть його Lab7. Зніміть прапорець “use default location” ("Використовувати за замовчуванням"). Використовуючи кнопку Browse... , перейдіть до папки: C:\MSP430_LaunchPad\Labs\Lab7\Project. Натисніть кнопку ОК, а потім натисніть кнопку Next. Наступні параметри у трьох вікнах вже повинні бути встановленими за замовчуванням (project type MSP430, no inter-project dependencies selected, and device variant set to MSP430G2231). Наступні параметри також встановіть за замовчуванням, а в останньому вікні натисніть кнопку Finish.

Створіть Source File

2. Додайте source file до проекту (File →New →Source File) та назвіть його Lab7.c та натисніть кнопку Finish.

Створіть lab7.c Source File

У цій лабораторній роботі ми будемо створювати програму, що передає "HI", "LO" або "IN" за допомогою програмного забезпечення UART коду. Ці дані будуть передані через порт USB COM-порт, а потім до ПК для відображення даних програми. Код UART використовує TIMER_A2, тому для початку роботи з новим кодом необхідно усунути залежність TIMER_A2 від нього. Потім ми додамо деякі "точки спрацьовування" коду. Внаслідок цього червоний або зелений світлодіод вказуватиме чи відбулась зміна темперетури. Потім ми додамо UART код і відправлятимемо повідомлення на ПК. Код файлу з останньої лабораторної роботи буде використовуватися в якості відправної точки.

3. Відкрийте Lab6a.txt використовуючи (File →Open File…)

C:\MSP430_LaunchPad\Labs\Lab6a\Files\Lab6a.txt

4. Скопіюйте весь код з Lab6a.txt та вставте його в Lab7.c. Це буде першим етапом до виконання задачі. Як ви помітили, це не малопотужний оптимізований код, який ми створили в останній частині LaB6. Реалізація програми потребує Timer_A2 UART, тому використання повністю оптимізованого коду буде неможливою. Але ми можемо зробити декілька коригувань і при цьому зберегти досить низьке електроспоживання.

Закрийте файл Lab6a.txt. Він більше не знадобиться.

5. В якості тесту, виконайте завантаження і запуск коду. Якщо все працює правильно, то зелений світлодіод буде мерехтіти приблизно один раз в 3 секунди, проте, тривалість мерехтіння буде короткою. Код має функціонувати так само, як і в попередній лабораторній роботі. Коли закінчите, зупиніть код і натиснувши кнопку Terminate all, щоб повернутися в C/C ++.

6. Необхідно усунути залежність попереднього коду з Timer_A2. WDT+ потрібно налаштовати в якості інтервального таймера. Виконайте зміни функції ConfigWDT(), як наведено нижче:

void ConfigWDT(void)

{

WDTCTL = WDT_ADLY_250; // <1 сек інтервал WDT

IE1 |= WDTIE; // Вкл. переривання WDT

}

Вибір інтервалів з WDT+ дещо обмежений, проте WDT_ADLY_250 дасть затримку трохи менше ніж 1 сек, працюючи на VLO.

WDT_ADLY_250 встановлює наступні біти:

•WDTPW: WDT пароль

• WDTTMSEL: Вибір інтервалу таймера

• WDTCNTCL: Очищує значення лічильника

• WDTSSEL: WDT вибір джерела

7. Код в Timer_A0 ISR повинен працювати, коли виконується переривання запуску WDT+:

Змініть:

// Timer_A2 обслуговування переривання #pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A (void)

{

На:

// WDT обслуговування переривання #pragma vector=WDT_VECTOR

__interrupt void WDT(void)

{

8. Звертання CCR0 до WDT ISR у даному випадку непотрібне. Видаліть рядок CCR0 + = 36000; Крім того, зараз немає ніякої необхідності створення Timer_A2. Видаліть весь код всередині функції ConfigTimerA2().

9. Виконайте завантаження і запуск коду. Якщо все працює правильно, то зелений світлодіод буде мерехтіти приблизно один раз в секунду. Зупиніть виконання коду і натисніть кнопку Terminate all, щоб повернутися в C/C++. Якщо необхідно, цей код можна знайти у файлі Lab7a.txt у папці Files.

10. Потім видаліть обидва рядки P1OUT в WDT ISR. Нам знадобляться обидва світлодіода для продовження виконання роботи.

11. Ми повинні змінити контакти передачі і прийому (P1.1 та P1.2) на MSP430 від GPIO для функції TA0. Змініть код наступним чином:

void ConfigPins(void)

{

P1SEL |= TXD + RXD; // P1.1 & 2 TA0, інше GPIO

P1DIR = ~(BIT3 + RXD); // P1.3 вхід, інші виводи

P1OUT = 0; // очищ. виводи

P2SEL = ~(BIT6 + BIT7); // ств. P2.6 & 7 GPIO

P2DIR |= BIT6 + BIT7; // P2.6 & 7 виводи

P2OUT = 0; // очищ. виводи

}

12. Нам знадобиться функція, що обробляє передачу даних. Додайте наступне у кінець Lab7.c з файлу Transmit.txt, що знаходиться в папці Files:

// Function Transmits Character from TXByte

void Transmit()

{

BitCnt = 0xA; // завантаження розрядного лічильника, 8data + ST/SP

while (CCR0 != TAR) // запобігання асинхронного захоплення

CCR0 = TAR; // поточний стан лічильника TA

CCR0 += Bitime; // певний час до першого біта

TXByte |= 0x100; // додається знак зупинки до TXByte

TXByte = TXByte << 1; // додається простір до стартового біта

CCTL0 = CCIS0 + OUTMOD0 + CCIE; // TXD = знак = простій

while ( CCTL0 & CCIE ); // Очікування завершення TX

}

Не забудьте додати оголошення функції на початку Lab7.c:

void Transmit(void);

13. Передача послідовної інформації відбувається за допомогою Timer_A2, він забезпечує усі часові інтервали, необхідні для швидкості 2400 бод. Скопіюйте вміст Timer_A2 ISR.txt та вставте його у кінець Lab7.c:

// Timer A0 обслуговування переривання

#pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A (void)

{

CCR0 += Bitime; // додає Offset до CCR0

if (CCTL0 & CCIS0) // TX вкл. CCI0B?

{

if ( BitCnt == 0)

{

CCTL0 &= ~ CCIE ; // усі біти TXed, викл. переривання

}

else

{

CCTL0 |= OUTMOD2; // TX простір

if (TXByte & 0x01)

CCTL0 &= ~ OUTMOD2; // TX Mark

TXByte = TXByte >> 1;

BitCnt --;

}

}

}

14. Налаштуйте Timer_A2. Введіть наступні рядки у функцію ConfigTimerA2() в Lab7.c, це має виглядає так:

void ConfigTimerA2(void)

{

CCTL0 = OUT; // TXD Idle as Mark

TACTL = TASSEL_2 + MC_2 + ID_3; // SMCLK/8, безперервний режим

}

15. Щоб код працював, додайте наступне у верхню частину Lab7.c:

#define TXD BIT1 // TXD вкл. P1.1

#define RXD BIT2 // RXD вкл. P1.2

#define Bitime 13*4 // 0x0D

unsigned int TXByte;

unsigned char BitCnt;

16. Зробіть тестову перевірку коду, виконавши:

Project →Build Active Project

Перевірте код на наявність синтаксичних помилок.

17. Додайте наступне оголошення на початку Lab7.c:

volatile long tempSet = 0;

volatile int i;

В змінну TempSet буде записано перше прочитане значення температури за допомогою ADC10. В подальшому ми порівняємо його з новим виміряним значенням температури для того, щоб встановити її збільшення або зменшення.

18. Додайте наступний код управління в цикл while(1):

_bis_SR_register(LPM3_bits + GIE);

Цей код доступний у файлі While.txt:

if (tempSet == 0)

{

tempSet = tempRaw; // Set reference temp

}

if (tempSet > tempRaw + 5) // тест для lo

{

P1OUT = BIT6; // зелений LED вкл.

P1OUT &= ~BIT0; // червоний LED викл.

for (i=0;i<5;i++)

{

TXByte = TxLO[i];

Transmit();

}

}

if (tempSet < tempRaw - 5) // тест для hi

{

P1OUT = BIT0; // червоний LED вкл.

P1OUT &= ~BIT6; // зелений LED викл.

for (i=0;i<5;i++)

{

TXByte = TxHI[i];

Transmit();

}

}

if (tempSet <= tempRaw + 2 & tempSet >= tempRaw - 2)

{ // тест для діапазону in

P1OUT &= ~(BIT0 + BIT6); // всі LEDs вимкнені

for (i=0;i<5;i++)

{

TXByte = TxIN[i];

Transmit();

}

}

Даний код встановлює три стани для температури: «LO», «HI» та «IN»; індикація цих станів відбувається станом зеленого і червоного світлодіодів. Код також посилає ASCII до Transmit().

19. Пакетні дані ASCII, що будуть передаватися на ПК:

• LO<LF><BS><BS>: 0x4C, 0x4F, 0x0A, 0x08, 0x08

• HI<LF><BS><BS>: 0x48, 0x49, 0x0A, 0x08, 0x08

• IN<LF><BS><BS>: 0x49, 0x4E, 0x0A, 0x08, 0x08

Програма на ПК інтерпретується за допомогою коду ASCII і відображає відповідні символи.

Додайте наступні масиви на початок Lab7.c:

unsigned int TxHI[]={0x48,0x49,0x0A,0x08,0x08};

unsigned int TxLO[]={0x4C,0x4F,0x0A,0x08,0x08};

unsigned int TxIN[]={0x49,0x4E,0x0A,0x08,0x08};

Тестування коду

20. Виконайте завантаження і запуск коду. Якщо у вас виникли проблеми з кодом, порівняйте його з кодом, що знаходиться у файлі Lab7Finish.txt у папці Files.

21. Переконайтесь, що COM-порт вашого LaunchPad підключений до ПК. В ОS Windows, виконайте наступні операції : «Пуск → Выполнить» і введіть в діалогове вікно: devmgmt.msc, а потім натисніть OK. Повинен відкритись Диспетчер устройств OS Windows.

Поряд з вкладкою «Порты» натисніть кнопку «+» і знайдіть порт з ім'ям MSP430 Application UART. Запишіть номер COM-порту тут: _________. (Наприклад: COM45). Закрийте Диспетчер устройств.

22. CCS повинен бути відображений в Debug. Натисніть View → Other…, а у вікні Show View , натисніть кнопку «+» поруч з Terminal . Оберіть Terminal нижче, і натисніть кнопку OK.

23. Terminal відображається на екрані. Натисніть кнопку Settings , і задайте наступні параметри:

Далі натисніть кнопку OK.

24. Запустіть код. У Terminal Pane, ви можете побачити стан температури «IN», індикація якого повторюватиметься знову і знову. Для усунення цього клацніть правою кнопкою миші в Terminal pane і оберіть «Clear All». Запустіть код на виконання. Коли температура на MSP430 підніметься, червоний світлодіод буде світитись і у Terminal Pane відобразиться стан температури «HI». Коли температура на MSP430 спаде, зелений світлодіод буде світитись і у Terminal Pane відобразиться стан температури «LO». За прийнятної температури обидва світлодіоди будуть вимкнені, і у Terminal Pane відобразиться стан температури «IN». Занотуйте розмір згенерованого коду. У Console pane, що в нижній частині екрана, можна побачити:

MSP430: Program loaded. Code Size - Text: 770 bytes Data: 58 bytes

На підставі того, що ми робили досі, можна створити проект з удвічі більшим розміром, що без проблем розміститься у пам'яті MSP430G223. Коли ви закінчите, зупиніть код.

Завершення сеансу налагодження і закриття проекту

25. Завершіть активний сеанс налагодження за допомогою кнопки Terminate All.

26. Далі, закрийте проект натиснувши правою кнопкою миші по Lab7 у вікні C/C++ Projects і оберіть Close Project.

Соседние файлы в папке МПЗПК лаби