Vous êtes sur la page 1sur 48

UNIVERSIDADE FEDERAL DO ESPRITO SANTO CENTRO TECNOLGICO DEPARTAMENTO DE ENGENHARIA ELTRICA PROJETO DE GRADUAO

MULTIPROGRAMADOR SERIAL COM POSSIBILIDADE DE INTERFACE USB

THIAGO ZAMBOM PICOLI

VITRIA - ES Maro/2006

THIAGO ZAMBOM PICOLI

MULTIPROGRAMADOR SERIAL COM POSSIBILIDADE DE INTERFACE USB

Parte escrita do Projeto de Graduao do aluno Thiago ao Zambom Picoli, de

apresentado Engenharia

Departamento do

Eltrica

Centro

Tecnolgico da Universidade Federal do Esprito Santo, para obteno do grau de Engenheiro Eletricista.

VITRIA - ES Maro/2006

THIAGO ZAMBOM PICOLI

MULTIPROGRAMADOR SERIAL COM POSSIBILIDADE DE INTERFACE USB

COMISSO EXAMINADORA:

Prof Dr. Hans-Jorg Andreas Schneebeli Orientador

Prof MsC. Ccero Romo Cavati Examinador

Eng. Paulo Roberto Vargas de Souza Examinador

Vitria ES, Maro de 2006

DEDICATRIA

A Deus, aos meus pais, minha irm, meus familiares, minha namorada e famlia, a todos os meus amigos da Engenharia que dividimos as alegrias e tristezas, s pessoas que sempre estiveram e estaro ao meu lado, e em especial a minha av Jayra e ao meu tio Alemo que fizeram parte da minha vida.

AGRADECIMENTOS Agradeo a Deus primeiramente, pela fora que me deu para conseguir terminar este difcil curso. A todos que contriburam direta ou indiretamente para que este trabalho fosse realizado. Agradeo ao Professor e Orientador Hans-Jorg Andreas Schneebeli por sua disponibilidade, dedicao e pacincia. Aos professores da Instituio UFES pelo conhecimento. Ao Professor Ccero Romo Cavati e ao Engenheiro Paulo Roberto Vargas de Souza pela participao na banca examinadora. Ao Professor Jos Leandro e Professora Jussara pelo apoio e considerao. Ao Ney, Guto, e funcionrios do CT II pela boa vontade e carinho que sempre tiveram.

ii

LISTA DE FIGURAS Figura 1 - Bloco das interfaces. ................................................................................ 8 Figura 2 - Mdulo programador. ............................................................................... 9 Figura 3 - Viso geral do sistema. .......................................................................... 10 Figura 4 - HyperTerminal. ...................................................................................... 11 Figura 5 - Microcontrolador Motorola. .................................................................... 12 Figura 6 - Interface serial. ...................................................................................... 13 Figura 7 - Tenses e sua converso ...................................................................... 14 Figura 8 - Forma do sinal. ...................................................................................... 15 Figura 9 - Parte interna do cabo USB. ................................................................... 16 Figura 10 - Codificao do sinal USB .................................................................... 16 Figura 11 - Foto do Mdulo do Programador. ........................................................ 17 Figura 12 - Pinagem do PIC. ................................................................................. 19 Figura 13 - Foto do Mdulo a ser programado. ...................................................... 19 Figura 14 - Blocos do Sistema. .............................................................................. 20 Figura 15 - Fluxograma da programao. .............................................................. 21 Figura 16 - Velocidade de transmisso. ................................................................. 23 Figura 17 - Fluxograma para programar no PIC. ................................................... 24 Figura 18 - Modo de envio dos dados. ................................................................... 25 Figura 19 - Intervalo de envio................................................................................. 25 Figura 20 - Parte inferior do mdulo de programao. ........................................... 26 Figura 21 - Kit da Motorola para testes. ................................................................. 27 Figura 22 - Mdulo a ser programado. ................................................................... 28 Figura 23 - Roteamento do mdulo de programao. ............................................ 30 Figura 24 - Esquemtico do mdulo do programador. ........................................... 31 Figura 25 - Circuito do mdulo a ser programado. ................................................. 33

iii

GLOSSRIO

CPU - Unidade Central de Processamento. ASCII - (American Standard Code for Information Intercharge) um conjunto de cdigos para o computador representar nmeros, letras, pontuao e outros caracteres.

SCI - Serial Communication Interface o controlador da porta serial assncrona, tal como o
encontrado num computador pessoal. HDLC - High Level Data Link Control, protocolo. I/O - Input/Output (entrada/sada), dados recebidos ou enviados. LSB - Less Significative Bit (Bit Menos Significativo), bit menos significativo de um registro. MSB - More Significative Bit (Bit Mais Significativo), bit mais significativo de um registro. RAM - Random Access Memory, Memria de Acesso Aleatrio. RISC - Reduced Instruction Set Computer, processador que a quantidade de instrues que ele pode executar foi diminuda para permitir uma freqncia de trabalho mais rpida. menos

iv

SUMRIO DEDICATRIA........................................................................................................... I AGRADECIMENTOS ................................................................................................ II LISTA DE FIGURAS ................................................................................................ III 1 GLOSSRIO ...................................................................................................... IV SUMRIO................................................................................................................. V 2 INTRODUO...................................................................................................... 8 2.1 Motivao .................................................................................................... 8 2.2 Definio do Problema ................................................................................. 9 2.3 Metodologia ................................................................................................. 9 3 DESCRIO DA SOLUO ............................................................................. 10 3.1 Definio do Hardware .............................................................................. 10 3.2 Definio de Software ................................................................................ 11 4 DESCRIO DO HARDWARE .......................................................................... 12 4.1 Escolha do Microcontrolador ..................................................................... 12 4.2 Alimentao ............................................................................................... 13 4.3 Interface Serial ........................................................................................... 13 4.4 Interface USB............................................................................................. 15 4.5 Mdulo Programador ................................................................................. 16 4.6 Mdulo a ser Programado ......................................................................... 18 5 DESCRIO DO SOFTWARE........................................................................... 20 5.1 Sequncia do funcionamento do software ................................................. 20 5.2 Exemplo de um programa para PIC e seu arquivo .hex gerado .............. 21 5.3 Software do Sistema (mdulo programador) ............................................. 23 5.3.1 Interface de Comunicao Serial ...................................................... 23 5.3.2 Programa Auxiliar (Extrao dos dados atravs do arquivo .hex) .. 23 5.3.3 Mdulo de Programao (Envio dos dados e comandos para o PIC)24 5.4 Programando um outro microcontrolador .................................................. 25 6 CONSTRUO E TESTES ................................................................................ 26 6.1 Confeco dos Mdulos ............................................................................ 26 6.2 Testes ........................................................................................................ 27 7 CONCLUSES E TRABALHOS FUTUROS ..................................................... 29

APNDICE A .......................................................................................................... 30 APNDICE B .......................................................................................................... 33 APNDICE C .......................................................................................................... 34 APNDICE D .......................................................................................................... 35 APNDICE E........................................................................................................... 39 APNDICE F ........................................................................................................... 42 8 REFERNCIAS BIBLIOGRFICAS .................................................................. 45

vi

RESUMO Este projeto apresenta um dispositivo de programao de microcontroladores, que se conecta a um PC usando porta serial ou USB. Para tanto, aborda a construo de um hardware que possua portas USB e serial, que comunique com o computador PC e com o mdulo a ser programado, e o desenvolvimento de software que gerenciem todos estes mdulos. Neste trabalho mostrado hardware e software necessrio para a programao de um PIC usando conexo da porta serial com o PC. A conexo via USB parte de um outro projeto. Tambm so mostradas as modificaes necessrias para a programao de um Motorola da famlia MC68HC908.

vii

8
2 INTRODUO A comunicao entre sistemas est passando por um grande avano e conseqentemente por mudanas. Um exemplo a programao de microcontroladores, microprocessadores e memrias, as quais h alguns anos eram programadas atravs das portas serial e paralela. Hoje, com o avano da tecnologia, os novos computadores no so obrigados a serem comercializados com estas portas disponveis. Assim, a tendncia ser a comunicao USB dominar este mercado.

2.1 Motivao Este projeto visa ampliar o conhecimento diante do uso de outros microcontroladores, compiladores e programadores. Dessa forma, o objetivo estabeler um link entre o computador e o microcontrolador a ser gravado. Assim, a Figura 1 apresenta os blocos das interfaces, na qual o mdulo programador comunica-se com o PC o mdulo a ser programado.

Figura 1 - Bloco das interfaces.

9
2.2 Definio do Problema O problema a ser abordado neste trabalho o desenvolvimento de hardware e software para a programao de um microcontrolador localizado em um sistema em construo, a partir do hardware de uma placa com interface USB. O trabalho engloba a interface via serial com o PC (a interface USB objeto de um outro trabalho), o hardware e software necessrios para a programao de microcontrolador (PIC). Devero ser mostradas as modificaes necessrias para a programao de um outro microcontrolador (famlia MC68HC908).

2.3 Metodologia O trabalho ficou dividido em 5 partes. - Escolha do microcontrolador; - Modificao do hardware do mdulo programador; - Hardware do programador PIC - Software de programao do PIC; - Software de interface serial. Em suma, a proposta desenvolver um sistema como mostra a Figura 2.

Figura 2 - Mdulo programador.

10
3 DESCRIO DA SOLUO Por se tratar de um projeto complexo, onde envolve vrias etapas, foi necessrio muito estudo e pesquisa, principalmente em sites, para que pudesse definir qual o hardware que teria uma estrutura para comportar todas estas interfaces, e tambm, houvesse condies de constru-lo. Dessa forma, foi necessrio um hardware para a comunicao PC Programador e um outro para a comunicao Programador PIC. Um dos objetivos deste projeto tambm criar somente um software que funcione internamente no mdulo de programao. Dessa forma a idia seria utilizar o software que existe em qualquer computador para facilitar a instalao do mdulo de programao. Ento optou-se em utilizar o HyperTerminal, que uma tentativa de no fazer um programa no PC, seja ele feito em DOS ou em alguma linguagem orientada a objeto e colocar todas software implementado no mdulo programador definindo no HyperTerminal a taxa de transmisso dos dados, o controle de fluxo, etc. Assim, a maior parte do software ficou dentro do mdulo de programao (microcontrolador Motorola). Na seo seguinte so apresentadas, em detalhe, as duas partes do projeto.

3.1 Definio do Hardware O sistema escolhido composto basicamente por dois mdulos que so o mdulo programador e o mdulo a ser programado, como mostra a Figura 3.

Figura 3 - Viso geral do sistema.

11
O mdulo programador pode ser alimentado atravs do barramento USB (5 V), ou de uma fonte externa entre 9V e 12V. No caso do circuito do PIC, utilizado 12V para aliment-lo.

3.2 Definio de Software Devido facilidade de programar e possuir diversas ferramentas para compilao, foi utilizada a linguagem C para desenvolver as rotinas de programao, onde todas essas rotinas sero executadas no microcontrolador Motorola. Uma parte dessas rotinas utilizar a linguagem assembly, na parte de implementao da interface SCI, visto que, este Motorola no tem implementado. O programa que far a comunicao entre o PC e o mdulo de programao ser o HyperTerminal. Dessa forma, o mdulo programador poder ser utilizado em qualquer PC sem a necessidade de instalao de algum software no PC, visto que o HyperTerminal j implementado no PC. Este programa enviar os arquivos do computador para o mdulo programador. A Figura 4 retrata o Hyperterminal. Assim, um dos objetivos, concentrar todo o software no mdulo programador.

Figura 4 - HyperTerminal.

12
4 DESCRIO DO HARDWARE O sistema composto por dois mdulos: programador e mdulo a ser programado. A separao em mdulos baseada nas caractersticas dos componentes que compem, diminuindo as interferncias, e facilitando a troca de outros microcontroladores para serem programados.

4.1 Escolha do Microcontrolador o mais importante dos componentes. nele que todo o processo gerenciado. O Microcontrolador utilizado foi o MC68HC908JB8 [1] da Motorola (Freescale) na qual o principal motivo de sua escolha, como anteriormente mencionado, foi a existncia de um hardware integrado para a comunicao USB. Este microcontrolador possui as seguintes caractersticas: 3 MHz de freqncia no barramento interno; 8 kbytes de memria FLASH; 256 bytes de memria RAM; Tenso de 3.3V para os pinos de input/output (I/O); 13 pinos de entrada/sada; Encapsulamento de 20 pinos; Especificao do barramento USB 1.1 com taxa de velocidade prximas de 1.5 Mbps; Baixo consumo (1W). Na Figura 5, observamos o encapsulamento do motorola:

Figura 5 - Microcontrolador Motorola.

13
4.2 Alimentao A alimentao do circuito dever ser de 12V para os dois mdulos. Foi, ento, utilizada uma fonte externa para isso. Esta tenso foi estabelecida principalmente para a gravao do PIC, pois no caso do mdulo programador, poderia ser utilizada a prpria tenso existente na Interface USB que de 5V, pois a placa possui um jumper para o usurio escolher da onde quer obter a alimentao. Por segurana, para no ocorrer algum erro e queimar a porta USB dos computadores utilizados no Projeto, os testes foram feitos utilizando uma fonte DC externa de 12V. No mdulo de programao e no mdulo a ser gravado foram colocados reguladores de 5V e 3,3V para solucionar este problema.

4.3 Interface Serial A Figura 6 apresenta a interface serial utilizada para fazer a gravao do programa do PC no microcontrolador.

Figura 6 - Interface serial.

A interface serial (RS-232) possui dois sinais de comunicao sendo o Tx aquele que envia e o Rx o que recebe. O nvel do diferencial binrio comparado com a tenso do terceiro sinal GND.

14
Originalmente, as taxas de transferncia de dados eram de 9600 bps para a porta serial. A partir de meados da dcada de 90, a porta foi aperfeioada. As portas seriais passaram a transmitir a 115 Kbps. No protocolo de comunicao RS-232, caracteres so enviados um a um como um conjunto de bits. A codificao mais comumente usada o "start-stop assncrono" que usa um bit de inicio, seguido por sete ou oito bits de dados, possivelmente um bit de paridade, e um ou dois bits de parada sendo, ento, necessrios 10 bits para enviar um nico caracter. Tal fato acarreta a necessidade em dividir por um fator de dez a taxa de transmisso para obter a velocidade de transmisso. A alternativa mais comum ao "start-stop assncrono" o HDLC. O padro define os nveis eltricos correspondentes aos nveis lgicos um e zero, a velocidade de transmisso padro e os tipos de conectores.

O conversor utilizado o MAX 3232, no qual o sinal TX do PC conecta no pino 13 (R1in) e o sinal RX conecta no pino 14 (T1out). Dessa forma, o sinal sai pelo pino 12 e conecta-se ao pino 19 (PTA0) do microcontrolador. [10] Os sinais apresentam a codificao NRZ (do ingls no return to zero). Os valores de tenses convertidos esto correlacionados na Figura 7 e o forma dos sinais na Figura 8.

Figura 7 - Tenses e sua converso

15

Figura 8 - Forma do sinal.

4.4 Interface USB USB a abreviao de Universal Serial Bus, barramento srie universal para a ligao de perifricos a um PC. Atravs do USB podemos adicionar perifricos ao computador sem termos de abrir a CPU para instalar uma placa, ou seja, sem se preocupar em ter um slot vago. Com a porta USB, no existe esse problema, a instalao de um novo dispositivo automaticamente detectada sem a necessidade de efetuar o reset no PC. O barramento USB, verso 1.1, transmite a 1,5 MBps (ou 12Mbps), existindo a possibilidade de acoplar dezenas de perifricos a cada porta mediante a utilizao de hubs, dispositivos que permitem mais encaixes. O cabo de ligao dos dispositivos USB constitudo por 4 condutores, dois condutores para a transmisso do sinal e outros dois para alimentao, designados respectivamente: D+ e D-, para a transmisso de sinal. A Figura 9 detalha a parte interna do cabo USB. Os condutores Vbus e GND servem para alimentar os dispositivos ligados nos barramentos, na qual a tenso de Vbus de +5V, na origem. A distncia que o cabo USB poder ter de poucos metros (em torno de 5m), dependendo das especificaes do cabo, de modo a garantir os nveis das tenses de entrada em valores apropriados. Devem ser

16
consideradas as terminaes dos cabos. Estas terminaes tambm permitem a deteco de dispositivos ligados no barramento e efetuam a distino entre dispositivos que funcionam a taxas de transmisso a 12Mb/s e a 1,5 Mb/s.

Figura 9 - Parte interna do cabo USB.

O mtodo de transmisso utilizado o NRZI (Non Return to Zero Invert) para codificao de dados seriais, no qual zeros e uns so representados pelo oposto em voltagem, alta e baixa, alternada onde no h retorno para a voltagem zero (referncia) entre bits codificados. [12] Estes sinais podem ser observados na Figura 10.

Figura 10 - Codificao do sinal USB

4.5 Mdulo Programador O mdulo programador teve o seu roteamento desenvolvido no programa Eagle, no qual o seu roteamento e o esquemtico encontram-se no Apndice A.

17
O objetivo deste hardware de servir de ponte entre o computador e o microcontrolador que deseja gravar, que no caso ser o PIC, mas poderia ser outro, como por exemplo, o Motorola, etc. A maior importncia deste mdulo a sua capacidade de ser utilizado para outros projetos, pois como ele foi feito de forma independente, no futuro podem ser feitos projetos utilizando a sua interface USB, e vrias outras coisas. S para testar este mdulo, foram feitos programas para acender uma seqncia de Leds, levantar e abaixar pinos, etc. Dessa forma, como ele ser doado Ufes, fica a critrio dos professores de como utiliza-lo no futuro. Neste mdulo encontra-se o microcontrolador MC68HC908JB8 [1], o conversor MAX3232, capacitores, resistores, diodos, regulador e conectores para alimentao e transmisso de sinais. A Figura 11 apresenta a foto do mdulo.

Figura 11 - Foto do Mdulo do Programador.

18
Agora, sero detalhadas algumas caractersticas de funcionamento deste mdulo. O smbolo * representa o modo normalmente utilizado. - Jumper JP1: 2-3 Reg. de 5V externo. * 1-2 Tenso de 5V do barramento USB. - Jumper JP2: 2-3 Reg. de 3,3V externo. * 1-2 Reg. interno do microcontrolador. - Jumper JP3: 3-4 5-6 Utilizados no modo de gravao. 7-8

4.6 Mdulo a ser Programado Foi escolhido o PIC 16F873 [7] para ser gravado. Este circuito foi montado num protoboard para testes e o esquemtico encontra-se no Apndice B. O PIC um chip produzido pela Microchip, na qual apresenta as seguintes caractersticas: At 20 MHz de freqncia de operao; 4 kbytes de memria FLASH; 192 bytes de memria RAM; 128 bytes de memria EEPROM; Tenso de 5,0V para os pinos de input/output (I/O); 22 pinos de entrada/sada; Encapsulamento de 28 pinos; Baixo consumo. Na Figura 12, observamos o encapsulamento do PIC:

19

Figura 12 - Pinagem do PIC.

A Figura 13, apresenta a foto do circuito no protoboard utilizado para fazer sua programao.

Figura 13 - Foto do Mdulo a ser programado.

Na programao do microcontrolador PIC sero usados 6 fios que representam os sinais de dados, clock, direo, ACK, GND e Vpp. Observar o Apndice B.

20
5 DESCRIO DO SOFTWARE

5.1 Sequncia do funcionamento do software A Figura 14, mostra todos os blocos do sistema.o sistema todos

Figura 14 - Blocos do Sistema.

Primeiramente, o programa que o usurio quer que envie para o PIC pode ser escrito num compilador similar ao PIC C Compiler. Nele o usurio digitar todos os comandos e rotinas que ao compilar gerar o arquivo .hex. Dessa forma, o usurio utilizar o HyperTerminal para enviar este arquivo atravs da porta serial para o mdulo programador (Motorola). No modo programador, ter algumas rotinas que implementam a interface de comunicao serial (SCI) inexistente neste microcontrolador da Motorola e que foram descobertas depois de ter escolhido este microcontrolador. Posteriormente, aquele arquivo .hex ser recebido pelo Motorola ter os seus dados extrados do arquivo. Finalmente, esses dados extrados sero enviados juntamente com outros comandos para a programao do PIC. Dessa forma, os prximos tpicos detalharo essas etapas ditas anteriormente e resumidas na Figura 15.

21

Figura 15 - Fluxograma da programao.

5.2 Exemplo de um programa para PIC e seu arquivo .hex gerado Foi utilizado o Programa PIC C Compiler para desenvolver o programa que ser gravado no PIC. Para testes, foi criado um pisca leds para verificar o funcionamento. Este programa encontra-se no Apndice C. Quando compila o programa, automaticamente gerado um arquivo com extenso .hex.

22
Este tipo de formato facilita o envio da informao. Este arquivo apresenta 6 campos, no qual cada caractere em ASCII convertido em 2 caracteres em hexadecimal representando 1 byte ou 8 bits. Para exemplificar como funciona o arquivo .hex, temos que: :10010000214601360121470136007EFE09D2190140 :100110002146017EB7C20001FF5F16002148011988 :10012000194E79234623965778239EDA3F01B2CAA7 :100130003F0156702B5E712B722B732146013421C7 :00000001FF Analisando a primeira linha, temos: : 10 0100 00 214601360121470136007EFE09D21901 40 - : significa o cdigo de comeo; - 10 em hex representa 16 em decimal indicando que temos 16 pares de caracteres de dados; - 0100 indica o local onde os dados seguintes sero carregados; - 00 tipo registro de dados; - 214601360121470136007EFE09D21901 representa os 16 pares de caracteres de dados; - 40 representa o Checksum do primeiro registro .hex. O registro de terminao funciona desta forma: : 00 0000 01 FF - : significa o cdigo de comeo; - 00 significa nenhum dado em registro de terminao; - 0000 significa campo de endereo zerado; - 01 tipo registro de terminao; - FF representa o Checksum do registro de terminao. Dessa forma, este arquivo enviado atravs do HyperTerminal localizado no computador para o mdulo de programao Motorola.

23
5.3 Software do Sistema (mdulo programador)

O compilador utilizado para gravar o microcontrolador Motorola o Code Warrior 5.0. A forma de comunicao do mdulo a MON08.

5.3.1 Interface de Comunicao Serial

Como j foi dito anteriormente, este microcontrolador no possui esta interface chamada de SCI. Por causa disso, foi pesquisado na Internet vrias rotinas que implementassem esta rotina. A maioria delas utilizava a linguagem Assembly, pois por ser um microcontrolador de apenas 8 bits, a maior parte dos programas, exemplos, datasheets era em Assembly. O programa est descrito em Assembly na qual pode utilizar as velocidades de comunicao descritas na Figura 16.

Figura 16 - Velocidade de transmisso.

As rotinas do programa encontram-se no Apndice D.

5.3.2 Programa Auxiliar (Extrao dos dados atravs do arquivo .hex) No Apndice E, observamos a rotina para extrair os dados do arquivo .hex gerado pelo compilador PIC C Compiler. So estes dados que iro para o PIC.

24
5.3.3 Mdulo de Programao (Envio dos dados e comandos para o PIC) Esta rotina localiza-se no Apndice F. Envia os dados de forma sncrona. Os comandos so enviados no formato 6 bits e os dados no formato de 14 bits. As funes de cada comando so: - Start Bit Bit de Incio. - Set Vddp Coloca tenso no pino MCLR para liberar programao. - Load Data Manda os dados. - Begin Programming Envia comandos. - Read Data L os dados que foram enviados. - Data correct Verifica se os dados foram enviados corretamente. Podemos entender melhor os comandos necessrios para a gravao no PIC atravs do fluxograma da Figura 17.

Figura 17 - Fluxograma para programar no PIC.

25
5.4 Programando um outro microcontrolador Fazendo algumas alteraes no programa, poder gravar, por exemplo um outro tipo de Motorola. O importante pesquisar a forma que o microcontrolador tem que ser gravado para que possa enviar na sada dos pinos a seqncia correta. Utilizando o microcontrolador Motorola MC68HC908QY4, poderemos visualizar como poderia ser feita a sua programao. Sabendo que os dados tm que serem enviados de acordo com as Figuras 18 e 19, poderia ser efetuada a seguinte lgica para o seu envio. void envia (byte bit, int baud_rate) { unsigned int x = (bit<<1)+0xA00; // No 10 bit acontece o stop. int i; for(i=0; i<12; i++) { PTB_PTB3 = x&1; x>>=1; tempo(baud_rate); } } // Desloca de 1 // Enquanto for menor que o 12 bit

Figura 18 - Modo de envio dos dados.

Figura 19 - Intervalo de envio.

Neste motorola, seria necessrio utilizar alguns outros comandos que podem ser encontrados na referncia bibliogrfica [9].

26
6 CONSTRUO E TESTES

6.1 Confeco dos Mdulos No mdulo de programao foi feito o esquemtico e o roteamento do circuito no Eagle. Por se tratar de uma placa de duas faces e com trilhas muito prximas, a parte da confeco das trilhas e furos da placa foi feita em Belo Horizonte. Os componentes foram soldados manualmente e alguns componentes foram adquiridos em So Paulo. As Figuras 11 e 20 mostram as trilhas da parte superior e inferior do mdulo respectivamente.

Figura 20 - Parte inferior do mdulo de programao.

O mdulo a ser programado foi montado num protoboard. Ver Figura 13.

27
6.2 Testes Foram realizados vrios testes comeando com um kit da Motorola fornecido pela Ufes temporariamente para observar o funcionamento de um microcontrolador da motorola, apesar de pertencer a uma outra famlia (QY). A Figura 21 representa o kit utilizado para testes.

Figura 21 - Kit da Motorola para testes.

Foram feitos programas como, por exemplo, pisca leds para verificar o funcionamento do mdulo de programao e obteve sucesso. Foram efetuadas diversas pesquisas a respeito da comunicao USB tentando compilar rotinas referentes a esta comunicao e outros, pois esta parte da comunicao USB seria fornecida pelo projeto de graduao de um aluno. Como o aluno foi desistindo do projeto aos poucos, resolveu-se trabalhar com a comunicao serial. Ento, foi nesta hora que se descobriu que a interface de comunicao serial no era implementada no microcontrolador. Assim, partiu-se para a busca dessas rotinas. Foram muitas tentativas utilizando a linguagem C e at Assembly. Nesta ltima, esto ocorrendo problemas, mas provavelmente decorrentes de problemas nos registros e por estar usando

28
num mesmo programa a linguagem C e a linguagem Assembly. Mas ainda esto sendo feitos testes para resolver este problema. Dessa forma, como o mdulo estava em perfeito funcionamento, mas no sabia se o gravador de PIC estava, de ltima hora resolveu-se fazer o teste de gravao utilizando um programa em DOS que fazia o link do gravador de PIC para o computador. Enfim, obteve sucesso, e os dados enviados pelo computador foram recebidos pelo programador como mostra a Figura 22. Dessa forma foram feitos testes, compilaes, pesquisas para fechar a idia do projeto.

Figura 22 - Mdulo a ser programado.

29
7 CONCLUSES E TRABALHOS FUTUROS

O sistema no estado em que se encontra capaz de transferir dados para a memria Flash do PIC e capaz de comunicar via interface serial com o PC. Este projeto poder ser utilizado por outros alunos, visto que o seu leque de utilizao muito extenso, podendo ser aproveitado para: - Desenvolvimento de projeto com comunicao USB; - Gravao de outros microcontroladores; - Execuo de programas complexos que exigem muita memria; - Entre outros.

30
APNDICE A A Figura 23 mostra o roteamento do mdulo de programao e a Figura 24 o Esquemtico do mdulo do programador.

Figura 23 - Roteamento do mdulo de programao.

31

Figura 24 - Esquemtico do mdulo do programador.

32
Lista de Materiais do mdulo programador

Componentes C1 C4, C5 C2, C3, C6, C7, C8, C9, C10, C11, C12, C13, C15, C17, C18, C19 C14 C16 Z1 D2 IC1 IC2 IC5 LDO1 JP1 JP2 JP3 JP4 Q1 R1 R2, R3, R4, R5, R6 R6 R7 RST, IRQ X1 X2 X3 X4 X5

Valores e Tipos 10 F 22 pF 100 nF 4,7 F 100 F/25 V ZD8.2V 1N4004 MC68HC908JB8 MAX3232 Reg. 7805 [5] TPS76933 (Reg. 3,3V) Header 1x3 Header 1x3 Header 2x5 Header 1x3 XTAL 6 MHz 10M 10 k 2.2 k 1.5 k/5 % (optional) Push Button Porta Fmea Serial Porta Fmea USB Power Jack Header 2x8 Header 2x8

Onde Comprar Fa, Gorza Fa, Gorza Fa, Gorza Fa, Gorza Fa, Gorza Fa, Gorza Fa, Gorza Farnell (S. Paulo) Farnell (S. Paulo) Fa, Gorza Pedido da Texas Instrum. (Grtis) Fa, Gorza Fa, Gorza Fa, Gorza Fa, Gorza Fa, Gorza Fa, Gorza Fa, Gorza Fa, Gorza Fa, Gorza Fa, Gorza Fa, Gorza Farnell (S. Paulo) Fa, Gorza Fa, Gorza Fa, Gorza

33
APNDICE B A Figura 25 mostra o circuito do mdulo a ser programado e que montado no protoboard.

Figura 25 - Circuito do mdulo a ser programado.

34
APNDICE C Rotina para teste (pisca led) feita no computador utilizando o compilador PC C Compiler.
#include <16f873.h> #use delay(CLOCK=4000000) #fuses xt,nowdt,NOPROTECT,put main() { while(1) { output_high(pin_b0); delay_ms(1000); output_low(pin_b0); delay_ms(1000); } } Arquivo .hex gerado pela compilao do programa acima. :1000000000308A00192800002730840000080319F6 :1000100018280130A100A001A00B0C28A10B0B286F :100020004A30A000A00B122800000000800B092815 :10003000003484011F308305063083169F000610AC :10004000831206140430A600FA30A7000420A60B81 :10005000242883160610831206100430A600FA30F6 :0E006000A7000420A60B2F2883161F2863007C :02400E00F13F80 :00000001FF ;PIC16F873

35
APNDICE D Rotina responsvel por estabelecer a comunicao do microcontrolador com o Hyperterminal localizado no computador. Ela comumente chamada de SCI (Interface de Comunicao Serial).
********************************************************************************* * ARCHIVO INCLUDE - SCI_TXRX.INC * * Rutinas para Comunicacion Serie Asincronica controladas por Soft.,aplicables * * a Microcontroladores de la Flia HC08 que no posean Modulo SCI. * * Caracteristicas:(p/fclk=9.8304Mhz, fbus=2.4576MHz, Ciclo T=0.406901useg) * * Operacion en Half Duplex * * Formato NRZ - N 8 1 * * Velocidad Seleccionable 2400, 4800, 9600, 19200, 38400, 57600 baudios * * Error en todos los casos menor al 1% (para 38400 baud, Error = 0) * ********************************************************************************* ********************************************************************************* * SACA_CARACTER - transmite la variable caracter por el pin TXD (Definido como Salida) * * Entrada - caracter, variable donde viene el dato a transmitir * * Pin TXD definido como SALIDA y TXD = 1 * * Salida - X, Acc, y caracter = Valor Indefinido * * Stack Usado - 2 Bytes * * Var. Usadas - caracter, almacena el dato a transmitir * * auxiliar, almacena el valor de X * * ROM Usada - 36 Bytes * ********************************************************************************* ; export symbols XDEF sci_send XDEF sci_recv ; Include derivative-specific definitions INCLUDE 'derivative.inc' ; Definicao de pinos usados na porta pta para simular pinos de e/s serial txd equ 1 rxd equ 2 ;-------------------------------------------------------------------------------; SELECCION DE VELOCIDAD DE TRANSMISION ;-------------------------------------------------------------------------------baud_tx equ $20 ;Tabla de Seleccion de Baud Rate: ; baud_tx Velocidad ; $02 -> 57600 baudios ; $05 -> 38400 baudios ; $0e -> 19200 baudios ; $20 -> 9600 baudios ; $45 -> 4800 baudios ; $8f -> 2400 baudios ;-------------------------------------------------------------------------------; SELECCION DE VELOCIDAD DE RECEPCION ;-------------------------------------------------------------------------------baud_rx equ $20 ; era $05 Tabla de Seleccion de Baud Rate: ; baud_rx Velocidad ; $02 -> 57600 baudios ; $05 -> 38400 baudios ; $0e -> 19200 baudios ; $20 -> 9600 baudios

36
; $45 -> 4800 baudios ; $8f -> 2400 baudios ; variable/data section MY_ZEROPAGE: SECTION SHORT ; Insert here your data definition. For demonstration, temp_byte is used. auxiliar: DS.B 2 caracter: DS.B 1 cuenta_bit:DS.B 1 ; code section MyCode: SECTION ; this assembly routine is called the C/C++ application sci_send: saca_caracter: stx auxiliar ;[3] guardo valor de X ldx #9 ;[2] bits por caracter (incluido bit start) clc ;[1] borra carry para enviar bit de start saca_bit_dato: bcc saca_0 bset txd,PTA bra otro_bit saca_0: bclr txd,PTA bra otro_bit ;[3] si cy=0, salta para sacar 0 ;[4] si no saca 1 (pta era ptb) ;[3] ;[4] ;[3]

otro_bit: lda #baud_tx ;[2] jsr delay_7a ;[7a+9]demora=7*31+9=226T ror caracter ;[4] busca siguiente bit (va al carry) decx ;[1] bne saca_bit_dato ;[3] 8T vuelvo a sacar el sig bit saca_bit_stop: lda #baud_tx ;[2] Valor para TX a 19200 baudios lsra ;[1] A=baud_tx/2 divido en 2 a baud_tx bset txd,PTA ;[4] __| sube linea para bit de STOP jsr delay_7a ;[7a+9] demora=16T=6,51useg ldx auxiliar ;[3]recupero valor de X rts ;[4] ********************************************************************************* ********************************************************************************* * LEE_CARACTER - recive un dato por el pin RXD (siempre b0 de cualquier puerto) * * y lo devuelve en la variable caracter * ** * Entrada - El Pin RXD es definido como ENTRADA * * Salida - caracter, variable donde vuelve el dato recibido * * X, Acc Indefinidos * * Stack Usado - 2 Bytes * * Var. Usadas - caracter, almacena el dato Recivido * * cuenta_bit, variable temporal * * auxiliar, almacena el valor de X * * ROM Usada - 61 Bytes * *********************************************************************************

37
sci_recv: lee_caracter: stx auxiliar ;[3]guardo el valor de X lda #$8 ;[2]cant de bits del caracter sta cuenta_bit ;[3] clrx ;[1] lee_bit_start: brset rxd,PTA,* ;[5]espera el bit de start lda #baud_rx ;[2] ($08) lsra ;[1] divido/2 el baud rate jsr delay_7a ;[7A+9] brclr rxd,PTA,lee_b_dato ;[5]=24T->9,76useg (mitad del pulso) bra lee_bit_start ;[3] lee_b_dato: lda #baud_rx ;[2]\ nsa ;[3] \ nsa ;[3] > Demora p/complementar 12 cicl.T nsa ;[3] / q/faltan a la 1ra lectura (bit 0) nop ;[1]/ lee_bit_dato: lda #baud_rx ;[2] nop ;[1] nop ;[1] nop ;[1] jsr delay_7a ;[7a+9] lda PTA ;[3] ->> Lee dato del b0,ptb (RXD) rora ;[1] ror caracter ;[4] dec cuenta_bit ;[4] bne lee_bit_dato ;[3] lee_bit_stop: lda #baud_rx ;[3] sub #$02 ;[2] NOTA: p/57600 es (sub #$01) ???????????????? jsr delay_7a ;[7a+9] brset rxd,PTA,rx_ok ;[5] hasta aqui (7a+31)T A=1->38T=15,46us lda #$24 ; '$' -> caracter de error sta caracter rx_ok: ldx auxiliar ;[3] recupero el valor de X rts ;[4] ********************************************************************************* ********************************************************************************* * delay_7a - modulo de demora, sirve para calcular el tiempo en la velocidad de * * comunicacion * * Entrada - En el Acc. viene el modulo de demora, Dem.Tot.=(7*A+9) T * * Salida - Acc = 0 * * Stack Usado - 0 Bytes * * Var. Usadas - Ninguna * * ROM Usada - 7 Bytes * ********************************************************************************* delay_7a: nop ;[1] nop ;[1] tsta ;[1] deca ;[1]

38
bne delay_7a ;[3]= 7 cycles rts ;[4]=7a+4 cycles ***************************************************************************** #ifndef _SCI_ASM_H #define _SCI_ASM_H #ifdef __cplusplus extern "C" { /* our assembly functions have C calling convention */ #endif void sci_send(char c); char sci_recv(void); #ifdef __cplusplus } #endif #endif /* _MAIN_ASM_H */

39
APNDICE E Rotina que tem a funo de extrair os dados do arquivo .hex
// parte da rotina foi extraida da Referncia Bibliogrfica [2]. #include <stdio.h> #include <ctype.h> #define getch getchar #define putch putchar int tohex(c) { if( isdigit(c) ) return c-'0'; if( isxdigit(c) ) { if( isupper(c) ) return c-'A'+10; if( islower(c) ) return c-'a'+10; } return -1; } int hex16in() { int c = 0; int n = 0; int v = 0; /* get 1st char skipping extra chars */ do { c = getchar(); } while ( !isxdigit(c) ); v = tohex(c); n = 1; while( n < 4 ) { c = getch(); if( ! isxdigit(c) ) return -1; v <<= 4; v += tohex(c); n++; }; return v; } int hex8in() { int c,v; /* get 1st char skipping extra chars */ do { c = getch(); } while ( !isxdigit(c) ); v = tohex(c); /* read 2nd char */ c = getch(); if( !isxdigit(c) ) return -1; v <<= 4; v += tohex(c); return v; } typedef struct hexrecord { int size;

40
int type; int addr; char data[256]; } hexrecord; unsigned char chksum = 0; int hexreadrecord(struct hexrecord *p) { int c,n,a,t,i,d; while( (c=getch()) != EOF && (c != ':') ) {} if( c == EOF ) return -1; n = hex8in(); if( n < 0 ) return -1; chksum = n; a = hex16in(); if( a < 0 ) /* int must has be 32 bits */ return -1; chksum += (a&0xFF) + ((a>>8)&0xFF); t = hex8in(); if( t < 0 ) return -1; chksum += t; p->size = n; p->addr = a; p->type = t; for(i=0;i<n;i++) { d = hex8in(); if( d < 0 ) return -1; chksum += d; p->data[i] = d; } c = hex8in(); if( c < 0 ) return -1; chksum += c; if( chksum == 0 ) return 1; else return 0; } void printnibble( int x ) { x &= 0x0F; if( x < 10 ) putch(x+'0'); else putch(x-10+'A'); } void hex8out(int x) { x &= 0xFF; printnibble(x>>4); printnibble(x); } void hex16out(int x) {

41
hex8out(x>>8); hex8out(x); } void hexwriterecord(hexrecord *p) { int i; putch(':'); chksum = 0; hex8out(p->size); chksum += p->size; hex16out(p->addr); chksum += (p->addr&0xFF)+(((p->addr)>>8)&0xFF); hex8out(p->type); chksum += p->type; for(i=0;i<p->size;i++) { hex8out(p->data[i]); chksum += p->data[i]; } hex8out(-chksum); putch('\n'); } int main(void) { int i,rc; hexrecord b; while( (rc=hexreadrecord(&b)) >= 0 ) { putchar('\n'); printf("tamanho = %d (%02XH)\n",b.size,b.size); printf("tipo = %d (%02XH)\n",b.type,b.type); printf("endereco = %04XH\n",b.addr); for(i=0;i<b.size;i++) { printf("%02X ",b.data[i]&0xFF); } if( rc == 0 ) printf("\nchecksum failed (%02X)\n",chksum); putchar('\n'); hexwriterecord(&b); putchar('\n'); } return 0; } /* vi:set ts=4: */

42
APNDICE F Rotina que envia os dados e comandos para o PIC.
// Rotina baseada na Referncia Bibliogrfica [3]. #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #include <ctype.h> #define LINHAMAX 100 #ifndef MAXPATH #define MAXPATH 1025 //*************************************** // arquivo proginter.c #define BIT(N) ((1)<<(N)) #define DATABIT BIT(0) /*1 */ #define CLOCKBIT BIT(1) /*2 */ #define DIRECTIONBIT BIT(2) /*4 */ //*************************************** // arquivo proginter.h #define LOAD_CONFIG 0 #define LOAD_DATA 2 #define READ_DATA 4 #define INC_ADDR 6 #define BEGIN_PROG 8 #define PARALLEL_MODE 10 // not used #define LOAD_DATA_DM 3 #define READ_DATA_DM 5 #define MAX_PIC_CMD 63 // division between pic and programmer commands #define RESET 64 // external reset command, not neded for programming #define PROGRAM_MODE 65 // initialize program mode #define RUN 66 // electrically disconnect programmer #define PIC_PROG_EROR -1 #define PROGMR_ERROR -2 #define PTR 0 // use device #0 //*************************************** #endif //*************************************** static int minidelay(int n) { int i; for (i = n; i>0; i--) {}; /* delay between command & data */ return 0; } static int delay(int n) { int i; int f; for (i = n; i>0; i--) { /* delay between command & data */ for (f = 50000;f>0;f--){}; }; return 0; } //*************************************** static int picprog_write(int x) { PTA_PTA3 = 1; // pino de clock delay(10); PTA_PTA4 = x; // pino de dado

