You are on page 1of 40

Sandro Juc Um microcontrolador um sistema computacional completo, no qual esto includos internamente uma CPU (Central Processor Unit),

, memrias RAM (dados), flash (programa) e E2PROM, pinos de I/O (Input/Output), alm de outros perifricos internos, tais como, osciladores, canal USB, interface serial assncrona USART, mdulos de temporizao e conversores A/D, entre outros, integrados em um mesmo componente (chip). O microcontrolador PIC (Periferal Interface Controler), da Microchip Technology Inc. (empresa de grande porte, em Arizona, nos Estados Unidos da Amrica), possui uma boa diversidade de recursos, capacidades de processamento, custo e flexibilidade de aplicaes. condicional, incondicional, de repetio, etc As expresses podem envolver operandos e A principal diferena entre uma linguagem montada (como assembly) e a linguagem de programao C est na forma como o programa objeto (HEX) gerado. Em assembly, o processo usado a montagem, portanto devemos utilizar um MONTADOR (assembler), enquanto que em linguagem C o programa compilado. A compilao um processo mais complexo do que a montagem. Na montagem, uma linha de instruo traduzida para uma instruo em cdigo de mquina. J em uma linguagem de programao, no existem linhas de instruo, e sim estruturas de linguagem e expresses. Uma estrutura pode ser operadores mais complexos. Neste caso, geralmente, a locao dos registros de dados da RAM feita pelo prprio compilador. Por isso, existe a preocupao, por paret do compilador, de demonstrar, aps a compilao, o percentual de memria RAM ocupado, pois neste caso relevante, tendo em vista que cada varivel pode ocupar at 8 bytes (tipo double). Para edio e montagem (gerao do cdigo HEX) de um programa em assembly, os softwares mais utilizados so o MPASMWIN (mais simples) e o MPLAB. Para edio e compilao em linguagem C (gerao do cdigo HEX), o programa mais utilizado o PIC C Compiler CCS. Os microcontroladores PIC possuem apenas 35 instrues em assembly para a famlia de 12 bits (PIC12) e 14 bits (PIC16), descritas nas tabelas abaixo, e 7 instrues para a famlia de 16 bits (PIC18).

Como pode ser visto, a famlia PIC16F (14 bits com aproximadamente 35 instrues) no possui uma instruo em assembly que realize multiplicao ou diviso de dois operandos, o que curiosamente presente na linguagem assembly da famlia MCS51 (256 instrues que satisfazem a maioria das aplicaes industriais). Portanto, para realizar uma multiplicao, necessrio realizar somas sucessivas, ou seja, em vez de multiplicar uma varivel por outra, realizar somas de uma varivel em uma terceira rea de memria, tantas vezes quando for o valor da segunda varivel. (X * 5 = X + X + X + X + X). Mas em linguagem C possvel se utilizar o operador de multiplicao (*), de forma simples e prtica. Ao compilar, a linguagem gerada ir converter a multiplicao em somas sucessivas sem que o programador se preocupe com isso. - O compilador C ir realizar o processo de traduo, permitindo uma programao mais amigvel e mais fcil para desenvolvimento de aplicaes mais complexas como, por exemplo, uso do canal USB e aplicaes com o protocolo I2C. - A linguagem C permite maior portabilidade, uma vez que um mesmo programa pode ser recompilado para um microcontrolador diferente, com o mnimo de alteraes, ao contrrio do ASSEMBLY, onde as instrues mudam muito entre os diversos modelos de microcontroladores existentes como PIC e 8051. - Em C para microcontroladores PIC, no necessrio se preocupar com a mudana de banco para acessar os registros especiais da RAM como, por exemplo, as portas de I/O e os registros TRIS de comando de I/O dos pinos, isto executado pelo prprio compilador.

