Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Передача данных на контроллер по UART через COM порт и вывод их на LCD дисплей






 

Рис 30. - Схема приема от COM порта по UART

 

Цель работы:

Научиться передавать данные через виртуальный COM порт компьютера на МК.

Ход работы:

Выбрать в CodeWizard закладки: Сhip, USART, LCD (см. рис. 31).

 

  Рис. 31 – Закладки Сhip, USART, LCD в CodeWizard

 

Нажимаем, на шестеренку.

 

/*****************************************************

Chip type: ATmega16

Program type: Application

AVR Core Clock frequency: 1, 000000 MHz

*****************************************************/

#include < mega16.h>

#include < alcd.h>

#include < stdio.h>

#define FRAMING_ERROR (1< < FE)

#define PARITY_ERROR (1< < UPE)

#define DATA_OVERRUN (1< < DOR)

#define DATA_REGISTER_EMPTY (1< < UDRE)

#define RX_COMPLETE (1< < RXC)

#define RX_BUFFER_SIZE 16

#define TX_BUFFER_SIZE 16

char rx_buffer[RX_BUFFER_SIZE];

char tx_buffer[TX_BUFFER_SIZE];

unsigned char rx_wr_index, tx_rd_index, rx_counter, tx_counter, rx_rd_index;

bit rx_buffer_overflow;

interrupt [USART_RXC] void usart_rx_isr(void)

{

char status, data;

status=UCSRA;

data=UDR;

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)

{

rx_buffer[rx_wr_index++]=data;

if (++rx_counter == 0)

{

if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;

if (++rx_counter == RX_BUFFER_SIZE)

{

rx_counter=0;

rx_buffer_overflow=1;

}

}

}

}

interrupt [USART_TXC] void usart_tx_isr(void)

{

if (tx_counter)

{

--tx_counter;

UDR=tx_buffer[tx_rd_index++];

if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;

}

}

#ifndef _DEBUG_TERMINAL_IO_

// Get a character from the USART Receiver buffer

#define _ALTERNATE_GETCHAR_

#pragma used+

char getchar(void)

{

char data;

while (rx_counter==0);

data=rx_buffer[rx_rd_index];

if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;

#asm(" cli")

--rx_counter;

#asm(" sei")

return data;

}

#pragma used-

#endif

void main(void)

{

DDRC=0xFF;

UCSRB=0xD8;

UCSRC=0x86;

UBRRL=0x06;

lcd_init(16);

#asm(" sei")

while (1)

{

while(j< 5) // цикл пока все 5 символов не будут выведены на экран

{

lcd_gotoxy(j, 0); //выбираем место куда будет выводиться символ

lcd_putchar(getchar()); //выводим на экран

j++; //увеличить счетчик

}

j=0; // обнулить счетчик

}

 

 

}

 

Двойным кликом на контроллер открыть меню, и выбрать hex файл который появился в результате компиляции.

Нужно указать в настройках компонента COMPIM порт с которого будут считываться данные.

 

 

Рис.32 Выбор порта

 

В случае если мы хотим отправлять данные с этого же компьютера мы должны указать виртуальный порт. Пару связанных COM портов мы создаем при помощи программы com0com. Важное замечания: для 64-битных систем нужно искать программу com0com с подписанными драйверами.

Запускаем симуляцию.

При помощи терминала отправляем данные на МК.

 

От симуляции можно легко перейти к работе с реальным железом.

Если у вашего пк есть COM порт, то вам для сопряжения с микроконтроллером понадобится преобразователь уровней ТТЛ – RS232. Его легко собрать на микросхеме MAX232. Он нужен, потому что напряжение на выходе данных из COM-порта ПК:

· логическая " 1" от -5 до -15 вольт

· логический " 0" от +5 до +15 вольт

а в МК

· логическая " 1" от 1, 8 до напряжения питания вольт

· логический \" 0\" от 0 до 1, 3 вольт

Схема подключения RS232 примерно такая:

 

 

Если у вашего ПК нет СОМ-портов, то нужно юзать адаптер на микросхеме FT232 - он подключается к USB вашего ПК и в системе появляется виртуальный СОМ порт, а на выводах FT232 соответствующие сигналы UART.

 

.

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2026 год. (0.091 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал