Você está na página 1de 56

Programando para Controle de dispositivos pelo

Computador

Luis Claudio Gambôa Lopes

Informática Industrial/Automação
SDM - Sistemas Digitais e Microprocessados

CEFET-MG Campus III - Leopoldina

10 de setembro de 2009
Sumário

1 Introdução 1

2 Portas de Comunicação do Computador e suas características 2

2.1 Características Elétricas Porta Paralela . . . . . . . . . . . . . . . . . . . . . . 3

2.2 Características Elétricas Porta Serial . . . . . . . . . . . . . . . . . . . . . . . 5

2.3 Características Elétricas Porta USB . . . . . . . . . . . . . . . . . . . . . . . . 6

3 Hardware para Acionamento de Dispositivos Externos 7

3.1 Circuito de Potência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

4 Porta Paralela 9

4.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

4.2 Programação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

5 Porta Serial 11

5.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

5.1.1 Condicionamento de Sinal RS232/TTL . . . . . . . . . . . . . . . . . 11

5.1.2 Circuito Microcontrolado (PIC) . . . . . . . . . . . . . . . . . . . . . 12

5.1.3 Transmissão por Infravermelho (IR) . . . . . . . . . . . . . . . . . . . 14

1
5.1.4 Transmissão por Rádio Freqüência (RF) . . . . . . . . . . . . . . . . . 15

5.2 Programação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

5.2.1 Microcontrolador (PIC) . . . . . . . . . . . . . . . . . . . . . . . . . 17

5.2.2 PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

6 Porta USB (Emulando Serial) 19

6.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

6.2 Programação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

A Códigos fontes Pic 22

A.1 Serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

B Códigos fontes PC 24

B.1 Paralela Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

B.2 Paralela Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

B.3 Serial Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

B.4 Serial Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

C Microcontrolador PIC16F628A 28

C.1 Configuração das Portas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

C.2 Configuração Interrupções . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

C.3 Configuração Porta Serial Assíncrona . . . . . . . . . . . . . . . . . . . . . . 39

D Componentes 41

D.1 Alguns Componentes Utilizados . . . . . . . . . . . . . . . . . . . . . . . . . 41

2
D.1.1 Resistor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

D.1.2 Interruptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

D.1.3 Diodo e LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

D.1.4 Transistor Bipolar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

D.1.5 Capacitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

D.1.6 Regulador de Tensão . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

D.1.7 Relé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

D.1.8 Conversor RS232/TTL . . . . . . . . . . . . . . . . . . . . . . . . . . 47

3
Lista de Figuras

2.1 Porta Paralela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.2 Porta Serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.3 Porta USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.4 Pinagem Porta Paralela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.5 Pinagem Porta Serial (DB9 Macho PC) . . . . . . . . . . . . . . . . . . . . . 5

2.6 Conexão Porta Serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.7 Sinais da porta serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.8 Pinagem Porta USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3.1 Circuito de acionamento de dispostivos de potência . . . . . . . . . . . . . . . 8

4.1 Circuito Porta Paralela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

4.2 Foto Circuito Porta Paralela . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

5.1 Conversor RS232/TTL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

5.2 PIC porta serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

5.3 Foto PIC porta serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

5.4 Circuito de comunicação Infravermelho . . . . . . . . . . . . . . . . . . . . . 14

5.5 Foto do Foto-diodo e módulo receptor infravermelho . . . . . . . . . . . . . . 14

4
5.6 Circuito transmissor rádio frequência PC . . . . . . . . . . . . . . . . . . . . . 15

5.7 Circuito transmissor rádio frequência PIC . . . . . . . . . . . . . . . . . . . . 16

5.8 Circuito receptor de rádio frequência acionando 2 motores . . . . . . . . . . . 17

5.9 Foto dos módulos receptor e transmissor de rádio frequência . . . . . . . . . . 17

5.10 Programa terinal gtkterm (linux) . . . . . . . . . . . . . . . . . . . . . . . . . 18

6.1 PIC porta USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

C.1 Pinagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

C.2 Foto Pic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

C.3 Diagrama Interno do PIC16F628 . . . . . . . . . . . . . . . . . . . . . . . . . 31

C.4 PORTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

C.5 PORTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

C.6 memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

C.7 Bank 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

C.8 Bank 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

C.9 Opcodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

C.10 Configuração PORTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

C.11 Configuração PORTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

C.12 Configuração interrupções . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

C.13 Configuração Transmissão Serial . . . . . . . . . . . . . . . . . . . . . . . . 39

C.14 Configuração Recepção Serial . . . . . . . . . . . . . . . . . . . . . . . . . . 40

C.15 Configuração Velocidade Serial . . . . . . . . . . . . . . . . . . . . . . . . . 40

5
D.1 Símbolo Resistor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

D.2 Foto Resistor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

D.3 Símbolo Interruptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

D.4 Foto Interruptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

D.5 Símbolo Diodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

D.6 Foto Diodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

D.7 Símbolo LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

D.8 Foto LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

D.9 Símbolo Transistor NPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

D.10 Foto Transistor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

D.11 Símbolo Capacitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

D.12 Foto Capacitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

D.13 Símbolo Regulador de Tensão . . . . . . . . . . . . . . . . . . . . . . . . . . 45

D.14 Foto Regulador de Tensão . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

D.15 Símbolo Relé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

D.16 Foto Relé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

D.17 Conversor RS232/TTL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

6
Lista de Tabelas

2.1 Tipos de Operação da porta paralela . . . . . . . . . . . . . . . . . . . . . . . 3

2.2 Pinos da porta paralela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.3 Tipos de porta paralela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.4 Configuração porta Serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

C.1 Microcontrollers Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

C.2 Microcontroller Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

C.3 Special Microcontroller Features . . . . . . . . . . . . . . . . . . . . . . . . . 29

C.4 Peripheral Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

D.1 Código de Cores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

7
Resumo

Esse material tem como objetivo introduzir os conceitos básicos do uso de portas de comuni-
cação de um computador, a programação necessária para criação dos softwares e o hardware
básico para acesso e controle das portas . Os exemplos utilizados são válidos para os sistemas
operacionais Linux e Windows, mas podem ser convertidos para outros sistemas.
Capítulo 1

Introdução

Este documento tem como objetivo fornecer uma introdução a programação para controle de
dispositivos externos pelo computador, utilizando linguagem c nos sistemas operacionais Linux
e Windows. São abordados métodos de programação para controle através da porta paralela,
serial e USB (emulando porta serial) bem como os circuitos básicos de interface discretos e
microcontrolados.

Pré-requisitos: Conhecimento de uma linguagem de programação e noções básicas de


eletrônica.

1
Capítulo 2

Portas de Comunicação do Computador e


suas características

As portas de um computador tem a funcionalidade de permitir o acesso de comunicação e


controle entre dispositivos externos e o computador. Através das portas é possível interagir com
dispositivos externos, enviando ou lendo sinais elétricos para eles. Cada tipo de porta tem suas
características e aplicações.

Figura 2.1: Porta Paralela

Figura 2.2: Porta Serial

2
Figura 2.3: Porta USB

2.1 Características Elétricas Porta Paralela

A porta paralela é um conector fêmea de 25 pinos (DB25) que fica situada atrás do gabinete,
originalmente utilizada para o controle de impressoras, seus pinos receberam os nomes relativos
a essa atividade.

A porta paralela pode funcionar em 3 modos configuravéis na BIOS do computador:

Tabela 2.1: Tipos de Operação da porta paralela


Modo Direção Velocidade Máxima
SPP (Standard Parallel Port) Transmissão unidirecional 150KB/s(4 bits)
EPP ( Enhanced Parallel Port ) Transmissão bidirecional 2 MB/s (8 bits)
ECP (Enhanced Capabilities Port) Transmissão bidirecional+DMA 2 MB/s (8 bits)

O tamanho máximo do cabo de ligação é de 8 metros, quanto menor o cabo menos


interferências e maior a velocidade.

3
1 STROBE
14 AUTOFEED
2 D0
15 ERROR
3 D1
16 INIT
4 D2
17 SELECT IN
5 D3
18 GND
6 D4
19 GND
7 D5
20 GND
8 D6
21 GND
9 D7
22 GND
10 AKNOWLEDGE
23 GND
11 BUSY
24 GND
12 PAPER END
25 GND
13 SELECT OUT

Figura 2.4: Pinagem Porta Paralela

Tabela 2.2: Pinos da porta paralela


<= in DB25 Name of Reg
=> out pin Signal Bit Function Notes
=> 1 -Strobe C0- Set Low pulse >0.5 us to send
=> 2 Data 0 D0 Set to least significant data
=> 3 Data 1 D1 ...
=> 4 Data 2 D2 ...
=> 5 Data 3 D3 ...
=> 6 Data 4 D4 ...
=> 7 Data 5 D5 ...
=> 8 Data 6 D6 ...
=> 9 Data 7 D7 Set to most significant data
<= 10 -Ack S6+ IRQ Low Pulse 5 uS, after accept
<= 11 +Busy S7- High for Busy/Offline/Error
<= 12 +PaperEnd S5+ High for out of paper
<= 13 +SelectIn S4+ High for printer selected
=> 14 -AutoFd C1- Set Low to autofeed one line
<= 15 -Error S3+ Low for Error/Offline/PaperEnd
=> 16 -Init C2+ Set Low pulse > 50uS to init
=> 17 -Select C3- Set Low to select printer
== 18-25 Ground

Os sinais elétricos da porta paralela depende do seu tipo e são mostrados na Tabela 2.3.

4
Tabela 2.3: Tipos de porta paralela
Normal UM82C11-C IEEE 1284 level II
Data output (>2.4V) 2.6 mA 2 mA 14 mA
Data line sink (<0.4V) 24 mA 24 mA 14 mA
Control output (>2.4 V) 0.5 mA* 1.5 mA ?
Signal lines (short circuit) 1 mA ? ?
Control line sink (<0.4V) 7 mA 7 mA 14 mA

2.2 Características Elétricas Porta Serial

A porta serial é um conector macho de 9 pinos (DB9) ou de 25 pinos, situada atrás do gabinete,
originalmente utilizada para dispositivos de comunicação externos (MODEMs), seus pinos re-
ceberam nomes relativos sua utilização. Os sinais da porta serial seguem o padrão RS232, sendo
o nível lógico 0 representado por uma tensão de +3 a +15Volts e o nível lógico 1 representado
por uma tensão de -3 a -15Volts.

1 DCD
6
DSR
2
RX
7
RTS
3
TX
8
CTS
4
DTR
9
RI
5
SG

Figura 2.5: Pinagem Porta Serial (DB9 Macho PC)

Figura 2.6: Conexão Porta Serial

Para utilizar a porta serial é necessário fazer sua configuração antes do uso, os parame-
tros de configuração são mostrados na tabela 2.4.

5
Tabela 2.4: Configuração porta Serial
Descrição Padrão para uso de microcontroladores
Velocidade 2400,4800,9600,19200 bauds
Número de Bits de dados 7 ou 8 bits 8 bits
Paridade Par, Ímpar ou Nenhuma Nenhuma
Número de stop bits 1 ou 2 1 bit
Controle de fluxo Hardware, Software ou Nenhum Nenhum

Figura 2.7: Sinais da porta serial

2.3 Características Elétricas Porta USB

A porta usb é um conector fêmea de 4 pinos, situada atrás ou na frente do gabinete Os sinais
elétricos da porta USB não podem ser utilizados diretamente, sempre necessitando de circuitos
externos para isso.

1
VCC
2
D−
3
D+
4 GND

Figura 2.8: Pinagem Porta USB

6
Capítulo 3

Hardware para Acionamento de


Dispositivos Externos

Para se fazer um projeto de Hardware de um circuito eletrônico, é necessário o conhecimento


de alguns conceitos de eletrônica e o conhecimento do funcionamento dos componentes que
vão compor o projeto.

3.1 Circuito de Potência

Na Figura 3.1 é mostrado o circuito básico de acionamento de dispositivos de potência.

7
Vcc

Dispositivo

4N25
6

1K

D?
1 5
Entrada

2 4
RELAY

Dispositivo

1
4.7K
2

BC547
3

Figura 3.1: Circuito de acionamento de dispostivos de potência

8
Capítulo 4

Porta Paralela

4.1 Hardware

Figura 4.1: Circuito Porta Paralela

9
Figura 4.2: Foto Circuito Porta Paralela

4.2 Programação

Programas par linux e windows com a porta no modo SPP B.1 B.2.

10
Capítulo 5

Porta Serial

5.1 Hardware

Para utilização da porta serial normalmente é necessário um circuito USART para se comunicar
com a USART interna do PC, esse circuito pode ser substituído por um registrador de desloca-
mento e algumas portas lógicas ou por um microcontrolador que já possua um circuito USART
internamente ou consiga emular por software uma USART.

5.1.1 Condicionamento de Sinal RS232/TTL

A maioria dos circuitos não trabalha com os padrões RS232 descritos na Seção 2.2, sendo
necessário a conversão desse padrão para o padrão do circuito a ser construído, um dos padrões
mais utilizados é o TTL, já existindo soluções prontas com os circuitos MAX232 ou HIN232.

11
Figura 5.1: Conversor RS232/TTL

5.1.2 Circuito Microcontrolado (PIC)

Um circuito simples para interface serial como o da Figura5.2 pode ser montado com um micro-
controlador PIC16F628A e um conversor MAX232, nesse circuito o PORTA do PIC é utilizado
como entrada e o PORTB como saída, dois pinos do PORTB são utilizados para a comunicação
serial RB1(RX) e RB2(TX)

12
10k

10k

10k

10k

10k

10k

10k

10k
+5V

R12

R10

R11

R13

R14
R7

R8

R9
S6
1 2

S6
1 2

S6
1 2

S5
1 2

+5V S4

1uF C3 1 2
C2

MAX232 U2
1

1 2 S3
1uF C1+ V+ 1 2
1 2
2

3 C1−
CONN1 1uF C4 S2
C1

4 6 2 1 U1 1 2
1

C2+ V−
1 1 18
1uF 5 RA2 RA1 S1
6 C2−
2 17 1 2
RA3 RA0
2

2 14 Tx1 Out Tx1 In 11 3 16


RA4 RA7/OSC1
7 4 15 +5V
13 Rx1 In Rx1 Out 12 MCLR/RA5 RA6/OSC2
3 5 14
7 10 Vss Vdd
8 Tx2 Out Tx2 In R1 330 LED1
6 13 1 2
RB0 RB7
4 8 Rx2 In Rx2 Out 9 7 12
RB1 RB6
9 8 11 R2 330 LED2
RB2 RB5 1 2
5 9 10
RB3 RB4

R3 330 LED3
DB9 Femea 1 2
PIC16F628A

R4 330 LED4
1 2

R5 330 LED5
1 2

R6 330 LED6
1 2

Figura 5.2: PIC porta serial

Figura 5.3: Foto PIC porta serial

13
5.1.3 Transmissão por Infravermelho (IR)

Figura 5.4: Circuito de comunicação Infravermelho

Figura 5.5: Foto do Foto-diodo e módulo receptor infravermelho

14
5.1.4 Transmissão por Rádio Freqüência (RF)

U2
CONN2 Vcc +5V
1 IN OUT 3
1
GND
2

1
1

C2
2 7805 330R
C1

R1
330uF 100uF

2
2

1
2
LED1
1

C?

MAX232 U1
CONN1 C?
ANT1
1 C1+ V+ 2 1 2
2

1 1
3 C1− Jumper Debug serial +5V ANT
6 4
1

CONN3

TX 315Mhz
C?

3 VCC
2 4 C2+ V− 6
2 1 DATA
7 3 2
5 C2− C?
2

2 1 GND
3
14 Tx1 Out Tx1 In 11
8 1

4 13 12 U3
Rx1 In Rx1 Out

9
7 Tx2 Out Tx2 In 10
5
8 Rx2 In Rx2 Out 9

Nao esqueca dos pinos 15(GND) e 16 (VCC)

Transmissor serial PC
TITLE

FILE: REVISION:
Luis Claudio Gamboa Lopes
PAGE OF DRAWN BY:

Figura 5.6: Circuito transmissor rádio frequência PC

15
U2
CONN2 Vcc +5V
1 IN OUT 3
1
GND

10K

10K

10K

10K
2

1
1

C2
2 7805 280R

C1

R1

R5

R4

R3

R2
1000uF 100uF CONN3

2
2

1
1

2
3

LED1
4
+5V
5

6
10K

10K

10K

10K
U1

1 18
R9

R8

R7

R6
RA2 RA1
CONN4 C3 33pF
2 17
RA3 RA0
1 3 16
RA4 RA7/OSC1

U3
2 4 15 4MHz
MCLR/RA5 RA6/OSC2
3 +5V C4 33pF
5 14
Vss Vdd
4 6 13
+5V RB0 RB7 C5 CONN1
5 7 12
RB1 RB6
6 100nF
8 11 1
RB2 RB5
9 10 2
RB3 RB4

ANT? 4
+5V
1 5

R10

R11

R12

R13
ANT +5V
4 6
TX 315Mhz

10K

10K

10K

10K
VCC 3

DATA 2

GND 1

U4
TITLE

FILE: REVISION:

PAGE OF DRAWN BY:

Figura 5.7: Circuito transmissor rádio frequência PIC

16
U7
RX 315Mhz

Vcc
U4

DATA

DATA
GND

GND

GND

ANT
+5V

+5V
+5V
1 IN OUT 3 ANT1

8
1
GND

C2
1
1

2 7805
330uF
B1

C1
+5V

2
100uF
10,8V
2

C3
100nF

L293 U2
+5V +5V
U1 1 16
C4 33pF CHIP INHIBIT VSS
1 18 2 15
RA2 RA1 INPUT 1 INPUT 4
2 17 3 14
RA3 RA0 OUTPUT 1 OUTPUT 4
20MHz
U6

3 16 4 13
RA4 RA7/OSC1 GND GND
M2
4 15 5 12
MCLR/RA5 RA6/OSC2 +5V GND GND M1
5 14 C5 33pF 6 11
Vss Vdd OUTPUT 2 OUTPUT 3
6 13 7 10
RB0 RB7 INPUT 2 INPUT 3
7 12 8 9 +5V
RB1 RB6 Vcc VC CHIP INHIBIT 2
8 11 CONN2
RB2 RB5
9 10 1
1.5K

RB3 RB4
LD293DNE (diodo interno/600mA)
2
R1

Jumper selecao de alimentacao 3


+5V
1

2
ROBO FUTEBOL V1.0
1 Jumper debug serial
TITLE
2
LED1

CONN1
FILE: REVISION: Luis Claudio Gamboa Lopes

PAGE OF DRAWN BY: Luis Claudio Gamboa Lopes

Figura 5.8: Circuito receptor de rádio frequência acionando 2 motores

Figura 5.9: Foto dos módulos receptor e transmissor de rádio frequência

5.2 Programação

5.2.1 Microcontrolador (PIC)

O microcontrolador PIC16F628A já possuí uma USART interna, basta configurar a USART


interna e a interrupção por recebimento de dados pela serial como no programa A.1.

17
5.2.2 PC

Programas para Linux e Windows com porta no modo 9600 8N1 B.3 B.4.]

Figura 5.10: Programa terinal gtkterm (linux)

18
Capítulo 6

Porta USB (Emulando Serial)

USB Data acquisition with PIC18F4550

This project is simple and small component count USB data acquisition or USB DAQ.
The main core of USB device is PIC18F4550 .The firmware for PIC modified from Microchip
CDC library.

6.1 Hardware

Specifications

• 8 Digital output

• 8 Digital input

• 8 Analog output

• No external power required

• Simple ASCII command

• 3 command to communicate PC with PIC

19
Figura 6.1: PIC porta USB

6.2 Programação

I use Delphi 6 on PC side to communicate with PIC18F4550 source code availible. Código

20
Referências

Minicurso Comunicação Serial - RS232, Edmur Canzian - CNZ Engenharia e Informática Ltda
(http://www.professores.aedb.br/arlei/AEDB/Arquivos/rs232.pdf)

Linux I/O port programming mini-HOWTO- Riku Saikkonen - (http://tldp.org/HOWTO/IO-


Port-Programming.html)

PIC16F627A/628A/648A Data Sheet, Microchip ,DS40044F

21
Apêndice A

Códigos fontes Pic

A.1 Serial
LIST P=16F628A
INCLUDE <p16f628A.inc>

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT & _LVP_OFF

ERRORLEVEL -302

CBLOCK 0x70 ;variaveis para salvar contexto na interrupcao


W_TEMP
S_TEMP
ENDC

;inico
ORG 0X0000
GOTO INICIO

;interrupcao
ORG 0X0004
;salva contexto
MOVWF W_TEMP
SWAPF STATUS,W
MOVWF S_TEMP
;le serial
; BTFSS PIR1,RCIF ;verifica se interuupcao é da porta serial
; GOTO FIMS
BANKSEL RCREG
MOVFW RCREG
MOVWF PORTB

MOVFW PORTA
MOVWF TXREG
BCF PIR1,RCIF
;restaura contexto
FIMS: SWAPF S_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE

;programa principal
INICIO:
; configura portas
MOVLW B’00000111’
MOVWF CMCON ;configura RA0,RA1,RA2,RA3

BANKSEL TRISA
MOVLW B’11111111’
MOVWF TRISA
MOVLW B’00000010’
MOVWF TRISB ;PORTB ,RB1 IN
BANKSEL PORTB

; inicializa serial
MOVLW B’10010000’
MOVWF RCSTA
BANKSEL TXSTA
MOVLW B’00100100’
MOVWF TXSTA
MOVLW D’25’;25 = 9600-8N1
MOVWF SPBRG
BANKSEL RCSTA

; habilita interrupcoes
MOVLW B’11000000’;habilita GIE PEIE
MOVWF INTCON
BANKSEL PIE1
MOVLW B’00100000’;habilita RCIE

22
MOVWF PIE1
BANKSEL PIR1

CLRF PORTB
;loop infinito
MAIN: GOTO MAIN
END

23
Apêndice B

Códigos fontes PC

B.1 Paralela Linux


#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/perm.h>
#include <sys/resource.h>
#include <asm/io.h>

#define BASEPORT 0x378

void main()
{

unsigned char data;

//pede permissão de acesso


if (ioperm (BASEPORT, 3, 1))
{
printf ("Erro ioperm\n");
exit (1);
};

/*********************** Programa principal **************************/


//escreve dados
data=0xA5;
outb (data, BASEPORT);

//lê dados
data = inb (BASEPORT+1);

/******************** Finalização ******************************/


//libera permissão de acesso
if (ioperm (BASEPORT, 3, 0))
{
printf ("Erro ioperm\n");
exit (1);
};

};

B.2 Paralela Windows


/*
Programa para acesso a porta paralela
*/
#include <conio.h>
#include <stdio.h>
#include <windows.h>

/* endereço da porta */
#define BASE_ADDRESS 0x378

/* offset dos registros */


#define DATA 0
#define STATUS 1
#define CONTROLL 2

typedef short _stdcall (*INP32)(short PortAddress);


typedef void _stdcall (*OUT32)(short PortAddress, short Data);

int main(void) {

24
short value;
short des;
unsigned char data;

HINSTANCE hLib;
INP32 Inp32;
OUT32 Out32;

/******************** Inicialização da biblioteca ***********************/

//carrega bibiloteca
if ((hLib = LoadLibrary("inpout32.dll")) == NULL) {
printf("Unable to load inpout32.dll, did you copy it to the system folder?\n");
system("pause");
return 0;
}

//carrega função de leitura


if ((Inp32 = (INP32)GetProcAddress(hLib, "Inp32")) == NULL) {
printf("Unable to establish handle to input function.\n");
system("pause");
return 0;
}

//carrega função de escrita


if ((Out32 = (OUT32)GetProcAddress(hLib, "Out32")) == NULL) {
printf("Unable to establish handle to output function.\n");
system("pause");
return 0;
}

/*********************** Programa principal **************************/

//escreve dados
data=5;
Out32(BASE_ADDRESS, data);

//lê dados
data = Inp32(BASE_ADDRESS+1);

/******************** Finalização ******************************/

FreeLibrary(hLib);

system("pause");

return 1;
}

B.3 Serial Linux


#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#define BAUDRATE B9600


#define MODEMDEVICE "/dev/ttyS0"
#define _POSIX_SOURCE 1 /* POSIX compliant source */
#define FALSE 0
#define TRUE 1

volatile int STOP=FALSE;

int
main()
{
int fd,c;
struct termios newtio;

//configuração
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd <0) {perror(MODEMDEVICE); exit(-1); }

// tcgetattr(fd,&oldtio); /* save current port settings */

bzero(&newtio, sizeof(newtio));
newtio.c_cflag = BAUDRATE |CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR|ICRNL|IGNBRK;
newtio.c_oflag = 0;

/* set input mode (non-canonical, no echo,...) */


newtio.c_lflag = 0;

newtio.c_cc[VTIME] = 0; /* inter-character timer unused */


newtio.c_cc[VMIN] = 5; /* blocking read until 5 chars received */

25
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);

//programa

c=’0’;
while (1) { /* loop for input */

// lê dado do teclado
c=getchar();

//escreve na porta serial


write (fd,&c,1);
usleep(1000);

//lê porta serial


c=’0’;
read (fd,&c,1);
usleep(1000);

//imprime caracter recebido


printf("%c",c);
fflush(stdout);

return 0;
}

B.4 Serial Windows


#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <string.h>

#define BAUDRATE 9600


#define MODEMDEVICE "com1"

int main()
{
HANDLE hCom;
char c;

DWORD nbytes;

// variables used with the com port


BOOL bPortReady;
DCB dcb;
COMMTIMEOUTS CommTimeouts;

//configuração

hCom = CreateFile(MODEMDEVICE,
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security
OPEN_EXISTING,
0, // no overlapped I/O
NULL); // null template

bPortReady = SetupComm(hCom, 2, 128); // set buffer sizes

bPortReady = GetCommState(hCom, &dcb);


dcb.BaudRate = BAUDRATE;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
// dcb.Parity = EVENPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fAbortOnError = TRUE;

// set XON/XOFF
dcb.fOutX = FALSE; // XON/XOFF off for transmit
dcb.fInX = FALSE; // XON/XOFF off for receive
// set RTSCTS
dcb.fOutxCtsFlow = FALSE; // turn off CTS flow control
dcb.fRtsControl = RTS_CONTROL_DISABLE; //
// set DSRDTR
dcb.fOutxDsrFlow = FALSE; // turn off DSR flow control
dcb.fDtrControl = DTR_CONTROL_DISABLE; //

bPortReady = SetCommState(hCom, &dcb);

// Communication timeouts are optional

bPortReady = GetCommTimeouts (hCom, &CommTimeouts);

CommTimeouts.ReadIntervalTimeout = MAXDWORD;

26
CommTimeouts.ReadTotalTimeoutConstant = 0;
CommTimeouts.ReadTotalTimeoutMultiplier = 0;
CommTimeouts.WriteTotalTimeoutConstant = 0;
CommTimeouts.WriteTotalTimeoutMultiplier = 0;

bPortReady = SetCommTimeouts (hCom, &CommTimeouts);

c=’0’;
while (1) { /* loop for input */

// lê dado do teclado
c=getchar();

//escreve na porta serial


WriteFile(hCom, &c, 1, &nbytes,NULL);
Sleep(1);

//lê porta serial


c=’0’;
ReadFile(hCom, &c, 1,&nbytes, NULL);
Sleep(1);

//imprime caracter recebido


printf("%c",c);
fflush(stdout);

return 0;

27
Apêndice C

Microcontrolador PIC16F628A

O microcontrolador é um circuito integrado que pode ser programado para executar


determinas funções.
O PIC utilizado no projeto é o PIC16F628, suas características são mostradas nas Tabe-
las C.1, C.2, C.3 e C.4.

Tabela C.1: Microcontrollers Memory


Device FLASH RAM EEPROM
Program Data Data
PIC16F627 1024 x 14 224 x 8 128 x 8
PIC16F628 2048 x 14 224 x 8 128 x 8

Tabela C.2: Microcontroller Features


Operating speeds from DC - 20 MHz
Interrupt capability
8-level deep hardware stack
Direct, Indirect and Relative Addressing modes
35 single word instructions
All instructions single cycle except branches

28
Tabela C.3: Special Microcontroller Features
Internal and external oscillator options
Precision Internal 4 MHz oscillator factory calibrated to +/-1%
Low Power Internal 37 kHz oscillator
External Oscillator support for crystals and resonators.
Power saving Sleep mode
Programmable weak pull-ups on PORTB
Multiplexed Master Clear/Input-pin
Watchdog Timer with independent oscillator for reliable operation
Low voltage programming
In-Circuit Serial Programming (via two pins)
Programmable code protection
Brown-out Reset
Power-on Reset
Power-up Timer and Oscillator Start-up Timer
Wide operating voltage range. (2.0 - 5.5V)
Industrial and extended temperature range
High Endurance Flash/EEPROM Cell
100,000 write Flash endurance
1,000,000 write EEPROM endurance
100 year data retention

Tabela C.4: Peripheral Features


16 I/O pins with individual direction control
High current sink/source for direct LED drive
Analog comparator module with:
Two analog comparators
Programmable on-chip voltage reference (VREF) module
Selectable internal or external reference
Comparator outputs are externally accessible
Timer0: 8-bit timer/counter with 8-bit programmable prescaler
Timer1: 16-bit timer/counter with external crystal/clock capability
Timer2: 8-bit timer/counter with 8-bit period register, prescaler and postscaler
Capture, Compare, PWM module
16-bit Capture/Compare
10-bit PWM
Addressable Universal Synchronous/Asynchronous Receiver/Transmitter USART/SCI

A pinagem do microcontrolador é mostrada na Figura C.1, onde pode se perceber que


cada pino tem mais de uma função, a função utilizada pode ser programada via software e pode
ser mudada durante a execução do programa.

29
Figura C.1: Pinagem

Figura C.2: Foto Pic

Na Figura C.3 é mostrado os blocos lógicos internos do microcontrolador e seus perifé-


ricos.

30
Figura C.3: Diagrama Interno do PIC16F628

As funções dos pinos e os tipos de sinais são descritos nas Figuras C.4 e C.5.

31
Figura C.4: PORTA

32
Figura C.5: PORTB

O mapa de memória é mostrado na Figura C.6 e os dois bancos mais utilizados são
mostrados nas Figuras C.7 e C.8;

33
Figura C.6: memoria

34
Figura C.7: Bank 0

35
Figura C.8: Bank 1

As 35 instruções assembly do PIC16F628 são listadas na Figura C.9.

36
Figura C.9: Opcodes

C.1 Configuração das Portas


O pic16f628a possui duas portas de 8 bits (PORTA e PORTB), os pinos das portas podem ser
configurados como entradas ou saídas, essa configuração é feita nos registradores TRISA para
o PORTA e TRISB para o PORTB. Colocar um bit com o valor ’1’ no registrador TRISx indica
que o pino respectivo no PORTx será entrada, colocar ’0’ siginifica que o pino será uma saída.
No pic16f628 todos os pinos das duas portas podem ser usados com entrada, como saída
apenas o pino RA5 não pode ser utilizado e o pino RB4 é do tipo coletor aberto necessitando
de um resistor de pull-up ligado a ele para funcionar.

37
Figura C.10: Configuração PORTA

o PORTA e o PORTB tem funções multiplexadas em vários pinos, se essas funções


estiverem ativadas o pino do PORTx não pode ser utilizado como entrada e saída de dados
digitais.

Figura C.11: Configuração PORTB

C.2 Configuração Interrupções


O pic16f628A possui três registradores de configuração de interrupção, todas as interrupções
são tratadas no endereço 0x0004 da memória de programa.

38
Figura C.12: Configuração interrupções

C.3 Configuração Porta Serial Assíncrona


Para se configurar a USART para modo de comunicação serial assíncrono existem três registra-
dores. Para leitura e escrita serial existem mais dois registradores, TXREG e RCREG respecti-
vamente.

Figura C.13: Configuração Transmissão Serial

39
Figura C.14: Configuração Recepção Serial

Figura C.15: Configuração Velocidade Serial

40
Apêndice D

Componentes

D.1 Alguns Componentes Utilizados


Para facilitar o entendimento do projeto, é descrito uma breve explicação sobre as funções dos
componentes utilizados serem utilizados.

D.1.1 Resistor
Resistor é utilizado principalmente para limitar a corrente em outros componentes. Seu valor é
calculado com a utilização da Lei de Ohm I = VR .

Figura D.1: Símbolo Resistor

Figura D.2: Foto Resistor

Nos resitores comerciais seus valores são representados pelo código de cores descrito
na Tabela D.1.

41
Tabela D.1: Código de Cores
Cores 1o anel 2o anel 3o anel 4o anel
1o digito 2o digito Multiplicador Tolerância
Prata - - 0,01 10%
Ouro - - 0,1 5%
Preto 0 0 1 -
Marrom 01 01 10 1%
Vermelho 02 02 100 2%
Laranja 03 03 1 000 3%
Amarelo 04 04 10 000 4%
Verde 05 05 100 000 -
Azul 06 06 1 000 000 -
Violeta 07 07 10 000 000 -
Cinza 08 08 - -
Branco 09 09 - -

D.1.2 Interruptor
Interruptores são chaves mecânicas são utilizados para mudança de estado (ligado ou desligado
por exemplo), são dispositivos de entrada que permitem o usuário interagir com circuito. Nor-
malmente são necessários resistores de pull-up ou pull-down quando são utilizados junto com
os microcontroladores, neste caso ainda é necessário a aplicação de uma técnica de debouncig
por software(anti-repique).

Figura D.3: Símbolo Interruptor

Figura D.4: Foto Interruptor

D.1.3 Diodo e LED


O diodo funciona como uma “válvula elétrica”, permitindo a passagem de corrente em ape-
nas uma direção. Quando polarizado inversamente se comporta como um interruptor aberto,
e quando polarizado diretamente como um interruptor fechado com uma queda de tensão de
aproximadamente 0,7V para os diodos de silício.

42
Figura D.5: Símbolo Diodo

Figura D.6: Foto Diodo

O LED (Light Emitting Diode) é um diodo que quando polarizado diretamente emite
luz, normalmente os LED de 5mm funcionam com uma corrente máxima de 50mA, sendo
necessário a utilização de um resistor em série para limitar a corrente.

Figura D.7: Símbolo LED

Figura D.8: Foto LED

43
D.1.4 Transistor Bipolar
O transistor serve para amplificar sinais elétricos. Os transistores do tipo bipolar são amplifica-
dores de corrente, uma corrente (I) que entra na base (B) e sai no emissor(E) faz aparecer uma
corrente que entra no coletor (C) e sai no emissor (E) de valor β vezes maior. No nosso projeto
vamos utilizar o transistor como interruptor, ou seja, o transitor conduzindo no máximo ou não
conduzindo nada (regiões de saturação e corte). Existem dois tipos de transitor bipolar, os PNP
e os NPN, utilizaremos o NPN.

Figura D.9: Símbolo Transistor NPN

Figura D.10: Foto Transistor

D.1.5 Capacitor
O capacitor serve para armazenar cargas elétricas, no projeto ele é usado para filtrar ruído nos
sinais de alimentação. Analogamente ao uso de uma caixa de água quando falta pressão na água
que vem da rua, o capacitor fornece energia quando por algum motivo ela não vem direto da
fonte e quando a alimentação da fonte está normal ele se carrega.

Figura D.11: Símbolo Capacitor

44
Figura D.12: Foto Capacitor

D.1.6 Regulador de Tensão


Como o nome já diz, o regulador de tensão serve para manter a tensão num nível específico.
Normalmente circuitos eletrônicos necessitam de um nível específico de tensão para seu correto
funcionamento, principalmente circuitos digitais. OS circuito integrados reguladores de tensão
da série 78XX são os mais comuns e amplamente utilizados em circuitos, o XX indica a tensão
fixa de saída, um 7805 tem a tensão de saída fixa em 5Volts, a tensão de entrada tem que ser
maior pelo menos 2 Volts da tensão de saída e o valor máximo de entrada é de 35 Volts e a
corrente máxima fornecida é de 1 Ampére.

Figura D.13: Símbolo Regulador de Tensão

45
Figura D.14: Foto Regulador de Tensão

D.1.7 Relé
O relé é um tipo de interruptor acionado eletricamente que permite o isolamento elétrico de
dois circuitos. O relé é formado por um eletroímã (uma bobina enrolada sobre um núcleo de
material ferromagnético) que quando acionado, através da atração eletromagnética, fecha os
contatos de um interruptor. Normalmente o interruptor de um relé tem duas posições, com isso
existem dois tipos, os NF(normalmente fechado) e NA (normalmente aberto). Um relé pode ter
vários interruptores (conhecidos como contatos) de ambos os tipos, normalmente eles suportam
correntes de ate dezenas de Ampéres e centenas de Volts. A bobina do relé é acionada por uma
tensão contínua que é especificada de acordo com o fabricante, bobinas de 5, 12 e 24 Volts são
as mais comuns.

Figura D.15: Símbolo Relé

46
Figura D.16: Foto Relé

D.1.8 Conversor RS232/TTL

Figura D.17: Conversor RS232/TTL

47

Você também pode gostar