- possvel incluir outro arquivo em C para servir como parte do seu programa atual como, por exemplo, incluir o arquivo LCD (#include <lcd.c>), desenvolvido por voc anteriormente, para ser utilizado como funo projeto atual. - O ponto fraco da compilao em C que o cdigo gerado, muitas vezes, maior do que um cdigo gerado por um montador (assembler), ocupando uma memria maior de programa e tambm uma memria maior de dados. No entanto, para a maioria das aplicaes sugeridas na rea de automao industrial, a linguagem C para PIC se mostra a mais adequada, tendo em vista que a memria de programa tem espao suficiente para estas aplicaes. - Outra desvantagem que o programador no forado a conhecer as caractersticas internas do hardware, j que o mesmo se acostuma a trabalhar em alto nvel, o que compromete a eficincia do programa e tambm o uso de todas as funes internas do microcontrolador. A arquitetura de um sistema digital define quem so e como as partes que compe o sistema esto interligadas. As duas arquiteturas mais comuns para sistemas computacionais digitais so as seguintes: - Arquitetura de Von Neuman: A Unidade Central de Processamento interligada memria por um nico barramento (bus). O sistema composto por uma nica memria onde so armazenados dados e instrues; - Arquitetura de Harvard: A Unidade Central de Processamento interligada a memria de dados e a memria de programa por barramentos diferentes, de dados e de endereo. O PIC possui arquitetura Harvard com tecnologia RISC, que significa Reduced Instruction Set Computer (Computador com Conjunto de Instrues Reduzido). O barramento de dados de 8 bits e o de endereo pode variar de 13 a 21 bits dependendo do modelo. Este tipo de arquitetura permite que, enquanto uma instruo executada, uma outra seja buscada na memria, ou seja, um PIPELINE (sobreposio), o que torna o processamento mais rpido. memria de programa)A famlia 18F ele possui normalmente 21 bits e capaz e seja, 32 Kbytes de memria de programa)Cada Word de 14 ou 16 bits pode conter um O contador de programa responsvel de indicar o endereo da memria de programa para que seu contedo seja transportado para a CPU para ser executado. Na famlia PIC16F ele contm normalmente 13 bits, por isso, pode enderear os 8K words de 14 bits (o PIC16F877A possui exatamente 8K words de 14 bits, ou seja, 14 Kbytes de enderear at 2 Megas words de 16 bits (o PIC18F2550 possui 16K words de 16 bits, ou cdigo de operao (opcode) com a instruo e um byte de dado. Um barramento um conjunto de fios que transportam informaes com um propsito comum. A CPU pode acessar trs barramentos: o de endereo, o de dados e o de controle. Como foi visto, cada instruo possui duas fases distintas: o ciclo de busca, quando a CPU coloca o contedo do PC no barramento de endereo e o contedo da posio de memria colocado

no Registro de instruo da CPU, e o ciclo de execuo, quando a CPU executa o contedo colocado no registro de instruo e coloca-o na memria de dados pelo barramento de dados. Isso significa que quando a operao do microcontrolador iniciada ou resetada, o PC carregado com o endereo 0000h da memria de programa.

As instrues de um programa so gravadas em linguagem de mquina hexadecimal na memria de programa flash (ROM). No incio da operao do microcontrolador, o contador de programa (PC) indica o endereo da primeira instruo da memria de programa, esta instruo carregada, atravs do barramento de dados, no Registro de Instruo da CPU. Um opcode (cdigo de instruo), gerado na compilao em hexadecimal, contm uma instruo e um operando. No processamento, a CPU compara o cdigo da instruo alocada no registro de instruo com o Set de Instrues do modelo fabricado e executa a funo correspondente. Aps o processamento, o operando dessa instruo indica para a CPU qual a posio da memria de dados que deve ser acessada e, atravs do barramento de controle, a CPU comanda a leitura ou a escrita nesta posio. Aps o processamento de uma instruo, o PC incrementado para indicar o endereo do prximo cdigo de instruo (opcode), da memria de programa, que deve ser carregado no registro de instruo. A pilha um local da RAM ( no PIC18F2550 localizada no final dos Registros de Funo Especial entre FFDh e FFFh) onde guardado o endereo da memria de programa antes de ser executado um pulo ou uma chamada de funo localizada em outra posio de memria. O oscilador externo ou interno usado para fornecer um sinal de clock ao microcontrolador. O clock necessrio para que o microcontrolador possa executar as instrues de um programa. Nos microcontroladores PIC, um ciclo de mquina (CM) possui quatro fases de clock Q1, Q2, Q3 e Q4. Dessa forma, para um clock externo de 4MHz, temos um ciclo de mquina (CM=4 x 1/F) igual a 1s.

O Contador de Programa (PC) incrementado automaticamente na fase Q1 do ciclo de mquina e a instruo seguinte buscada da memria de programa e armazenada no registrador de instrues da CPU no ciclo Q4. Ela decoficada e executada no prximo ciclo, no intervalo de Q1 e Q4. Essa caracterstica de buscar a informao em um ciclo de mquina e execut-la no prximo, ao mesmo tempo em que outra instruo buscada, chamada de PIPELINE (sobreposio). Ela permite que quase todas as instrues sejam executadas em apenas um ciclo de mquina, gastando assim 1 s (para um clock de 4 MHz) e tornando o sistema muito mais rpido. As nicas exees referem-se s instrues que geram saltos no program counter, como chamadas de rotinas e retornos. Ferramenta SanUSB O circuito de desenvolvimento SanUSB uma ferramenta composta de software e hardware bsico de um PIC18F2550, mostrado abaixo. Esta ferramenta, com pedido de patente protocolado no INPI (Instituto Nacional de Propriedade Industrial) com o nmero 088503, capaz de substituir: 1- Um equipamento especfico para gravao de um programa no microcontrolador; 2conversor TTL - EIA/RS-232 para comunicao serial bidirecional emulado atravs do protocolo CDC; 3- fonte de alimentao, j que a alimentao do PIC provm da porta USB do PC. importante salientar que cargas indutivas como motores de passo ou com corrente acima de 400mA devem ser alimentadas por uma fonte de alimentao externa. 4- Conversor analgico-digital (AD) externo, tendo em vista que ele dispe internamente de 10 ADs de 10 bits; 5- software de simulao, considerando que a simulao do programa e do hardware podem ser feitas de forma rpida e eficaz no prprio circuito de desenvolvimento ou com um protoboard auxiliar. Alm de todas estas vantagens, os laptops e alguns computadores atuais no apresentam mais interface de comunicao paralela e nem serial EIA/RS-232, somente USB. Como pode ser visto, esta ferramenta possibilita que a compilao, a gravao e a simulao real de um programa, como tambm a comunicao serial atravs da emulao de uma porta COM virtual, possam ser feitos de forma rpida e eficaz a partir do momento em o microcontrolador esteja conectado diretamente a um computador via USB.

Gravao com o SanUSB A transferncia de programas para os microcontroladores normalmente efetuada atravs de um hardware de gravao especfico. Atravs desta ferramenta, possvel efetuar a descarga de programas diretamente de qualquer porta USB de um PC. A representao bsica do SanUSB mostrada a seguir:

Note que a fonte de alimentao do PIC vem da prpria porta USB do PC. Na figura abaixo mostrada uma foto do circuito de desenvolvimento SanUSB em um protoboard com o conector USB. Para obter vrios programas-fonte e vdeos deste sistema de gravao, comunicao e alimentao via USB, basta se cadastrar no grupo de acesso livre http://br.groups.yahoo.com/group/GrupoSanUSB/ e clicar no item Arquivos.

Como pode ser visto, o cabo USB tem quatro fios. Normalmente, o fio Vcc do cabo USB vermelho, o Gnd marron ou preto, o D+ azul ou verde e o D- amarelo ou branco. A figura do conector USB mostra as posies onde cada fio conectado, que podem ser verificadas testando a continuidade de cada fio com um multmetro. Caso o sistema microcontrolado seja embarcado como, por exemplo, um rob, um sistema de aquisio de dados ou um controle de acesso, ele necessita de uma fonte de alimentao externa, que pode ser uma bateria comum de 9V ou um carregador de celular. A figura abaixo mostra o PCB, disponvel nos Arquivos do Grupo SanUSB, e o circuito para esta ferramenta com entrada para fonte de alimentao externa.

Para a programao do microcontrolador basta inserir, no inicio do programa em C, a biblioteca cabealho SanUSB (#include <SanUSB.h>) contida dentro da pasta SanUSB_User\Exemplos_SanUsb e deve ser adicionada dentro da pasta Drivers localizada na pasta instalada do compilador PICC. Essa biblioteca contm informaes de na memria de programa do PIC18F2550 para o sistema operacional, configuraes do fusveis e habilitao do oscilador interno para CPU de 4MHz. Com esta freqncia cada incremento dos temporizadores corresponde a um microssegundo. O programa abaixo para piscar trs leds conectados nos pinos B0, B6 e B7. #include <SanUSB.h>

while (TRUE) { output_high(pin_B0); // Pisca Led na funo principal delay_ms(500); output_low(pin_B0); output_high(pin_B6); delay_ms(500); output_low(pin_B6); output_high(pin_B7); delay_ms(500); output_low(pin_B7); }

Para executar a gravao In-Circuit nesta ferramenta SanUsb, importante seguir os seguintes passos: 1. Copie a pasta SanUSB_User para um diretrio raiz C ou D. 2. Para que o Windows identifique o PIC18F2550 como um dispositivo para o Bootloader atravs da USB, necessrio instalar o Driver sanusb_device da pasta DriverWinSanUsBoot. Clique no boto direito sobre Driver sanusb_device da pasta e clique em Instalar. 3. Conecte o Jump de gravao do circuito para a transferncia de programa pelo software SanUSB. 4. Conecte o cabo USB entre o PIC e o PC. Se for a primeira vez, o windows ir perguntar onde est o Driver de instalao, ento escolha a opo Instalar de uma lista ou local especifico (avanado). Aps Avanar, selecione a opo Incluir este local na pesquisa e selecione a pasta DriverWinSanUsBoot, onde est o driver sanusb_device. Durante a instalao, o windows abrir uma janela sobre a instalao, selecione a opo continuar assim mesmo e o Driver ser instalado. 5. Abra o aplicativo SanUSB. Se estiver conectado corretamente, o led conectado no pino B0 ou B7 ascende ( apagado aps o reset) e aparecer a seguinte tela:

6. Clique em 1. Gravar novo programa e escolha o programa .hex que deseja gravar, como por exemplo, o programa compilado 30829USB_piscaBoot.hex da pasta Exemplos_SanUsb. Este programa pisca 3 leds conectados nos pinos B0, B6 e B7; 7. Aps a gravao do programa, retire o jump do pino de gravao e clique em 2. Reset. Pronto o programa estar em operao. Para programar novamente, basta colocar o jump de gravao, retire o jump de alimentao, coloque-o novamente e repita os passos anteriores a partir do passo 5. Se a nova programao no funcionar, retire o conector USB do computador e repita os passos anteriores a partir do passo 3. importante salientar que, no SanUSB, o processador do programa foi configurado com o mesmo clock de entrada da USB com 48MHz a partir de um cristal de 20MHz. Dessa forma, para rotinas de tempo, deve-se inserir a diretiva #use delay(clock=48000000).

SanUSB CDC Comunicao Serial Neste tpico mostrado um mtodo de comunicao serial bidirecional atravs do canal USB do PIC18F2550. Uma das formas mais simples, segundo a Microchip, atravs do protocolo Communications Devices Class (CDC), que emula uma porta COM RS-232 virtual, atravs do canal USB 2.0 full speed. Dessa forma, possvel se comunicar com a USB atravs de qualquer software monitor serial RS-232 como o HyperTerminal e o SIOW do CCS. O driver CDC instalado no PC e o programa com a biblioteca CDC gravado no PIC so os responsveis por esta emulao da porta RS-232 virtual atravs da USB. Na figura abaixo entenda firmware com programa gravado no PIC e API como as bibliotecas de interface do programa para comunicao serial.

A biblioteca CDC para o programa.c do microcontrolador est dentro da pasta include, a qual deve estar na mesma pasta onde est o programa.c a ser compilado para a emulao da comunicao serial RS-232. Alm disso, o programa.c deve ter a instruo #include ".\include\usb_san_cdc.h", como mostra a o exemplo de leitura e escrita em um buffer da EEPROM interna do microcontrolador. As funes CDC mais utilizadas contidas na biblioteca usb_san_cdc.h para comunicao com a COM virtual so: usb_cdc_putc(); Ex.:printf(usb_cdc_putc, "\r\nEndereco para escrever: "); gethex_usb()Ex.: valor = gethex_usb(). usb_cdc_getc(); Ex.: dado = usb_cdc_getc(); usb_cdc_kbhit( ) Avisa com TRUE (1) se acabou de chegar um novo caractere no buffer de recepo USB do PIC. Ex.: if (usb_cdc_kbhit(1)) {comando = usb_cdc_getc();}

O exemplo abaixo mostra a leitura e escrita em um buffer da EEPROM interna do microcontrolador com emulao da serial atravs da USB: #include <SanUSB.h> #include ".\include\usb_san_cdc.h"// Biblioteca para comunicao serial #rom int 0xf00000={'S','A','N'} // Escreve no endereo inicial da EEPROM interna(no 18F 0xf00000) BYTE i, j, endereco, valor; boolean led; usb_init();// Inicializa o protocolo USB clock_int_4MHz(); usb_cdc_init(); // Inicializa o protocolo CDC usb_task(); // Une o perifrico com a usb do PC //while(!usb_cdc_connected()) {} // espere enquanto o protocolo CDC no se conecta com o driver CDC //usb_wait_for_enumeration();//espera at que a USB do Pic seja reconhecida pelo PC output_high(pin_b7); // Sinaliza comunicao USB Ok

printf(usb_cdc_putc, "\r\nEndereco para escrever: "); endereco = gethex_usb(); printf(usb_cdc_putc, "\r\nNovo valor: "); valor = gethex_usb(); write_eeprom( endereco, valor ); led = !led; // inverte o led de teste output_bit (pin_b7,led); } Para que o Windows identifique o PIC como um dispositivo de entrada e sada USB, necessrio instalar o Driver CDC mchpcdc.inf, fornecido pela microchip, que contm as informaes de identificao. Para instalar o driver, abra a pasta DriverSanWinCDC, selecione o arquivo mchpcdc.inf, clique com o boto direito e depois instalar.

Por parte do microcontrolador, a pasta include, dentro de Exemplos_SanUsb, j contm bibliotecas CDC para conexo com o Driver CDC e para identificao do microcontrolador. Aps gravao de um programa que utilize comunicao serial CDC no microcontrolador pelo SanUSB e resetar o microcontrolador, o sistema vai pedir a instalao do driver CDC (se for a primeira vez).

Escolha a opo Instalar de uma lista ou local especifico (avanado). Aps Avanar, selecione a opo Incluir este local na pesquisa e selecione a pasta DriverSanWinCDC, onde est o driver CDC mchpcdc.inf.

Aps Avanar, clique em Continuar assim mesmo. Aguarde enquanto o Driver CDC instalado no Windows.

Clique em Concluir para terminar a instalao.

V em painel de controle -> sistema -> Hardware -> Gerenciador de dispositivos -> Portas (COM & LPT) e confira qual a porta COM virtual instalada.

Abrindo qualquer programa monitor de porta serial RS-232, como o SIOW do CCS, direcionando para a COM virtual instalada (COM3,COM4,COM5,etc.) em configuration > set port options entraremos em contato com o nosso PIC.

A descrio dos fusveis deste exemplo a seguinte: - HSPLL: Cristal de alta freqncia (>4 MHz) com divisor de freqncia PLL habilitado - PLL5: Divide por 5 (entrada 20MHz transformada para o padro 4MHz) - USBDIV: A fonte de clock da CPU vem do PLL Postscaler (98MHz) dividido por 2 (48MHz) - CPUDIV1: Sem Oscilator Postscaler - VREGEN: Regulador de tenso USB habilitado - NOWDT: Sem Watch Dog Timer

- NOPROTECT: Cdigo no protegido de leitura - NOLVP: Sem programao em baixa tenso, B5(PIC18) usado para I/O - NODEBUG: Sem modo Debug para ICD Maiores esclarecimetos sobre outros fusveis disponveis de cada modelo possvel obter em view -> valid fuses no CCS. A figura abaixo exemplifica o caminho do clock gerado pelos fusveis para obter 48 MHz na USB e na CPU com um cristal de 20 MHz.

A interrupo do canal USB do PIC j utilizada no protocolo CDC. Dessa forma, para utilizar uma funo que necessite de atendimento imediato quando um caractere for digitado necessrio inserir a condio if (usb_cdc_kbhit(1)){ dado=usb_cdc_getc(); } no lao infinito da funo principal do programa para verificar, de forma constante, se chegou um novo byte enviado pelo PC. Este comando tambm evita que o programa fique parado no usb_cdc_getc (que fica esperando um caractere para prosseguir o programa).Veja o programa abaixo, que pisca um led na funo principal (pino B0), um led por interrupo do timer 1 (pino B6) e comanda o estado se outro led (pino B7) pelo teclado de um PC via USB atravs desta condio if (usb_cdc_kbhit(1)): #include <SanUSB.h> #include ".\include\usb_san_cdc.h"// Biblioteca para comunicao serial BYTE comando; int mult=24; boolean led;

usb_init();// Inicializa o protocolo USB usb_cdc_init(); // Inicializa o protocolo CDC usb_task(); // Une o perifrico com USB do PC printf(usb_cdc_putc, "\r\nINTERRUPCAO USB_CDC_GETC() PICSAN USB 2.0\r\n"); output_high(pin_b7); // Sinaliza comunicao USB Ok output_high(pin_b6); // Sinaliza Led interupo do timer1 enable_interrupts (global); // Possibilita todas interrupcoes

enable_interrupts (int_timer1);// Habilita interrupcao do timer 1

while (TRUE) { if (usb_cdc_kbhit(1))//avisa se chegou dados do PC delay_ms(500);} { //verifica se acabou de chegar um novo byte no buffer de recepo, depois o kbhit zerado para prximo byte comando=usb_cdc_getc(); //se chegou, retm o caractere e compara com L ou D if (comando==L) {output_high(pin_b7); printf(usb_cdc_putc, \r\nLed Ligado!\r\n);} if (comando==D) {output_low(pin_b7); printf(usb_cdc_putc, \r\nLed Desigado!\r\n);} } output_high(pin_B0); // Pisca Led na funo principal delay_ms(500); output_low(pin_B0); } Aps gravar o programa, lembre de direcionar o monitor serial SIOW ou Hyperterminal para a COM virtual instalada (COM3,COM4,COM5,etc.) em configuration > set port options.

O objetivo do conversor AD converter um sinal analgico, geralmente de 0 a 5V, em equivalentes digitais. Como pode ser visto, algumas configuraes permitem ainda que os pinos A3 e A2 sejam usados como referncia externa positiva e negativa, fazendo com que uma leitura seja feita em uma faixa de tenso mais restrita como, por exemplo, de 1 a 3 Volts.

Em C, o conversor AD pode ser ajustado para resoluo de 8 bits (#device adc=8 armazenando o resultado somente no registro ADRESH) ou 10 bits (#device adc=10). Para um conversor A/D com resoluo de 10 bits e tenso de referncia padro de 5V, o valor de cada bit ser igual a 5/(210 - 1) = 4,8876 mV, ou seja, para um resultado igual a 100 (decimal), teremos uma tenso de 100* 4,8876 mV = 0,48876 V. Note que a tenso de referncia padro (Vref) depende da tenso de alimentao do PIC que normalmente 5V. Se a tenso de alimentao for 4V, logo a tenso de referncia (Vref) tambm ser 4V. Para um conversor A/D com resoluo de 10 bits e tenso de referncia de 5V, o valor de cada bit ser igual a 5/(28 - 1) = 19,6078 mV, ou seja, para um resultado igual a 100 (decimal), necessrio uma tenso de 100 * 19,6078 mV = 1,96078 V, quatro vezes maior. comum se utilizar o conversor AD com sensores de temperatura (como o LM35), luminosidade (como LDRs), presso (STRAIN-GAGE), tenso, corrente, humidade, etc..

setup_adc_ports (AN0_TO_AN2); //(Seleo dos pinos analgicos 18F2550) Para utilizar este perifrico interno, basta: setup_adc(ADC_CLOCK_INTERNAL ); //(selecionar o clock interno) Veja a nomenclatura dos canais analgicos de cada modelo, dentro da biblioteca do CCS na pasta Device. Depois, no lao infinito, basta selecionar o canal para leitura, esperar um tempo para a seleo fsica e ento ler o canal AD.

set_adc_channel(0); //Seleciona qual canal vai converter delay_ms (10); // aguarda 10ms valor = read_adc(); // efetua a leitura da converso A/D e guarda na varivel valor O ajuste da resoluo do conversor AD se d aproximando a tenso de fundo de escala do sensor (VFS) tenso de referencia do conversor (VREF). Para isso existem duas tcnicas de ajuste por Hardware:

Para este tpico utilizado como exemplo de ajuste da resoluo do conversor AD, o sensor de temperatura LM35 que fornece uma sada de tenso linear e proporcional com uma resoluo de 10mV a cada C. A preciso nominal de 0,5C a 25C. Para conversores AD de 8 bits e VREF de 5V, a resoluo mxima de 19,6mV (R= VREF / (2n-1). Dessa forma, como a Resoluo do sensor 10mV/C (RS), necessrio aplicar um ajuste de resoluo com um ganho na tenso de fundo de escala do sensor para que cada grau possa ser percebido pelo conversor do microcontrolador. A forma mais comum de ganho a utilizao de amplificadores operacionais no inversores. Veja mais detalhes no material de apoio no final dessa apostila. A tenso de fundo de escala (VFS) est relacionada Temperatura Mxima desejada de medio (TMAX), onde VFS = RS(10mV/C) * TMAX e o Ganho (G) de aproximao da tenso de fundo de escala (VFS) tenso de referencia (VREF) dado por G = VREF / VFS, ou seja, para uma Temperatura Mxima desejada de 100C, o ganho deve ser aproximadamente 5.

A aproximao da tenso de fundo de escala (VFS) tenso de referencia (VREF) para diminuir a relevncia de rudos em determinadas faixas de temperatura. Por exemplo, 100C apresenta uma tenso de fundo de escala de apenas 1Volt (100C *10mV/C) para uma VREF de 5V do conversor AD. O circuito abaixo mostra um exemplo de uso de amplificador para melhorar a resoluo do conversor.

Circuito2: Temperatura mxima desejada de 125C e Ganho de 4 (1+3/1) Neste exemplo, a tenso de fundo de escala (VFS) foi aumentada, em uma faixa de 0 a 100C para 4 Volts (Ganho de 4). Dessa forma, na tenso de referncia de 5V, o conversor mede 125C. Como neste caso o conversor AD de 10 bits, ento, ele percebe uma variao de temperatura a cada 0,12C (125C /1023). Outra forma mais simples de ajuste por Hardware (aumento da resoluo do conversor AD) a aproximao da tenso de referencia (VREF) tenso de fundo de escala (VFS) atravs da diminuio da tenso de referncia (VREF) com o uso de um potencimetro (divisor de tenso). Por exemplo, um conversor AD de 8 bits com uma tenso de referncia sensibilidade do sensor LM35 de 10mV/CPercebe variao a cada C. de 2,5, apresenta uma resoluo de 10mV por bit (2,5/(28-1)), ou seja, a mesma CONVERSORES AD DE 10 BITS Para conversores de 10 bits, com maior resoluo (4,89 mV), o ajuste (escalonamento) realizado geralmente por software, em linguagem C, que possui um elevado desempenho em operaes aritmticas. OBS.: O ganho de tenso do circuito 3 poderia ser simulado por software com os comandos: Int32 valorsensor= read_adc(); Int32 VFS = 4 * Valorsensor; A frmula utilizada pelo programa no PIC para converter o valor de tenso fornecido pelo sensor em uma temperatura : 5V-> 1023 ANALGICO DIGITAL T(C)* 10mV/C -> READ_ADC onde READ_ADC o valor digital obtido a partir da temperatura (T(C)) analgica medida. A tenso de referncia do conversor 5V e como o conversor possui 10 bits de resoluo, ele pode medir 1023 variaes. LEITURA DE TEMPERATURA COM O LM35 ATRAVS DO CONVERSOR AD #include <SanUSB.h> #include ".\include\usb_san_cdc.h"// Biblioteca para comunicao serial int16 temperatura; clock_int_4MHz(); usb_cdc_init(); // Inicializa o protocolo CDC usb_init(); // Inicializa o protocolo USB usb_task(); // Une o perifrico com a USB do PC

setup_adc_ports(AN0); //Habilita entrada analgica - A0 setup_adc(ADC_CLOCK_INTERNAL); while(1){ set_adc_channel(0); delay_ms(10); temperatura=430*read_adc()/1023; //Vref = 4,3V devido queda no diodo, ento (430*temp) printf (usb_cdc_putc,"\r\nTemperatura do LM35 = %lu C\r\n",temperatura); output_high(pin_b7);// Pisca Led em operao normal

delay_ms(500);}}

Os operadores lgicos descritos abaixo adotam o padro ANSI C, ou seja, podem ser utilizados por qualquer compilador em linguagem C direcionado microcontroladores. Nesse caso, os operadores so utilizados para realizar operaes de testes condionais geralmente entre nmeros inteiros. && Operao E (AND) l Operao OU (OR) ! Operao NO (NO) Exemplos: if (segundodec==05 && (minutodec==0|| minutodec==30)) {flagwrite=1;}//Analisando um relgio para setar a flagwrite if (x>0 && x<20) (y=x;) // Estabelecendo faixa de valores para y. & Operao E (AND) l Operao OU (OR) ! Operao NO (NO) ~ Complemento de um OU exclusivo (XOR) >> Deslocamento para a direita << Deslocamento para a esquerda importante salientar que atravs das operaes bsicas E, OU e NO possvel construir outras operaes como NE, NOU, OU-Exclusivo e Coincidncia. Isto realizado guardando os resultados de operaes intermedirias em variveis auxiliares.

Exemplo: #include <SanUSB.h> short int ledXOR, ledpisca;

while (TRUE) { output_bit(pin_b7,ledXOR); //O LedXOR mostra o resultado do OU exclusivo ledpisca=!ledpisca; // ledpisca igual ao inverso de ledpisca output_bit(pin_b0,ledpisca);// b0 recebe o valor de ledpisca ledXOR = input(pin_b1)input(pin_b2); //OU exclusivo entre os pinos b1 e b2 com pull-up externo delay_ms(500); } Interrupo um evento que obriga o microcontrolador a interromper temporariamente suas atividades a fim de atender, de forma urgente, a este evento que o interrompeu. Aps do atendimento da interrupo, o microcontrolador retorna exatamente ao ponto onde parou no programa antes de atend-la. As interrupes mais comuns na famlia PIC18F so: - pela interrupo externa 0 (Pino B0); - pela interrupo externa 1 (Pino B1); - pela interrupo externa 2 (Pino B2); - pelo contador/temporizador 0; - pelo contador/temporizador 1; - pelo contador/temporizador 2; - pelo canal de comunicao serial. As interrupes do PIC so vetorizadas, ou seja, tm endereos de incio da interrupo fixos para a rotina de tratamento. No PIC18F2550 o endereo de tratamento 0x08. No programa em C basta escrever a funo de tratamento da interrupo aps #, e o compilador far o direcionamento do cdico automaticamente. Exemplo de programa com aplicao de interrupo externa e interruo do temporizador: #include <SanUSB.h> BYTE comando; short int led; int x; #int_timer1 void trata_t1 () { led = !led; // inverte o led - pisca a cada 0,5 seg. output_bit (pin_b7,led); set_timer1(3036 + get_timer1()); }

#int_ext void bot_ext() { for(x=0;x<5;x++) // pisca 5 vezes aps o pino ser aterrado (boto pressionado) { output_high(pin_B5); // Pisca Led em B5 delay_ms(1000); output_low(pin_B5); delay_ms(1000); }

enable_interrupts (global); // Possibilita todas interrupcoes enable_interrupts (int_timer1); // Habilita interrupcao do timer 1 enable_interrupts (int_ext); // Habilita interrupcao externa 0 no pino B0 setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8);// configura o timer 1 em 8 x 62500 = 0,5s set_timer1(3036); // Conta 62.500us x 8 para estourar= 0,5s while (1); //Loop infinito (parado aqui) } PADRO EIA/RS-232 A comunicao serial teve incio com a inveno do telgrafo. Depois teve um grande desenvolvimento com a inveno do Teletype (teletipo) pelo Francs Jean Maurice mile Baudot, em 1871, da o nome Baud Rate. Baudot, alm de criar toda a mecnica e eltrica do Teletype, criou tambm uma tabela de cdigos (Cdigo de Baudot) com letras, nmeros, e smbolos para a transferncia serial assncrona digital de informaes. Da surgiu o Padro de comunicao RS-232, que significa Padro Recomendado verso 232. Na transmisso dos caracteres atravs da linha telegrfica, o sinal de Marca era representado pela presena de corrente eltrica, e o Espao pela ausncia desta corrente. Para que o Teletype conseguisse distinguir o incio e o final de um caractere, o mesmo era precedido com um sinal Espao (start bit) e finalizado com um sinal de Marca (stop bit). Entenda que o estado da linha ociosa (sem transmisso de dados) era o sinal de Marca (presena de corrente eltrica). Foi baseado nesse sistema que o padro de transmisso RS- 232 evoluiu e se tornou um padro muito utilizado nos computadores e equipamentos digitais. Algumas interfaces EIA/RS-232 nos computadores atuais fornecem aproximadamente -10v e +10v, mas suportam mnimas de -25v e mximas de +25v. A Comunicao serial feita pela transmisso de bits em seqncia. um modo de comunicao muito recomendado para transmisso de dados a longa distncia. Nesse caso, a comunicao serial apresenta um menor custo pelo nmero reduzido de fios e conseqentemente menor velocidade em relao comunicao paralela. Para a transmisso de dados por distncias maiores e com pouca interferncia podese utilizar uma interface com outros padres como o EIA/RS-232 e o EIA/RS-485. A comunicao serial pode ser sncrona ou assncrona. Na primeira, alm dos bits de dados so enviados tambm bits de sincronismo, ou seja, o receptor fica em constante sincronismo com o Transmissor. Na comunicao assncrona, que o modo mais utilizado de comunicao entre sistemas de controle e automao por no necessitar de sincronismo, existe um bit que indica o incio da transmisso, chamado de start bit (nvel lgico baixo) e um bit que indica o final da transmisso chamado de stop bit (nvel lgico alto). Nessa transmisso, o Receptor em sincronismo com o

Transmissor apenas no incio da transmisso de dados. Deve-se considerar que o transmissor e o receptor devem estar na mesma velocidade de transmisso. Quando o canal serial est em repouso, o sinal correspondente no canal tem um nvel lgico 1. Um pacote de dados sempre comea com um nvel lgico 0 (start bit) para sinalizar ao receptor que um transmisso foi iniciada. O start bit inicializa um temporizador interno no receptor avisando que a transmisso. Seguido do start bit, 8 bits de dados de mensagem so enviados com a velocidade de transmisso pr-programada no emissor e no receptor. O pacote concludo com os bits de paridade e de parada (stop bit). O bit de paridade usado como nono bit com o propsito de deteco de erro. Nessa conveno, quando o nmero total de dgitos 1 , o valor do bit de paridade 1 e quando for mpar 0.

A interrupo do canal serial utilizada quando se espera receber um dado em tempo aleatrio enquanto se executa outro programa. Quando o dado chega, o start bit (nvel lgico baixo) aciona a interrupo, previamente habilitada, onde a recepo da comunicao serial executada. Caso o canal serial seja utilizado somente para transmisso de dados, no necessrio habilitar a interrupo serial. Um dos formatos mais utilzados em comunicao serial o ASCII. Este formato utiliza sete bits (o oitavo bit zero). A Tabela de Caracteres ASCII mostrada abaixo:

A interface serial USART do PIC pode ser sncrona ou assncrona, sendo esta ltima a mais utilizada para comunicao com o mundo externo utilizando o padro EIA/RS-232, onde cada byte sincronizado por um start-bit e o sistema reconhece automaticamente o clock pelo sinal recebido, e no fim do byte transmitido por um stop-bit. Os conectores utilizados so o DB9 e o DB25, como mostra a figura abaixo:

Em suma, os pinos utilizados na comunicao serial entre computadores e microcontroladores so o TXD, o RXD e o Terra (GND). O nvel lgico alto no padro RS232 est entre 3 e 25V e o nvel lgico baixo est entre +3 e +25V. Para a comunicao entre um PC e um PIC so utilizados chips que convertem os nveis de tenso TTL/RS232.

Par converter os padres TTL/RS232, o chip mais utilizado o MAX232, o qual utiliza quatro inversores para converter entre 3V a 25V (RS232) em +5V (TTL), e entre +3V a +25V (RS232) em 0V (TTL). Computadores apresentam cerca de 10V e +10V, mas suportam mnimas de -25v e mximas de +25v. Assim Como o MAX232 existem outros conversores, tipo ICL3232, etc. O esquema de ligao do MAX232 mostrado a seguir:

CIRCUITO EQUIVALENTE AO MAX 232 Este circuito utiliza o pino 8 (Clear To Send igual a 10V) para fornecer tenso negativa para o pino 2 (Rx) quando o bit de recepo tiver nivel lgico alto. Ele vlido para pequenos cabos e velocidade de transmisso relativamente baixas, utiliza basicamente dois transistores, BC337 (NPN) e outro BC557 (PNP), 2 resistores de 4,7K, um de 2,2K e um de 10K para a converso TTL/RS232, como mostra a figura abaixo. Note que, o nvel lgico alto 1 em RS232 varia de 3 a 25V, e o nvel lgico baixo 0 varia de +3 a +25V.

Quando o PC enviar o bit 1 (-10V) no DB9, o BC337 cortado e o Rx do PIC recebe +5V, atravs do resistor de 10K, ou seja, 1. Quando o PC enviar o bit 0 (+10V) no DB9, o BC337 saturado, aterrando o pino Rx do PIC, ou seja, 0. Quando o PIC enviar o bit 1 (+5V), o BC557 cortado e a tenso no Rx do PC igual a tenso de CTS (-10V) menos a queda no resistor de 2,2K, que corresponde em RS232 1. Quando o PIC enviar o bit 0 (0V), o BC557 saturado e a tenso no Rx do PC aproximadamente a 4,3V (VCC 0,7V), ou seja, nvel RS232 0. Neste caso, o cabo entre o conector DB9 e o PC deve ser o menor possvel para no provocar uma queda de tenso nos 4,3V (para menor que 3V), o que no seria compreendido como nvel RS232 0 pelo PC. FONTE DE TENSO COM MOUSE SERIAL DB9 O mouse serial DB9 contm quatro fios entre eles, o Rx (pino 2), o Tx (pino 3), o Gnd (pino 5) e o RTS (pino 7). Dessa forma, pode-se utilizar o pino 7 (Request to Send com cerca de +10V em circuito aberto e 3,5V conectado ao microcontrolador) e o Gnd do cabo serial como fonte de tenso em qualquer operao menos transmisso do computador pela serial, pois a tenso passa a ser -10V. Neste caso, aconselhvel colocar um diodo em srie com o pino (tenso cai para cerca de 3V) para evitar tenses reversas, quando o computador enviar um byte, e um capacitor de 10uF em paralelo para aumentar a estabilidade da tenso. PADRO EIA/RS-485 No padro EIA/RS-232, os sinais so representados por nveis de tenso referentes ao Gnd. H um fio para transmisso, outro para recepo e o fio terra para referncia dos nveis de tenso. Este tipo de interface til em comunicaes ponto-a-ponto e baixas velocidades de transmisso. Visto a necessidade de um terra comum entre os dispositivos, h limitaes do comprimento do cabo a apenas algumas dezenas de metros. Os principais problemas so a interferncia e a resistncia do cabo.

O padro RS-485 utiliza um princpio diferente de multiponto, no qual o transmissor gera uma tenso diferencial entre -1,5 e -6 V entre o terminal A em relao ao terminal B para sinalizar um bit 1 e gera uma tenso diferencial entre +1,5 e +6 V no terminal A em relao ao terminal B para sinalizar um bit 0. Com uma queda de tenso mxima de at 1,3 V, o receptor mede a diferena de tenso entre os terminais A e B e aceita tenses acima de 0,2 V como nvel lgico 0 e abaixo de 0,2 V como bit 1. Portanto tenses diferenciais entre -0,2 e 0,2 no so identificadas como sinal vlido. As tenses medidas entre os terminais A e GND ou B e GND (modo comum) devem estar, respectivamente, entre -7 e +12 V. Comparando o padro RS-485 com o RS-232 encontramos um menor custo devido a possibilidade de uso de fontes de alimentao assimtricas, enquanto que o RS-232 exige o uso de fontes simtricas (terra) nos transmissores e receptores. O RS-485 permite ainda a montagem de uma rede de comunicao sobre dois fios habilitando uma comunicao serial de dados confivel com: - Distncias de at 1200 metros (4000 ps); - Velocidades de at 10Mbps; - At 32 ns na mesma linha de comunicao. Este protocolo muito utilizado ema rede mestre/escravo que adota o princpio de difuso da informao (Broadcast), onde todos recebem, em interrupo serial, um pacote (conjunto de bytes) de informaes, mas s responde quem tem o endereo do pacote. Tem-se assim uma forma de evitar colises de dados na rede, visto que apenas o mestre ou o escravo escolhido est transmitindo. CABOS NO EIA/RS-485 recomendado cabos par tranado ou triaxial com 1 ou dois pares de fios 24 AWG com impedncia caracterstica de 120 W. Os cabos utilizados em ambientes industriais adiciona ao par tranado a blindagem dupla com folha de alumnio (proteo capacitiva) e malha de cobre (proteo magntica) com conector dreno. Um erro comum nas montagens de rede RS-485 a troca da ligao entre os terminais A e B de dispositivos distintos.

O uso de resistores de terminao, tipicamente de 120 , so necessrios somente nos extermos do barramento para evitar os efeitos de reflexo de sinais, tpicos de uma linha de transmisso. Note que as derivaes que conectam ns intermedirios topologia barramento precisam ser to curtas quanto possvel (se aproximando da Daisy Chain), pois uma longa derivao cria uma anomalia na impedncia do cabo, que leva a reflexes indesejadas. Se as linhas ou derivaes intermedirias so menores que 100 metros e a velocidade menor ou igual a 9600 bps, o resistor de terminao da derivao torna-se desnecessrio, a no ser que o fabricante recomende. Umas das vantagens da transmisso balanceada sua robustez rudos e interferncias. Se um rudo introduzido na linha, ele induzido nos dois fios de modo que a diferena entre A e B dessa interferncia tende a ser quase nula, com isso o alcance pode chegar a 4000 ps, aproximadamente 1200 metros.[4] Vale citar que o padro RS-232 em sua taxa mxima de comunicao alcana em torno de 50 ps, aproximadamente 15 metros.[3] Como o padro RS-485 (half-duplex) foi desenvolvido para atender a necessidade de comunicao multiponto o seu formato permite conectar at 32 dispositivos, sendo 1 transmissor e 1 receptor por dispositivo.[4]

Normalmente para o modo de transmisso e recepo simultneo, uni-se os pinos /RE e DE constuindo um habilitador (enable) geral de forma que o transceptor esteja apenas recebendo ou transmitindo. Para que um dispositivo transmita um dado pelo barramento, necessrio setar o pino DE, fazendo com que RE seja desabilitado, para ento transmitir a informao necessria pelo pino DI, e ao fim da transmisso, desabilitar ressetando DE e reabilitando /RE, de forma que o transceptor volte ao modo de recepo. O CI deve sempre permanecer em modo de recepo. O circuito abaixo mostra dois microcontroladores PIC16F688 se comunicando no protocolo 485. Note que o pino A4 assume a funo de Enable para a transmisso e recepo.

Simulao com o modelo PIC16F88: Prottipo montado com o modelo PIC16F688:

#include <16F688.h> // programa que pisca led de transmisso e outro de recepo por #fuses PUT,NOBROWNOUT,NOWDT,INTRC_IO,NOMCLR // interrupo serial com protocolo 485

#int_RDA // Interrupo serial de recepo void recepcao_serial() { char escravo,estado; escravo=getc(); //comando o Byte recebido pela serial if (escravo=='A') { estado=getc(); switch (estado) { case '0': {output_high(pin_a0);} break;

enable_interrupts(GLOBAL); // Possibilita todas interrupcoes enable_interrupts(INT_RDA);// Habilita interrupcao da serial printf ("A0\r\n");//Transmite dado

printf ("A1\r\n");//Transmite dado

Quando todos os dispositivos esto em modo de recepo, o nvel lgico do barramento pode ficar indefinido, assim adicionam-se resistores de pull-up no pino A e pull-down no pino B. Outro problema, j comentado, que ocorre a reflexo do sinal devido a capacitncia e indutncia da linha, este problema pode ser evitado colocando-se dois resistores de terminao de igual valor (aproximadamente 120) entre as linhas A e B. So encontrados no mercado circuitos integrados transceptores idnticos, como MAX 485 e DS75176, dedicados a implementar interfaces de comunicao de microcontroladores como 8051 e famlia PIC no padro RS-485. A isolao tica da interface de comunicao interessante em linhas de comunicao com distancias significativas e previne a queima dos microprocessadores em caso de sobre-tenses

de origem atmosfrica. Esta isolao est presente dentro dos circuitos integrados mais recentes. A maioria dos modelos da famlia PIC16F apresenta memria EEPROM interna, com dimenses de 128 ou 256 bytes. Em algumas aplicaes, a EEPROM interna muito til para guardar parmetros de inicializao ou reter valores medidos durante uma determinada operao de sensoreamento. O PIC18F2550 contm 256 bytes (posies 0 a 255) de EEPROM interna, que podem ser escritas facilmente utilizando a instruo write_eeprom(posicao, valor); e lidas com a instruo valor2=read_eeprom (posicao);. O projeto de controlde de acesso com teclado matricial abaixo mostra o uso desta memria. A memria RAM do microcotrolador 18F2550 possui 2Kbytes disponveis para propsito geral (entre 000h a 7FFh). No final da RAM (entre F60h e FFFh) esto localizados os registros de funes especiais (SFR), que servem para configurar os perifricos internos do microcontrolador. Esses registros podem ser configurados bit a bit atravs do seu endereo com a diretiva #byte que funciona para apontar uma posio de memria (#byte OSCCON=0XFD3 -> OSCCON=0B01100110; //Configura oscilador interno para 4MHz) ou por funes proprietrias do compilador (setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8); set_timer1(3036); // configura o timer 1 com clock interno e dividido por 8 para contar 62500 = 65536-3036 Tempo total = 62500 x 8us = 0,5 segundos).

O teclado matricial geralmente utilizado em telefones e em controle de acesso de portas com senhas pr-definidas. O controle de acesso feito, na maioria das vezes, com sistemas microcontrolados por varredura das linhas, aterrando individualmente as colunas do teclado. Caso alguma tecla seja pressionada, o pino da tecla correspondente tambm ser aterrado e indicar a tecla digitada.

Para reconhecer uma senha digitada em um teclado matricial necessrio armazenar o valor das teclas digitadas em seqncia em alguma memria, como por exemplo, na memria de dados RAM (pode-se utilizar quaisquer posies dos 2Kbytes disponveis entre 000h a 7FFh), depois compar-la com uma senha pr-definida contida na memria de programa flash (ROM) ou na EEPROM interna.

Ponteiros guardam endereos de memria de programa. Exemplo para declarar um ponteiro: unsigned int16 p=100;//ponteiro igual a posio 100 *p='7'; // Contedo endereado por p igual a 7(ASC I) ou 0x37. ++p; //Incrementa a posio para receber prximo dado. Programa de controle de acesso com armazenamento de senhas na EEPROM interna pelo prprio teclado atravs de uma senha de administrador (mestre):

//Se faltar energia ou existir um reset, as senhas armazenadas no so //perdidas e possivel armazenar novas senhas aps a ltima senha gravada // possvel apagar senhas lendo a EEPROM e zerando as posies da senha ex.:write_eeprom( endereco, 0 ); #include <SanUSB.h> #include ".\include\usb_san_cdc.h"// Biblioteca para comunicao serial

usb_init();// Inicializa o protocolo USB enable_interrupts (global); // Possibilita todas interrupcoes enable_interrupts (int_timer1); // Habilita interrupcao do timer 1 setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8);// inicia o timer 1 em 8 x 62500 = 0,5s set_timer1(3036);

//write_eeprom( 239, 0);//Apaga toda a memria de senhas zerando k if(read_eeprom(239)>0 && read_eeprom(239)<40) {k=read_eeprom(239);} // Carrega a tima posio livre da eeprom (k) antes do reset armazenada em 239

if(p>103){p=100;}} if (tecla0=='3' && tecla1=='6'&& tecla2=='9'&& tecla3=='!'&& flag2==1) { flag3=1; //Indica que a novva senha dever ser armazenada flag2=0; //Garante que somente a prxima senha ser armazenada, diferente da senha mestre output_high(pin_b0);printf (usb_cdc_putc,"\r\nSenha Mestre!\r\n");delay_ms(1000); output_low(pin_b0);} if (flag2==1 && flag3==1) { //Armazena depois que a senha mestre foi digitada (flag3) write_eeprom( 4*k, tecla0 ); write_eeprom( (4*k)+1, tecla1 ); write_eeprom( (4*k)+2, tecla2 ); write_eeprom( (4*k)+3, tecla3 ); ++k; // incremente as posies para armazenar nova senha printf (usb_cdc_putc,"\r\nSenha armazenada\r\n"); write_eeprom( 239, k); printf(usb_cdc_putc,"proximo k=%u\r\n",k);//Guarda a tima posio livre antes do reset na posio 239 da EEPROM flag3=0; //Zera a flag3 da nova senha

flag=0; flag2=0; //Zera as flags para que novas senhas possam ser digitadas led = !led; // inverte o led de comparao output_bit (pin_b7,led); delay_ms(100);}} Os motores mais utilizados com sistemas microcontrolados so os motores de passo, motores C e servo-motores. A figura abaixo mostra a disposio dos transistores de potncia para atuao bidirecional de motores de passo e motores C.

ser controlados digitalmente Motores de passos so dispositivos mecnicos eletromagnticos que podem A crescente popularidade dos motores de passo se deve total adaptao desses dispositivos lgica digital. So encontrados no s em aparelhos onde a preciso um fator muito importante como impressoras, plotters, scanners, drivers de disquetes, discos rgidos, mas tambm, como interface entre CPUs e movimento mecnico, constituindo, em suma, a chave para a Robtica. Os motores de passo unipolares so facilmente reconhecidos pela derivao ao centro das bobinas. O motor de passo tem 4 fases porque o nmero de fases duas vezes o nmero de bobinas, uma vez que cada bobina se encontra dividida em duas pela derivao ao centro das bobinas (comum). Normalmente, a derivao central das bobinas est ligada ao terminal positivo da fonte de alimentao (Vcc) e os terminais de cada bobina so ligados alternadamente terra atravs de chaveamento eletrnico produzindo movimento. As bobinas se localizam no estator e o rotor um im permanente com 6 plos ao longo da circunferncia. Para que haja uma maior resoluo angular, o rotor dever conter mais plos.

Os motores de passo unipolares mais encontrados possuem 5 ou 6 fios. Os motores de passo unipolares de 6 fios possuem dois fios comuns (derivao central). Para o acionamento do motor de passo, estes fio comuns devem ser ligados fonte de alimentao (+5V ou +12V) e os terminais da bobina ligados ao controle de chaveamento do motor de passo. Motor de 5 fios Motor de 6 fios

Para descobrir os terminais de um motor de passo, deve-se considerar que: Para motores de 6 fios, a resistncia entre os fios comuns (Fio 1 e Fio 2) infinita por se tratarem de bobinas diferentes. A resistncia entre o fio comum (Fio 1) e o terminal de uma bobina a metade da resistncia entre dois terminais desta bobina. Para encontrar a seqncia correta dos fios para chaveamento das bobinas, pode-se ligar manualmente o fio comum ao Vcc, e de forma alternada e seqencial, o GND (terra) da fonte aos terminais das bobinas, verificando o movimento do motor de passo. PASSO COMPLETO 1 (FULL-STEP) -Somente uma bobina energizada a cada passo; -Menor torque;

-Pouco consumo de energia.

N do passo 1a 2a 1b 2b Decimal

PASSO COMPLETO 2 (FULL-STEP 2) -Duas bobinas so energizadas a cada passo; -Maior torque;

-Consome mais energia que o Passo completo 1. N do passo 1a 2a 1b 2b Decimal

DRIVER DE POTNCIA ULN2803 Esse driver contm internamente 8 transistores NPN Darlington de potncia, oito resistores de base de 2K7 e oito diodos de roda livre, para descarregar no Vcc (pino 10) a corrente reversa da fora contra-eletromotriz gerada no chaveamento dos transistores, protegendo os mesmos. Quando o microcontrolador coloca +5V (nvel lgico 1) no pino 1 do driver ULN2803, ele liga o pino 18 do outro lado, onde est conectado o plo do motor, ao Gnd (nvel lgico 0, por isso a simbologia da porta inversora), energizando assim a bobina, tendo em vista que o outro lado da bobina (comum) est ligado ao Vcc da fonte de at 30V.

Como o driver de potncia ULN2803 ou ULN2804 possui internamente 8 transistores de potncia ele capaz de manipular dois motores de passo ao mesmo tempo. Ele contm

internamente oito diodos de roda livre e oito resistores de base dos transistores, o que possibilita a ligao direta ao microcontrolador e aos motores de passo.

A bateria para motores de passo deve ter uma corrente suficiente para energizar as bobinas. So usadas comumente baterias de No-Breaks. ACIONAMENTO DE MOTORES C As possibilidades mais comuns de acionamento bidirecional de motores C so: O acionamento da ponte H permite o movimento do motor nos dois sentidos. A ponte H pode ser feita com transistores de potncia com Darllington TIP e BD.

Note que a corrente no motor realimenta a base dos transistores responsveis pelo chaveamento para o Gnd.

Neste circuito adotado o ULN2803 para substituir os quatro transistores de chaveamento das pontes H conectados ao Gnd, juntamente com quatro diodos de roda livre necessrios para proteo e quatro resistores de base dos transistores.

A finalidade deste controle de velocidade com a modulao de tenso por largura de pulsos (PWM) realizar uma converso digital-analgica que acontece devido impedncia inerente do circuito em alta freqncia.

A gerao do PWM produzida, geralmente, pelo chaveamento de uma tenso com amplitude constante (+5V por exemplo) em um circuito transistorizado, tendo em vista que quanto menor a largura dos pulsos emitidos na base de um transistor, menor a saturao do transistor e, conseqentemente, menor a tenso resultante do chaveamento. O perodo To o intervalo de tempo que se registra o Perodo repetitivo do pulso e o 0 o ciclo de trabalho (duty-cicle), ou seja, o tempo em que o pulso permanece com a amplitude em nvel lgico alto.

O programa abaixo mostra o controle de velocidade de um motro C por PWM com perodo constante de 20ms, onde cada incremento ou decremento da onda quadrada corresponde a 1ms, ou seja, ou seja, um acrscimo ou decrscimo de 5% no ciclo de trabalho.

#define motor pin_b7 #define led pin_b0 unsigned int ton,toff,incton,inctoff,guardaton,guardatoff; int1 flag1, flag2; main() { clock_int_4MHz(); port_b_pullups(true); incton=2; inctoff=18; //Perodo de 20ms - Passo mnimo de tempo = 1ms (5% (1/20) do duty cicle ) guardaton=read_eeprom(10);guardatoff=read_eeprom(1); if (guardaton>0 && guardaton<=20) {incton=guardaton; inctoff=guardatoff;} while (1) {ton=incton; toff=inctoff; if (!input(pin_b1)) {flag1=1;} if (incton<20 && flag1==1 && input(pin_b1) ) {flag1=0;++incton;--inctoff;output_high(led);//se no chegou no mximo (incton<50),

write_eeprom(10,incton);write_eeprom(1,inctoff); //se o boto foi pressionado (flag1==1) e se o boto j foi solto (input(pin_b1)) incremente }// a onda quadrada e guarde os valores na eeprom

output_high(motor); while(ton) {--ton;delay_ms(1); } //Parte alta da onda quadrada output_low(motor); while(toff) {--toff;delay_ms(1); } //Parte baixa da onda quadrada }} As figuras abaixo mostram a foto do circuito de simulao e da onda gerada pelo PWM testado com este exemplo.

O exemplo abaixo mostra o controle de velocidade de um motor C por PWM nos dois sentidos com uma ponte H, o incmento da onda quadrada de tenso feito no pino B2 e o decremento no pino B3. O sentido de rotao invertido com um boto no pino B5. Na prtica no lugar dos transitores utilizado o driver ULN2803 que contm internamente oito transistores com diodos de roda livre. A figuras abaixo mostra a foto do circuito de simulao deste exemplo.

#fuses NOWDT,NOPROTECT,NOLVP,NODEBUG //No tem fuses USB e nem reserva da rea de memria do bootloader //#use delay(clock=48000000) #use delay(clock=4000000) // Sem o INTRC_IO o clock seria de 48000000 vindo da USB #byte OSCCON=0XFD3 //Aponta o registro do oscilador interno para configurao de 4MHz na funo Main -> OSCCON=0B01100110; #define esquerdavcc pin_b3 #define direitavcc pin_b4 #define esquerdagnd pin_b6 #define direitagnd pin_b7 #define led pin_b0 unsigned int16 i; unsigned int ton,toff,incton,inctoff,guardaton,guardatoff; int1 flag1, flag2, flag3;

port_b_pullups(true); incton=2; inctoff=18; //Perodo de 20ms - Passo mnimo de tempo = 1ms (5% (1/20) do duty cicle ) guardaton=read_eeprom(10);guardatoff=read_eeprom(1); if (guardaton>0 && guardaton<=20) {incton=guardaton; inctoff=guardatoff;}

You might also like