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 3.1 Circuito de Potência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Porta Paralela 7 7 9 4.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.2 Programação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 5 Porta Serial 5.1 11 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 5.2 Transmissão por Rádio Freqüência (RF) . . . . . . . . . . . . . . . . . 15 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B Códigos fontes PC B.1 Paralela Linux 22 24 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.2 Paralela Windows 24 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . . . . . 2 41 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 comunicaçã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 SPP (Standard Parallel Port) EPP ( Enhanced Parallel Port ) ECP (Enhanced Capabilities Port) Direção Transmissão unidirecional Transmissão bidirecional Transmissão bidirecional+DMA Velocidade Máxima 150KB/s(4 bits) 2 MB/s (8 bits) 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 => out => => => => => => => => => <= <= <= <= => <= => => == DB25 pin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18-25 Name of Signal -Strobe Data 0 Data 1 Data 2 Data 3 Data 4 Data 5 Data 6 Data 7 -Ack +Busy +PaperEnd +SelectIn -AutoFd -Error -Init -Select Ground Reg Bit C0D0 D1 D2 D3 D4 D5 D6 D7 S6+ S7S5+ S4+ C1S3+ C2+ C3- Function Notes Set Low pulse >0.5 us to send Set to least significant data ... ... ... ... ... ... Set to most significant data IRQ Low Pulse 5 uS, after accept High for Busy/Offline/Error High for out of paper High for printer selected Set Low to autofeed one line Low for Error/Offline/PaperEnd Set Low pulse > 50uS to init Set Low to select printer 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 Data output (>2.4V) Data line sink (<0.4V) Control output (>2.4 V) Signal lines (short circuit) Control line sink (<0.4V) Normal 2.6 mA 24 mA 0.5 mA* 1 mA 7 mA UM82C11-C 2 mA 24 mA 1.5 mA ? 7 mA IEEE 1284 level II 14 mA 14 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 receberam 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 8 4 9 TX CTS DTR 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 parametros de configuração são mostrados na tabela 2.4. 5 Tabela 2.4: Configuração porta Serial Descrição Velocidade Número de Bits de dados Paridade Número de stop bits Controle de fluxo 7 ou 8 bits Par, Ímpar ou Nenhuma 1 ou 2 Hardware, Software ou Nenhum Padrão para uso de microcontroladores 2400,4800,9600,19200 bauds 8 bits Nenhuma 1 bit 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 1 5 2 4 D? 1K Entrada 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 deslocamento 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 microcontrolador 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 R12 R7 R8 R9 R10 R11 R13 R14 +5V S6 1 2 S6 1 2 S6 1 2 S5 1 +5V 1 C2 MAX232 1 1uF C1+ 2 S4 1uF U2 V+ 2 1 C3 2 S3 1 2 2 1 3 C1 1 CONN1 C1− 4 C2+ 5 C2− 1uF V− 6 1 2 U1 1 1 1uF 2 2 6 2 7 14 Tx1 Out 13 Rx1 In Tx1 In 11 3 Rx1 Out 12 4 Tx2 In 10 3 8 4 5 7 Tx2 Out 8 Rx2 In Rx2 Out 6 9 2 S2 C4 7 9 8 5 9 1 RA2 RA1 RA3 RA0 RA4 RA7/OSC1 MCLR/RA5 RA6/OSC2 Vss Vdd RB0 RB7 RB1 RB6 RB2 RB5 RB3 RB4 18 1 16 15 +5V 14 13 R1 330 R2 330 2 1 2 1 2 1 2 1 2 1 2 LED2 10 R3 DB9 Femea LED1 1 12 11 330 LED3 PIC16F628A R4 R5 R6 330 LED4 330 LED5 330 Figura 5.2: PIC porta serial Figura 5.3: Foto PIC porta serial 13 2 S1 17 LED6 2 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) CONN2 U2 Vcc +5V 1 1 IN OUT 3 GND 1 2 7805 330R 2 100uF R1 C1 2 C2 1 330uF 2 1 LED1 2 1 C? CONN1 MAX232 1 C1+ U1 V+ C? 2 ANT1 1 2 2 1 6 C1− 4 C2+ C? 2 V− 2 5 1 4 9 14 13 Tx1 Out Rx1 In 7 Tx2 Out 8 Rx2 In VCC 3 2 DATA 2 1 GND C? C2− 3 8 ANT 3 6 2 7 +5V 4 Jumper Debug serial CONN3 1 3 Tx1 In 11 Rx1 Out 12 Tx2 In 10 TX 315Mhz 1 1 U3 5 Rx2 Out 9 Nao esqueca dos pinos 15(GND) e 16 (VCC) Transmissor serial PC TITLE FILE: PAGE REVISION: OF DRAWN BY: Figura 5.6: Circuito transmissor rádio frequência PC 15 Luis Claudio Gamboa Lopes CONN2 U2 Vcc +5V 1 1 IN OUT 3 10K 10K 10K R3 R2 280R CONN3 2 100uF R4 7805 R1 C1 C2 1 2 1000uF 10K 1 2 R5 GND 2 1 1 2 LED1 2 3 4 +5V 5 10K U1 CONN4 2 1 3 2 4 3 5 4 6 +5V 5 7 6 8 9 RA2 RA1 RA3 RA0 RA4 RA7/OSC1 MCLR/RA5 RA6/OSC2 Vss Vdd RB0 RB7 RB1 RB6 RB2 RB5 RB3 RB4 18 C3 17 33pF 16 U3 1 R6 10K R7 10K R8 R9 10K 6 15 14 +5V 13 4MHz C4 33pF C5 CONN1 12 100nF 11 1 10 2 3 ANT? 4 +5V TX 315Mhz 10K U4 R13 1 10K GND 10K 2 R12 DATA R11 3 10K 4 VCC +5V R10 1 ANT TITLE FILE: PAGE REVISION: OF DRAWN BY: Figura 5.7: Circuito transmissor rádio frequência PIC 16 5 6 U7 RX 315Mhz GND GND +5V ANT ANT1 8 7 6 5 4 3 3 2 OUT 1 IN +5V +5V 1 DATA GND U4 DATA Vcc 1 C2 GND 1 C1 2 B1 330uF 1 7805 2 +5V 100uF 10,8V C3 2 100nF 2 3 4 5 6 7 8 1.5K 9 RA2 RA1 RA3 RA0 RA4 RA7/OSC1 MCLR/RA5 Vss RA6/OSC2 Vdd RB0 RB7 RB1 RB6 RB2 RB5 RB3 RB4 18 2 17 16 3 20MHz U6 1 1 33pF C4 4 M2 15 5 +5V C5 14 33pF 6 13 7 12 8 Vcc U2 L293 +5V U1 +5V CHIP INHIBIT INPUT 1 VSS INPUT 4 OUTPUT 1 OUTPUT 4 GND GND GND GND OUTPUT 2 INPUT 2 VC OUTPUT 3 INPUT 3 CHIP INHIBIT 2 16 15 14 13 12 M1 11 10 9 +5V CONN2 11 10 1 LD293DNE (diodo interno/600mA) R1 2 3 Jumper selecao de alimentacao +5V 1 2 1 ROBO FUTEBOL V1.0 Jumper debug serial LED1 2 TITLE CONN1 FILE: PAGE OF REVISION: Luis Claudio Gamboa Lopes 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/IOPort-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 #include #include #include #include #include <unistd.h> <stdio.h> <stdlib.h> <sys/perm.h> <sys/resource.h> <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 #include #include #include #include #include #include #include #define #define #define #define #define <sys/types.h> <sys/stat.h> <fcntl.h> <termios.h> <stdio.h> <stdlib.h> <unistd.h> <string.h> BAUDRATE B9600 MODEMDEVICE "/dev/ttyS0" _POSIX_SOURCE 1 /* POSIX compliant source */ FALSE 0 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, newtio.c_cflag newtio.c_iflag newtio.c_oflag sizeof(newtio)); = BAUDRATE |CS8 | CLOCAL | CREAD; = IGNPAR|ICRNL|IGNBRK; = 0; /* set input mode (non-canonical, no echo,...) */ newtio.c_lflag = 0; newtio.c_cc[VTIME] newtio.c_cc[VMIN] = 0; = 5; /* inter-character timer unused */ /* 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 #include #include #include #include <conio.h> <stdio.h> <time.h> <windows.h> <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 Tabelas C.1, C.2, C.3 e C.4. Tabela C.1: Microcontrollers Memory Device PIC16F627 PIC16F628 FLASH Program 1024 x 14 2048 x 14 RAM Data 224 x 8 224 x 8 EEPROM Data 128 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 registradores. Para leitura e escrita serial existem mais dois registradores, TXREG e RCREG respectivamente. 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 Prata Ouro Preto Marrom Vermelho Laranja Amarelo Verde Azul Violeta Cinza Branco 1o anel 1o digito 0 01 02 03 04 05 06 07 08 09 2o anel 2o digito 0 01 02 03 04 05 06 07 08 09 3o anel Multiplicador 0,01 0,1 1 10 100 1 000 10 000 100 000 1 000 000 10 000 000 - 4o anel Tolerância 10% 5% 1% 2% 3% 4% - 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. Normalmente 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 apenas 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 amplificadores 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