43
delay(10); // valor para tempo de envio PTA_PTA3 = 0; // pino de clock delay(30); // valor para tempo de envio return 0; } //*************************************** int main(void){ BYTE bytes[2]; //quando os dois bytes estiverem completos usa-se a rotina comando(bytes[]); } int comando(BYTE bytes[]){ // int seq; int dados = 0; // manda os dados p/ o pic int indice = 0; // endereo int dadospic; // l os dados do pic int erro; // int tamanho; int aux; for(indice = 0;indice < 2;indice++){ if (indice % 2 == 0) { aux = bytes[indice]; } else {seq = bytes[indice]; seq=seq & 0x3F; seq<<= 8; dados=seq+aux; //******************************************************* picprog_cmd(LOAD_DATA,dados); // carrega dados picprog_cmd (BEGIN_PROG,dados); // comando para iniciar a programao delay(60); // tempo mnimo de 10 ms dadospic = picprog_cmd (READ_DATA,dados); if(dados != dadospic){ erro = 1; break; } picprog_cmd (INC_ADDR,dados); // incrementa endereo de armazenamento no PIC dados = 0; } } } //******************************************************************* int picprog_cmd(int cmd, int data) { int i, s_cmd; if (cmd <= MAX_PIC_CMD) { // all programming modes // set bits 001000, output mode, clock & data low // picprog_write(0x00); s_cmd = cmd; // retain command "cmd" for (i = 0; i < 6; i++) { // output 6 bits of command picprog_write((s_cmd & DATABIT)); s_cmd >>= 1; }//fim de for if ((cmd == INC_ADDR) || (cmd == PARALLEL_MODE)) { // command only, no data cycle return 0; } //fim de if else if (cmd == BEGIN_PROG) {

