TCC - Leonardo Santos
TCC - Leonardo Santos
TCC - Leonardo Santos
DE PERNAMBUCO
Engenharia da Computação
Agradeço com grande orgulho a minha família, pois ela tem se dedicado me
ajudando a conquistar essa vitoria. Em todos os momentos pude contar com o
apoio, a disciplina e os conselhos que me fizeram vencer. Em especial quero
agradecer a meus pais, Fátima e Leal, pois eles são a grande parte das minhas
vitorias.
i
Abstract
Each day, with the embedded systems technologies growing, the use of
microcontrollers has been more common. This kind of component has a lot of
advantages, like small energy consumption, high or low level of programming, and
others. There is always the necessity of communications between computers and
embedded systems, for diagnosis, monitoring or data transfers. Thus, is always
necessary a simple communication way avaliable for at a sort of equipments. This
work purposes na USB communication system with microcontrollers development.
This system is designed for giving communications in projects in development,
developed or in planning, because it can be added as a module with another
systems. There is already inside the system all the necessary configurations for
giving USB communication. This work also purposes a library of functions for USB
communication, providing configuration facilites, better level of low level
programming abstraction, instructions of use for custom system development or
another funcionalities, if necessary. All the development in this work is made using
high-level programming language.
ii
Sumário
Capítulo 1 .........................................................................................................8
Introdução.........................................................................................................8
Capítulo 2 .......................................................................................................10
Microcontroladores .........................................................................................10
2.1.1 Memória.......................................................................................11
2.1.2 ALU..............................................................................................11
2.1.5 Interrupções.................................................................................12
Capítulo 3 .......................................................................................................13
3.1 Conectores.......................................................................................14
iii
3.5.4 Outros.............................................................................................20
Capítulo 4 .......................................................................................................22
Capítulo 5 .......................................................................................................53
Bibliografia ......................................................................................................55
Apêndices .......................................................................................................56
iv
Índice de Figuras
Figura 1. Comparativo entre as formas de comunicação em relação à
velocidade. ................................................................................................................14
Figura 19. Resposta obtida pelo envio do comando Ler EEPROM ................52
Figura 21. Resposta obtida pelo envio do comando Mostrar Rotina ..............52
v
Índice de Tabelas
Tabela 1. Pinagem dos conectores USB. .......................................................15
vi
Tabela de Símbolos e Siglas
USB - Universal Serial Bus
FS - Full Speed
LS - Low Speed
CP - Code-Protect bit
vii
Capítulo 1 – Introdução
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
Capítulo 1
Introdução
Há uma tendência nos dias atuais para a utilização da comunicação USB
devido a sua gama de vantagens em relação a outros tipos de comunicação, como
por exemplo, possuir configuração fácil por parte do usuário, ter um baixo custo de
desenvolvimento, ter disponível vasta documentação e suporte, entre outras. Neste
trabalho foram observadas essas vantagens tornando a comunicação USB em
microcontroladores como alvo principal. A comunicação USB proporciona uma
conexão padrão para diversos tipos de dispositivos tornando muito fácil a instalação
deste projeto em qualquer computador. Esse tipo de comunicação também
proporciona a rápida utilização após a instalação, característica chamada de “plug
and play”.
Neste trabalho foi proposto esse tipo de comunicação pela razão de ampla
compatibilidade com diversas plataformas e sistemas operacionais. O Windows, por
exemplo, o suporta desde a versão 98. Sistemas operacionais Linux e Mac também
são compatíveis.
9
Capítulo 2 – Microcontroladores
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
Capítulo 2
Microcontroladores
Microcontrolador é um circuito integrado composto por um microprocessador
e dispositivos periféricos essenciais para o seu funcionamento como: memória de
programa e de dados; e também periféricos acessórios como: interfaces de entrada
e saída de dados. Os microcontroladores também são equipados com diversos
circuitos eletrônicos tais como: conversor analógico digital, temporizadores,
comparadores, interfaces de comunicação, geradores de pulsos, entre outros.
São muito populares devido ao seu baixo custo. Isso vem tornando os
microcontroladores como soluções de viabilidade de vários projetos que tem como
prioridade o baixo consumo de energia. Por serem programáveis podem ser
utilizados nas mais diversas aplicações em sistemas embarcados, como celulares,
eletrodomésticos, equipamentos de automação industrial, relógios, alarmes,
brinquedos e outros, pois podem ser desenvolvidos para aplicações especificas.
Uma grande parte de componentes eletrônicos hoje é composta por
microcontroladores.
Além de terem baixo custo como vantagem ainda consomem pouca energia,
são portáteis, eliminam a necessidade de muitos componentes externos, podem ser
reconfigurados com facilidade e necessitam de pouco tempo para o
desenvolvimento.
10
Capítulo 2 – Microcontroladores
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
2.1.1 Memória
2.1.2 ALU
11
Capítulo 2 – Microcontroladores
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
2.1.5 Interrupções
12
Capítulo 3 – Universal Serial Bus (USB)
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
Capítulo 3
13
Capítulo 3 – Universal Serial Bus (USB)
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
3.1 Conectores
Existem vários tipos de conectores, contudo todos seguem o mesmo padrão
de fabricação. A Figura 2 mostra a diversidade dos conectores e as diferenças
físicas entre eles. Os diversos tipos têm a função de evitar conexões perigosas, isto
é, que possam danificar algum dispositivo, como por exemplo, encadeamentos com
dispositivos não permitidos ou concatenação de cabos. Os conectores mini foram
criados para dispositivos menores como telefones celulares, PDAs, maquinas
fotográficas, etc.
14
Capítulo 3 – Universal Serial Bus (USB)
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
15
Capítulo 3 – Universal Serial Bus (USB)
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
16
Capítulo 3 – Universal Serial Bus (USB)
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
para a transmissão de arquivos, pois provê forte controle de erros, assim como a
transferência de controle. Os dispositivos de armazenamento como pen drivers,
cartões de memória, impressoras, scanners entre outros usam este tipo de
transferência.
17
Capítulo 3 – Universal Serial Bus (USB)
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
3.4 Descritores
Todos os dispositivos USB têm uma hierarquia de descritores que informam
ao host o que compõe o dispositivo e suas características de funcionamento, como:
número de série do produto, identificação do fabricante, tipo do dispositivo
(impressora, scanner, modem, mouse, etc.), número de configurações, número de
endpoint (local físico onde será armazenado o fluxo de dados), tipo de transferência,
tipo de interface, entre outros. É possível visualizar a hierarquia dos descritores
analisando a Figura 6.
18
Capítulo 3 – Universal Serial Bus (USB)
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
Os dispositivos que fazem parte desta classe USB são dispositivos que
geralmente ajudam os operadores a se comunicar de maneira fácil com os
computadores. Sua instalação é simples, pois já estão previamente definidos os
protocolos de comunicação para estes dispositivos. São dispositivos HID os mouses,
teclados, controladores de jogos, entre outros.
19
Capítulo 3 – Universal Serial Bus (USB)
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
3.5.4 Outros
20
Capítulo 3 – Universal Serial Bus (USB)
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
21
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
Capítulo 4
22
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
23
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
24
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
25
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
• 4 Timers;
• 1 Módulo Capture/Compare/PWM;
• 2 Comparadores;
26
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
28
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
29
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
30
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
31
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
32
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
33
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
34
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
36
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
Os valores possíveis para os escalares PLL são divididos em dois tipos: pré
escalares e pós escalares. Os valores de pré escalares são chamados de PLLDIV e
são PLL1, PLL2, PLL3, PLL4, PLL5, PLL6, PLL10 e PLL12. Os valores de pós
escalares são chamados de CPUDIV e são CPUDIV1, CPUDIV2, CPUDIV3 e
CPUDIV4.
Freqüência
Freqüência do
do
PLLDIV Modo de clock CPUDIV clock do
oscilador
microcontrolador
de entrada
None (00) 20 MHz
HS, EC, ECIO ÷2 (01) 10 MHz
÷3 (10) 6.67 MHz
20 MHz ÷5 (100) ÷4 (11) 5 MHz
÷2 (00) 48 MHz
HSPLL, ECPLL, ECPIO ÷3 (01) 32 MHz
÷4 (10) 24 MHz
÷6 (11) 16 MHz
controlado pela PLL pós escalar. Este valor recebido pelo módulo PLL pós escalar é
dividido por 2, conforme CPUDIV1 e é enviado para o núcleo do microcontrolador.
Como foi observado o núcleo do microcontrolador e o periférico USB, ambos
trabalham com a freqüência de 48 MHz.
Neste projeto foi usada a alimentação pela comunicação USB. Isso torna o
circuito mais portátil e mais prático. Não é necessária a substituição de
pilhas/baterias ou a preocupação de ter disponível tensão ao executar as funções do
circuito. O esquema elétrico desta ligação segue a especificação da Figura 9.
38
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
39
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
Diretiva Descrição
#define Definição de constantes de cadeia de caracteres
#include Incluir arquivos de códigos fontes
#fuses Define os bits de configuração
#use delay Informa ao compilador o valor da freqüência em Hz
40
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
#define INSTRUCOES 00
#define LEITURA 01
#define GRAVACAO 02
#define ROTINA 03
#define DESCONECTAR 04
#use delay(clock=48000000)
#include <18F4550.h>
#include <usb_biblioteca.h>
dados do tipo de dispositivo USB CDC. Ele inclui com a diretiva #include, o arquivo
usb_cdc.c que contém mais funções para esse tipo de comunicação. O arquivo
usb_cdc.h é um arquivo de suporte do compilador CCS. No arquivo USB_cdc.c é
incluído o arquivo de descritores, o USB_desc_TCC.
O programa oferece cinco opções, são elas: Instruções, Ler EEPROM, Gravar
na EEPROM, Mostrar a Rotina e Desconectar dispositivo.
42
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
Opções:
00 -> Instruções
01 -> Ler EEPROM
02 -> Gravar na EEPROM
03 -> Mostrar Rotina
04 -> Desconectar\n"};
43
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
ser gravado nesta quantidade de bytes, o valor será truncado. A sua representação
no microcontrolador é o hexadecimal 02. Os valores são recebidos com o uso da
função gethex_usb() descrita na biblioteca.
Existe um fluxo no programa que mostra uma mensagem ao usuário caso ele
forneça algum comando não definido. O microcontrolador informa ao usuário a
mensagem “Digite um valor válido!” conforme o trecho de código abaixo. Este fluxo
funciona como filtro para não serem inseridos valores que provoquem um
funcionamento não esperado.
44
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
esse dado e verifica que comando foi acionado e executa a devida tarefa. O
comando que encerra a execução do programa é o de Desconectar.
4.4.7 Simulação
45
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
46
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
47
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
48
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
49
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
50
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
Os comandos são os valores “00”, “01”, “02”, “03”, “04” que representam
respectivamente Instruções, Ler EEPROM, Gravar na EEPROM, Mostrar Rotina,
Desconectar. A resposta dos comandos Instruções, Ler EEPROM, Gravar na
EEPROM, e Mostrar Rotina podem ser observados respectivamente na Figura 18,
Figura 19, Figura 20 e Figura 21.
51
Capítulo 4 – Sistema de Comunicação USB com Microcontrolador
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
52
Capítulo 5 – Conclusão e Trabalhos Futuros
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
Capítulo 5
53
Capítulo 5 – Conclusão e Trabalhos Futuros
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
54
Bibliografia
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
Bibliografia
[1] S. C. Oliveira, “Sistema de Detecção Óptica de Descargas Parciais em Cadeias
de Isoladores de Transmissão de Alta Tensão”. 119 f. Tese de Doutorado,
Depto. de Engenharia Elétrica da Universidade Federal de Pernambuco, Recife
– PE, Brasil, 2008.
[9] Serial Port Terminal – Test and debug drial port devices with advanced serial
port terminal, disponível em http://www.eltima.com/products/serial-port-terminal.
Acessado em 08/06/2009.
55
Apêndices
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
Apêndices
Arquivo usb_serial_TCC.h
// Inclue a biblioteca basica do PIC 18F4550
#include <18F4550.h>
#define INSTRUCOES 00
#define LEITURA 01
#define GRAVACAO 02
#define ROTINA 03
#define DESCONECTAR 04
void main()
{
// Declaração de variaveis
int address, value, opcao;
unsigned long int cont = 0;
do
{
if (usb_enumerated()) // Verifica se o dispositivo está pronto
56
Apêndices
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
{
// Simula uma rotina de um processo qualquer usual de microcontrolador
cont++;
// Verifica se existe caracter para recepção
if(usb_cdc_kbhit())
{
// Recebe um hexadecimal
opcao = gethex_usb();
// As opções são 00, 01, 02, 03 e 04
switch (opcao)
{
case INSTRUCOES:
{
char mensagem1[] = {"
\nSistema de Comunicação USB com Microcontrolador
TCC - 2009.1 - DSC / POLI / UPE
Aluno: Leonardo Santos
Orientador: Sergio Campello
Opções:
00 -> Instruções
01 -> Ler EEPROM
02 -> Gravar na EEPROM
03 -> Mostrar Rotina
04 -> Desconectar\n"};
usb_detach();
break;
}
default:
{
char mensagem6[] = {"\n\nDigite um valor valido !\n"};
usb_cdc_putString(mensagem6);
break;
}
}
}
}
}
while (TRUE);
}
Arquivo usb_biblioteca.h
/*
************** usb_biblioteca.h **************
** Instruções **
59
Apêndices
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
#include <usb_cdc.h>
/* ** usb_cdc_putString **
Envia uma string
char *p -> ponteiro que represente a string
obs: A string deve estar declarada para ser enviada, por exemplo:
Há uma forma alternativa para o envio de string e com ela não é necessário
a declaração da string anteriormente.
i ++;
}
}
/* ** usb_cdc_putEEPROM **
Envia um bloco da memória de dados
int posicaoI -> Posição inicial do bloco de memória
int tamanho -> Comprimento do bloco de memória
Obs: Pode enviar os valores em hex ou em caracteres ASCII (código comentado)*/
/* ** usb_cdc_putFLASH **
Envia um bloco da memória de programa
int posicaoI -> Posição inicial do bloco de memória
int tamanho -> Comprimento do bloco de memória
Obs: Pode enviar os valores em hex ou em caracteres ASCII (código comentado)*/
usb_cdc_putc(dado);
}
}
/* ** usb_cdc_conectar **
Inicializa, configura e enumera o dispositivo USB
Obs: Deve ser usado quando for conectado o dispositivo USB no
computador para efetuar a transmissão */
void usb_cdc_conectar()
{
// usb_cdc_init();
usb_init_cs();// não trava na configuração e é necessário chamar usb_task
usb_init();
usb_task();
while(!usb_cdc_connected()) {}
}
** usb_enumerated() **
Verifica se o dispositivo está pronto para a comunicação
Retorna True ou False
** usb_detach() **
Desconecta o dispositivo, usado antes de sua remoção física do computador
** usb_attach() **
Re-conecta o dispositivo, usado para re-conectá-lo
quando o dispositivo foi desconectado mas ainda não removido literalmente
62
Apêndices
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
** usb_cdc_putc(char c) **
Envia um caracter para a transmissão
** usb_cdc_kbhit() **
Verifica se existe algum dado no buffer de recepção
Retorna True ou False
** usb_cdc_getc() **
Recebe um caracter do buffer de recepção, deve-se usar o usb_cdc_kbhit()
anteriormente para verificar se existe dados
** get_float_usb() **
Recebe um numero ponto flutuante
** get_long_usb() **
Recebe um numero longo
** get_int_usb() **
Recebe um inteiro
** gethex_usb() **
Recebe um Hexadecimal
63
Apêndices
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
Arquivo usb_desc_TCC.h
#IFNDEF __USB_DESCRIPTORS__
#DEFINE __USB_DESCRIPTORS__
#include <usb.h>
#DEFINE USB_TOTAL_CONFIG_LEN 67
//config+interface+class+endpoint+endpoint (2 endpoints)
//Descritor de configuração 1
64
Apêndices
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
//endpoint descriptor
65
Apêndices
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
//endpoint descriptor
USB_DESC_ENDPOINT_LEN, //length of descriptor ==60
USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (ENDPOINT 0x05)
==61
USB_CDC_DATA_OUT_ENDPOINT, //endpoint number and direction (0x02 =
EP2 OUT) ==62
0x02, //transfer type supported (0x02 is bulk) ==63
//
make8(USB_CDC_DATA_OUT_SIZE,0),make8(USB_CDC_DATA_OUT_SIZE,1),
//maximum packet size supported ==64, 65
USB_CDC_DATA_OUT_SIZE & 0xFF, (USB_CDC_DATA_OUT_SIZE >> 8) &
0xFF, //maximum packet size supported ==64, 65
250, //polling interval, in ms. (cant be smaller than 10) ==66
//endpoint descriptor
66
Apêndices
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
#define USB_MAX_NUM_INTERFACES 2
const char USB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS]={2};
const int16
USB_CLASS_DESCRIPTORS[USB_NUM_CONFIGURATIONS][USB_MAX_NUM_I
NTERFACES][4]=
{
//config 1
//interface 0
//class 1-4
18,23,27,32,
//interface 1
//no classes for this interface
0xFFFF,0xFFFF,0xFFFF,0xFFFF
};
// Descritor de Dispositivo
67
Apêndices
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
//the offset of the starting location of each string. offset[0] is the start of string 0,
offset[1] is the start of string 1, etc.
char USB_STRING_DESC_OFFSET[]={0,4,12};
'C',0,
'C',0,
//string 2
50, //length of string index
USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
68
Apêndices
ESCOLA
POLITÉCNICA DE
PERNAMBUCO
'T',0,
'C',0,
'C',0,
' ',0,
'-',0,
' ',0,
'L',0,
'E',0,
'O',0,
' ',0,
'S',0,
'A',0,
'N',0,
'T',0,
'O',0,
'S',0,
' ',0,
'-',0,
' ',0,
'S',0,
'C',0,
'U',0,
'S',0,
'B',0
};
#ENDIF
69