44
// program command only, no data cycle delay (10); // 10 ms PIC programming time return 0; } //fim de else if else if ((cmd==LOAD_DATA) || (cmd==LOAD_DATA_DM) || (cmd==LOAD_CONFIG)) // output 14 bits of data minidelay(200); picprog_write(0); // start bit //add for (i = 0; i < 14; i++) { // 14 data bits, lsb first picprog_write((data & DATABIT)); data >>= 1; } // fim de for picprog_write(0); // stop bit //add return 0; } // fim de else if else if ((cmd==READ_DATA) || (cmd==READ_DATA_DM)) { //read 14 bits from part, lsb first // set bits 001100, clock low, tri state data buffer // picprog_write(0x00); // delay between command & data minidelay(200); picprog_write(0); // start bit data = 0; for (i = 0; i < 14; i++) { // input 14 bits of data, lsb first // shift data for next input bit data >>= 1; picprog_write(DATABIT + 0x00); //databit em 1 para garantir alta impedncia no buffer picprog_write(DATABIT + CLOCKBIT + 0x00); picprog_write(DATABIT + 0x00); if(picprog_write()) data += 0x2000; } // fim de for picprog_write(0); // stop bit // return data; } // fim de else if } else {return PIC_PROG_EROR;} //} // fim de if --> adicionado return PROGMR_ERROR; } // programmer error { // command error

45
8 [1] [2] [3] [4] [5] [7] [8] REFERNCIAS BIBLIOGRFICAS MC68HC908JB8 - DATASHEET [on line]. Disponvel: URL: http://www.freescale.com/. [capturado em outubro de 2005]. TB024 - DATASHEET [on line]. Disponvel: URL: http://www.microchip.com/. [capturado em janeiro de 2006]. PICPROG.ZIP - ROTINA [on line]. Disponvel: URL: http://www.ele.ufes.br/~hans/. [capturado em dezembro de 2005]. ESPECIFICAO DA PROGRAMAO - PDF [on line]. Disponvel: URL: http://www.ele.ufes.br/~hans/. [capturado em dezembro de 2005]. LINEAR REGULATORS 7805 - DATASHEET [on line]. Disponvel: URL: http://www.ti.com/. [capturado em outubro de 2005]. PIC16F873 - DATASHEET [on line].Disponvel: URL: http://www.microchip.com/. [capturado em dezembro de 2005]. DATASHEETS [on line]. Disponvel: =016246844976637583. [capturados em outubro de 2005]. [9] URL: MC68HC908QY4 - DATASHEET [on line]. Disponvel: URL: http://www.freescale.com/. [capturado em outubro de 2005]. [10] [11] [12] [13] URL: http://www.laercio.com.br/. [capturado em outubro de 2005]. http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=68HC908JB8&nodeId

URL: http://www.usb.org/home. [capturado em outubro de 2005]. URL: http://www.infowester.com/ usb.php. [capturado em outubro de 2005]. URL: http://www.clubedohardware.com.br/. [capturado em outubro de 2005].

Vous aimerez peut-être aussi