Sunteți pe pagina 1din 27

PONTIFCIA UNIVERSIDADE CATLICA DE MINAS GERAIS Ps Graduao em Sistemas Embarcados

Projeto de Sistemas Embarcados em Assembly


Projeto de Sistema Embarcado com PIC12F675 e PIC16F877A

Fbio Ricardo de Oliveira Fabrcio Costa Corra Henrique Romano de Oliveira

Contagem 2013

2 Fbio Ricardo de Oliveira Fabrcio Costa Corra Henrique Romano de Oliveira

Projeto de Sistemas Embarcados em Assembly


Projeto de Sistema Embarcado com PIC12F675 e PIC16F877A

Trabalho apresentado ao professor da disciplina Projeto de Sistemas Embarcados em Assembly, do curso de Ps Graduao em Sistemas Embarcados da Pontifcia Universidade Catlica de Minas Gerais, como parte integrante do processo de avaliao.

Professor: Elton

Contagem 2012

3 SUMRIO

1. 2.

Introduo................................................................................................................................. 4 Projeto / Especificaes ........................................................................................................... 5 2.1. Follow Line........................................................................................................................ 5 2.2. Medidor de Velocidade ..................................................................................................... 6 3. Esquema eltrico ...................................................................................................................... 7 3.1. Follow Line........................................................................................................................ 7 3.1.1. Identificao da superfcie ............................................................................................. 7 3.1.2. Movimentao do conjunto............................................................................................ 8 3.2. Medidor de Velocidade ..................................................................................................... 8 3.2.1. Sensores de posio ....................................................................................................... 8 4. Descrio das decises de projeto .......................................................................................... 10 4.1. Mudana de controlador .................................................................................................. 10 4.2. Correes de hardware .................................................................................................... 10 4.3. Modo debug ..................................................................................................................... 11 5. Software C .............................................................................................................................. 12 5.1. Follow Line...................................................................................................................... 12 6. Software AssEmbly ................................................................................................................ 14 6.1. Follow Line...................................................................................................................... 14 7. Software do medidor de velocidade ....................................................................................... 21 8. Sistema Supervisrio .............................................................................................................. 25 9. Consideraes Finais .............................................................................................................. 26 10. Referncias .......................................................................................................................... 27

1. INTRODUO
Os microcontroladores foram desenvolvidos na dcada de 70 baseados nos microprocessadores e seus perifricos. Devido ao seu baixo custo e facilidade de desenho, so amplamente utilizados para automao e controle. Praticamente todos os dispositivos eletrnicos digitais que nos cercam teclado, monitor, disco rgido, relgio, rdio, eletrodomsticos, telefone, etc - esto equipados com algum tipo de microcontrolador. Alm dos j citados, brinquedos, sistemas de superviso e at mesmo veculos so bons exemplos do uso dos microcontroladores como alternativa para controlar processos e aplicaes. Os microcontroladores se diferenciam dos processadores, pois alm dos componentes lgicos e aritmticos usuais de um microprocessador de uso geral, o microcontrolador integra elementos adicionais em sua estrutura interna, como memria de leitura e escrita para armazenamento de dados, memria somente de leitura para armazenamento de programas, EEPROM para armazenamento permanente de dados, dispositivos perifricos como conversores

analgico/digitais (ADC), conversores digitais/analgicos (DAC) em alguns casos; e, interfaces de entrada e sada de dados. De forma oposta aos microprocessadores, onde se superdimensiona ao mximo tendo como limite o preo que o usurio deseja investir, a escolha do microcontrolador feita pelo projetista do equipamento. erro de projeto superdimensionar. Cada desperdcio ser multiplicado pelo nmero de equipamentos fabricados (s vezes milhes). Por isso existem duas linhas de pesquisa paralelas, mas opostas: uma criando microcontroladores mais capazes, para atender produtos de mais tecnologia, e outra para criar microcontroladores mais simples e baratos, para aplicaes elementares. Eles podem ser programados usando linguagens de programao tais como: Assembly e C.

2. PROJETO / ESPECIFICAES
2.1. Follow Line
Como demonstrao dos conhecimentos adquiridos na disciplina de Projeto de Sistemas Embarcados em Assembly, foi proposto o projeto de um rob segue-linha. Este projeto se caracteriza por uma estrutura capaz de movimentar-se de forma independente por um caminho pr-determinado em uma superfcie. Por facilidade de projeto, optou-se por dimensionar o rob para pistas em anel, ou seja, com curvas para apenas um lado. Esta deciso acarreta num menor numero de componentes eletrnicos e ligaes, mantem-se, no entanto, o nvel de dificuldade de programao. O corpo do rob ser desenvolvido com a carcaa de um mouse de computador. Deste mouse sero retirados todos os componentes eletrnicos tais como botes, leds e circuitos integrados sendo aproveitadas apenas as caractersticas fsicas do componente e o projeto eltrico do rob ser completamente desenvolvido pelo grupo. Visando a movimentao, sero acoplados dois motores DC nas laterais do mouse que sero responsveis por impulsionar o conjunto. Desta forma, velocidades de rotao diferentes resultaro em movimentos para esquerda ou direita. Ao passo que, quando estiverem com velocidades iguais, o conjunto movimentar em linha reta. O sistema dever ser capaz de detectar duas cores diferentes na superfcie e, de acordo com a necessidade, tomar decises para manter-se no caminho desejado.

2.2. Medidor de Velocidade


Como adendo, de forma a obter a velocidade mdia do conjunto em linha reta, foi proposto o sistema embarcado de um medidor de velocidade. Este medidor dever ser capaz de captar o movimento do rob e determinar sua velocidade mdia mostrando-a num display. Alm do clculo feito pelo prprio microcontrolador, este dever informar as aquisies feitas a um sistema supervisrio que, paralelamente, validar a informao fornecida num display. Quando o sistema supervisrio estiver ausente, o microcontrolador dever informar a velocidade normalmente. Como estratgia para medio desta velocidade, foi proposto construir uma pista fisicamente delimitada por dois guard rails fototransistores como sensores. No lado oposto aos fototransistores, sero instalados LEDs. Desta forma, quando algum objeto passar em frente ao sensor, cortar a iluminao e o assim o microcontrolador ser capaz de determinar o momento em que a corpo passou em cada ponto j conhecido. Para efeitos de clculo, quando o corpo passar pelo primeiro sensor, dever ser iniciado um timer que ser parado no momento em que o segundo sensor for excitado. Desta forma, obtm-se o tempo gasto pelo corpo para percorrer o caminho. Como a distncia entre os sensores ser conhecida, bastar ao controlador dividir esta distncia pelo tempo calculado e informar a distncia numa medida conhecida. A proposta inclui tambm um boto que ao ser pressionado alterna a unidade de medida da velocidade.

3. ESQUEMA ELTRICO
3.1. Follow Line 3.1.1. Identificao da superfcie
Baseado no princpio da reflexo da luz, acoplou-se um LDR (Resistor Depende de Luz) na parte inferior do rob apontado para baixo. O LDR possui a caracterstica de ser um componente eletrnico cuja resistncia eltrica diminui quando sobre ele incide energia luminosa. Desta forma, atravs da variao da resistncia do LDR ser possvel determinar se o caminho est sendo corretamente seguido. Como o microcontrolador nos fornece uma entrada capaz de detectar diferentes nveis de tenso, usamos um divisor de tenso como na figura.

5V

LDR Analog Input

680

Como forma de potencializar a leitura do LDR, um LED iluminar o caminho do rob. Este LED servir para minimizar a interferncia da luz externa no circuito e aumentar o range de trabalho do LDR.

12V

1k

3.1.2. Movimentao do conjunto


Como explicado anteriormente, o rob ser capaz de realizar movimentos apenas para frente ou para um dos lados. Desta forma, um dos motores ficar permanentemente ligado ao passo que o outro ser controlado. O esquema de ligao dos motores est descrito na figura.

12V

M2 12V

M
M1

Digital Output BC337 150

Quando o nvel de tenso na sada digital que liga o controlador base do transistor for maior que zero, a corrente fluir do coletor para o emissor do BC337, desta forma, o motor M2 impulsionar a roda do lado direito e o rob movimentar em linha reta.

3.2. Medidor de Velocidade 3.2.1. Sensores de posio


Dois fototransistores sero ligados alimentao e na sada a leitura dever ser de nvel lgico alto quando iluminado, ou seja, corpo no presente e nvel lgico baixo quando no iluminado, isto , corpo presente. Para evitar flutuaes no sinal, ser instalado um pull-down de 10k, como indicado abaixo. Estes sinais devero ser tratados em rotinas de interrupo, portanto um CI com portas inversoras servir como condicionador de sinais para correta informao ao microcontrolador.

10

4. DESCRIO DAS DECISES DE PROJETO


4.1. Mudana de controlador
O projeto inicial do rob segue linha previa o microcontrolador HC08 da Freescale programado em linguagem Assembly, mas uma srie de incompatibilidades entre a IDE de programao da Freescale (CodeWarrior) e o sistema operacional Windows utilizado motivou a uma troca pelo microcontrolador PIC da Microchip. O PIC foi escolhido por ser um microcontrolador mais familiar aos alunos e sua variao foi definida levando em conta o encapsulamento e disponibilidade comercial. Uma vez que o hardware da PCB e os mecanismos foram montados antes do desenvolvimento do software, era necessrio um controlador com encapsulamento DIP com 8 pinos, caraacteristica compartilhada pelo PIC12F675 e o HC08QT4. Esta similaridade evita grandes mudanas fsicas projeto do rob.

Para o projeto do medidor de velocidade, foi escolhido o microcontrolador PIC16F877A e uma placa de desenvolvimento j existentes.

4.2. Correes de hardware


Para que o movimento do rob, quando em funcionamento, seja linear, as seguintes condies deveriam ser satisfeitas: rodas de mesmo raio, com mesma velocidade de rotao e posicionadas equidistantes do centro.

11 O transistor utilizado para acionamento do motor 2 tem uma pequena queda de tenso entre o coletor e o emissor. Esta queda faz com que a velocidade de rotao mxima deste motor seja menor que a do motor M1. Este comportamento j era esperado, portanto, por facilidade de montagem, optou-se por alterar o raio das rodas e manter a distncia das rodas para o centro similar.

4.3. Modo debug


Como forma de averiguar no circuito o correto funcionamento do controlador quando este estivesse devidamente instalado, foi adicionado um LED programado para piscar com frequncia prxima a 5Hz enquanto o rob estivesse ligado. Este LED indica que no h inconsistncia no funcionamento do PIC.

12

5. SOFTWARE C
5.1. Follow Line
A seguir, segue comentado o software em C desenvolvido para o rob.
/****************************************************************************** * * * ****************************************************************************** * Nome do Arquivo: * Dependencias: * Microcontrolador: * Opo de Clock: * Compilador: * Empresa: * Plataforma: * Autor: * Verso: * Prtica: * Descrio: Follow Line Veja a seo INCLUDES PI12F675 CLOCK INTERNO - 4MHz MikroProgSwich MiKroE MikroC Pro Fbio R. /Fabrco C. / Henrique R. Rev_0 Trabalho de fim de disciplina - Projeto de Sistemas Embarcados em Assembly Como o Robot utiliza apenas um sendor o firmware supersiona se a tenso enviada pelo LDR ultrapassa a proporo lida atravs do conversor AD e verifica qual o motor que esta acionado para deslg-lo e ligar o motor do lado oposto, fazendo com que o Robot retorna a linha. * Fusveis: WATCHDOG TIMER Disable INTOSC Oscilator: I/O funcion GP4/OSC2/CLKOUT/ GP5/OSC1/CLKIN DATA CODE PROTECTION Disable CODE PROTECTION Disable GP3 MCLR Disable POWER UP TIMER Disable BROWNOUT Detect Disable ******************************************************************************** V A R I A V E I S unsigned int a=0; unsigned char start=0; /******************************************************************************* P R O G R A M A void main() { CMCON = 7; ANSEL = 0b00110001; ADCON0 = 0b00000001; TRISIO.B0 = 1; P R I N I P A L *******************************************************************************/ G L O B A I S *******************************************************************************/ ARQUIVO PARA MICROCONTROLADORES PIC

13
GPIO.B0 = 1;

TRISIO.B1 = 0; GPIO.B1 = 0; TRISIO.B2 = 0; GPIO.B2 = 0; TRISIO.B3 = 0; GPIO.B3 = 0; TRISIO.B4 = 0; GPIO.B4 = 0; TRISIO.B5 = 0; GPIO.B5 = 0; while(1) { GPIO.B2=1; GPIO.B4=1; delay_ms(300); GPIO.B2=0; } ADCON0.GO_DONE=1; //liga leitura do AD0 while (ADCON0.GO_DONE==1); GPIO.B1=0; a= ADC_read(0); // "a" recebe ADC0 //espera termino da leitura de AD0 //liga motor da esquerda

if (start==0){

if (a<=594 && GPIO.B4==1){ // Se sair do branco e o motor esq tiver ligado GPIO.B4=0; //desliga motor da esquerda GPIO.B2=1; delay_ms(200); GPIO.B4=1; delay_ms(100); GPIO.B4=0; start=1; while (ADCON0.GO_DONE==1); delay_ms(200); while(a<594){ GPIO.B2=1; while (ADCON0.GO_DONE==1); //espera termino da leitura de AD0 a= ADC_read(0); } } if (a<= 594 && GPIO.B2==1){// Se sair do branco e o motor esq tiver ligado GPIO.B2=0; //desliga motor da direita GPIO.B4=1; delay_ms(200); GPIO.B2=1; delay_ms(100); GPIO.B2=0; //espera termino da leitura de AD0

14
start=1; delay_ms(200); while(a<594) { GPIO.B4=1; while (ADCON0.GO_DONE==1); //espera termino da leitura de AD0 a= ADC_read(0); } } } } //espera termino da leitura de AD0

6. SOFTWARE ASSEMBLY
6.1. Follow Line
A seguir, segue o cdigo equivalente em Assembly.
_main: ;Robo.c,26 :: ;Robo.c,28 :: MOVLW MOVWF ;Robo.c,29 :: MOVLW MOVWF ;Robo.c,30 :: MOVLW MOVWF ;Robo.c,31 :: BSF ;Robo.c,32 :: BSF ;Robo.c,33 :: BCF ;Robo.c,34 :: BCF ;Robo.c,35 :: BCF ;Robo.c,36 :: BCF ;Robo.c,37 :: BCF ;Robo.c,38 :: BCF ;Robo.c,39 :: BCF ;Robo.c,40 :: GPIO+0, 3 TRISIO.B4 = 0; TRISIO+0, 4 GPIO.B4 = 0; GPIO+0, 2 TRISIO.B3 = 0; TRISIO+0, 3 GPIO.B3 = 0; GPIO+0, 1 TRISIO.B2 = 0; TRISIO+0, 2 GPIO.B2 = 0; GPIO+0, 0 TRISIO.B1 = 0; TRISIO+0, 1 GPIO.B1 = 0; 1 ADCON0+0 TRISIO.B0 = 1; TRISIO+0, 0 GPIO.B0 = 1; 49 ANSEL+0 ADCON0 = 0b00000001; 7 CMCON+0 ANSEL = 0b00110001; void main() { CMCON = 7;

15
BCF ;Robo.c,41 :: BCF ;Robo.c,42 :: BCF ;Robo.c,46 :: L_main0: ;Robo.c,48 :: MOVF XORLW BTFSS GOTO ;Robo.c,49 :: BSF ;Robo.c,50 :: BSF ;Robo.c,51 :: MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF L_main3: DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO ;Robo.c,52 :: BCF ;Robo.c,54 :: L_main2: ;Robo.c,55 :: BSF ;Robo.c,56 :: L_main4: BTFSS GOTO GOTO L_main5: ;Robo.c,57 :: BCF ;Robo.c,58 :: CLRF CALL MOVF GPIO+0, 1 a= ADC_read(0); FARG_ADC_Read_channel+0 _ADC_Read+0 R0+0, 0 GPIO.B1=0; ADCON0+0, 1 L_main5 L_main4 ADCON0.GO_DONE=1; //liga leitura do AD0 ADCON0+0, 1 while (ADCON0.GO_DONE==1); //espera termino da leitura de AD0 GPIO+0, 2 } R13+0, 1 L_main3 R12+0, 1 L_main3 R11+0, 1 L_main3 GPIO.B2=0; 2 R11+0 134 R12+0 153 R13+0 GPIO+0, 4 delay_ms(300); GPIO+0, 2 GPIO.B4=1; 0 STATUS+0, 2 L_main2 GPIO.B2=1; //liga motor da esquerda if (start==0){ _start+0, 0 GPIO+0, 5 while(1) GPIO+0, 4 TRISIO.B5 = 0; TRISIO+0, 5 GPIO.B5 = 0;

16
MOVWF MOVF MOVWF ;Robo.c,60 :: MOVF SUBLW BTFSS GOTO MOVF SUBLW L__main31: BTFSS GOTO BTFSS GOTO L__main29: ;Robo.c,61 :: BCF ;Robo.c,62 :: BSF ;Robo.c,63 :: MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF L_main9: DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO NOP ;Robo.c,64 :: BSF ;Robo.c,65 :: MOVLW MOVWF MOVLW MOVWF L_main10: DECFSZ GOTO DECFSZ GOTO NOP R13+0, 1 L_main10 R12+0, 1 L_main10 130 R12+0 221 R13+0 GPIO+0, 4 delay_ms(100); GPIO.B4=1; R13+0, 1 L_main9 R12+0, 1 L_main9 R11+0, 1 L_main9 2 R11+0 4 R12+0 186 R13+0 GPIO+0, 2 delay_ms(200); GPIO+0, 4 GPIO.B2=1; GPIO.B4=0; //desliga motor da esquerda STATUS+0, 0 L_main8 GPIO+0, 4 L_main8 R0+1, 0 2 STATUS+0, 2 L__main31 R0+0, 0 82 _a+0 R0+1, 0 _a+1 if (a<=594 && GPIO.B4==1){

17
NOP ;Robo.c,66 :: BCF ;Robo.c,67 :: MOVLW MOVWF ;Robo.c,69 :: L_main11: BTFSS GOTO GOTO L_main12: ;Robo.c,70 :: MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF L_main13: DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO NOP ;Robo.c,71 :: L_main14: MOVLW SUBWF BTFSS GOTO MOVLW SUBWF L__main32: BTFSC GOTO ;Robo.c,72 :: BSF ;Robo.c,73 :: L_main16: BTFSS GOTO GOTO L_main17: ;Robo.c,74 :: CLRF a= ADC_read(0); FARG_ADC_Read_channel+0 ADCON0+0, 1 L_main17 L_main16 GPIO+0, 2 while (ADCON0.GO_DONE==1); STATUS+0, 0 L_main15 GPIO.B2=1; 2 _a+1, 0 STATUS+0, 2 L__main32 82 _a+0, 0 while(a<594){ R13+0, 1 L_main13 R12+0, 1 L_main13 R11+0, 1 L_main13 2 R11+0 4 R12+0 186 R13+0 delay_ms(200); ADCON0+0, 1 L_main12 L_main11 1 _start+0 while (ADCON0.GO_DONE==1); GPIO+0, 4 start=1; GPIO.B4=0;

18
CALL MOVF MOVWF MOVF MOVWF ;Robo.c,75 :: GOTO L_main15: ;Robo.c,76 :: L_main8: ;Robo.c,77 :: MOVF SUBLW BTFSS GOTO MOVF SUBLW L__main33: BTFSS GOTO BTFSS GOTO L__main28: ;Robo.c,78 :: BCF ;Robo.c,79 :: BSF ;Robo.c,80 :: MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF L_main21: DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO NOP ;Robo.c,81 :: BSF ;Robo.c,82 :: MOVLW MOVWF MOVLW 130 R12+0 221 GPIO+0, 2 delay_ms(100); GPIO.B2=1; R13+0, 1 L_main21 R12+0, 1 L_main21 R11+0, 1 L_main21 2 R11+0 4 R12+0 186 R13+0 GPIO+0, 4 delay_ms(200); GPIO+0, 2 GPIO.B4=1; GPIO.B2=0; //desliga motor da direita STATUS+0, 0 L_main20 GPIO+0, 2 L_main20 _a+1, 0 2 STATUS+0, 2 L__main33 _a+0, 0 82 if (a<= 594 && GPIO.B2==1){ } L_main14 _ADC_Read+0 R0+0, 0 _a+0 R0+1, 0 _a+1 }

19
MOVWF L_main22: DECFSZ GOTO DECFSZ GOTO NOP NOP ;Robo.c,83 :: BCF ;Robo.c,84 :: MOVLW MOVWF ;Robo.c,85 :: MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF L_main23: DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO NOP ;Robo.c,86 :: L_main24: MOVLW SUBWF BTFSS GOTO MOVLW SUBWF L__main34: BTFSC GOTO ;Robo.c,87 :: BSF ;Robo.c,88 :: L_main26: BTFSS GOTO GOTO L_main27: ;Robo.c,89 :: a= ADC_read(0); ADCON0+0, 1 L_main27 L_main26 GPIO+0, 4 while (ADCON0.GO_DONE==1); STATUS+0, 0 L_main25 GPIO.B4=1; 2 _a+1, 0 STATUS+0, 2 L__main34 82 _a+0, 0 while(a<594) { R13+0, 1 L_main23 R12+0, 1 L_main23 R11+0, 1 L_main23 2 R11+0 4 R12+0 186 R13+0 1 _start+0 delay_ms(200); GPIO+0, 2 start=1; GPIO.B2=0; R13+0, 1 L_main22 R12+0, 1 L_main22 R13+0

20
CLRF CALL MOVF MOVWF MOVF MOVWF ;Robo.c,90 :: GOTO L_main25: ;Robo.c,92 :: L_main20: ;Robo.c,94 :: GOTO ;Robo.c,97 :: L_end_main: GOTO ; end of _main $+0 L_main0 } } } L_main24 FARG_ADC_Read_channel+0 _ADC_Read+0 R0+0, 0 _a+0 R0+1, 0 _a+1 }

21

7. SOFTWARE DO MEDIDOR DE VELOCIDADE


Pelo conhecimento anterior da ferramenta e possibilidade do uso do bootloader, foi utilizado o PIC C COMPILER do CCS verso 4.023.

Com o uso do bootloader, o software pode ser descarregado no PIC atravs da porta serial, como demonstrado abaixo.

22

Abaixo, segue como exemplo de linguagem C, o software desenvolvido para o medidor de velocidade. Como pode ser observado, o CCS facilita a programao tornando mais simples as configuraes os acessos ao hardware.
#include <16F877A.h> #device adc=8 #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES NOWDT HS NOPUT NOPROTECT NODEBUG NOBROWNOUT NOCPD NOWRT //No Watch Dog Timer //High speed Osc (> 4mhz) //No Power Up Timer //Code not protected from reading //No Debug mode for ICD //No brownout reset //No EE protection //Program memory not write protected

#use delay(clock=20000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) #define inicio PIN_B4 #define fim PIN_B5 #define botao PIN_B6 int contador=0,ms=0,cs=0,ds=0; // incrementado a cada estouro do timer0. int movimento_valido=0; // varivel semforo que confirma a passagem pelo primeiro sensor. int unidade=1; // seletor de unidade float velocidade; // velocidade medida em m/s. #int_EXT EXT_isr(){ if(velocidade>0){ unidade++; if(unidade>3){ unidade=1; } mostra_velocidade(); delay_ms(200); } } #int_RB RB_isr() { if(input(inicio)){ output_toggle(PIN_D7); putc('A'); movimento_valido=1; contador=0; ms=0; cs=0; ds=0; velocidade=0; } if(input(fim)){ output_toggle(PIN_D6); putc('B'); if(movimento_valido){ velocidade=0.34/(0.1*ds+0.01*cs+0.001*ms); movimento_valido=0; mostra_velocidade(); } else{ mostra_erro(); velocidade=0; } delay_ms(1000); } pula:

23
clear_interrupt(INT_RB); } #int_TIMER0 TIMER0_isr() { contador++; if(contador>=10){ ms++; contador=0; } if(ms>=10){ ms=0; cs++; } if(cs>=10){ cs=0; ds++; } clear_interrupt(INT_TIMER1); } void mostra_velocidade(){ float speed; pos_linha(1);// posiciona display na linha 1; printf(lcd_escreve,"Veloc.:");// Escreve "Velocidade:"; switch(unidade){ case 1: speed=velocidade; printf(lcd_escreve," [m/s] "); break; case 2: speed=velocidade*3.6; //* 3.6 km/h printf(lcd_escreve," [km/h] "); break; case 3: speed=velocidade*2.2369; // * 2.2369 mph printf(lcd_escreve," [mph] "); break; case 4: speed=velocidade*11810.9771; // yd/h printf(lcd_escreve," [yd/h] "); break; } pos_linha(2);// posiciona display na linha 2; printf(lcd_escreve,"%0.3f ",speed); } void mostra_erro(){ pos_linha(1); // posiciona display na linha 1; printf(lcd_escreve," ERRO "); // Escreve "ERRO" centralizado. pos_linha(2); // posiciona display na linha 2; printf(lcd_escreve," Mov. Invalido "); // Escreve "movimento invalido" } void mostra_erro2(){ pos_linha(1); // posiciona display na linha 1; printf(lcd_escreve," ERRO "); // Escreve "ERRO" centralizado. pos_linha(2); // posiciona display na linha 2; printf(lcd_escreve," Tempo expirado "); // Escreve "tempo expirado". } void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(FALSE); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); setup_timer_2(T2_DISABLED,0,1);

24
setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); enable_interrupts(INT_RB); enable_interrupts(INT_TIMER0); enable_interrupts(INT_EXT); enable_interrupts(GLOBAL); lcd_ini(); delay_ms(10); liga_display(); limpa_display(); // inicializa display

output_high(PIN_D7); output_high(PIN_D6); output_high(PIN_D5); output_high(PIN_D4); delay_ms(500); output_low(PIN_D7); output_low(PIN_D6); output_low(PIN_D5); output_low(PIN_D4); while(1){ if(movimento_valido && ds>=10){ mostra_erro2(); movimento_valido=0; } } } // verifica tempo expirado

25

8. SISTEMA SUPERVISRIO
O PIC 16F877A envia de acordo com o protocolo RS232, informaes para um sistema supervisrio que valida a informao de velocidade fornecida. Abaixo, segue um demonstrativo desta tela em comparao com a velocidade mostrada no PIC.

26

9. CONSIDERAES FINAIS
A simples observao dos cdigos em assembly e C nos permite tirar algumas concluses em relao s duas linguagens. Ao passo que a linguagem assembly fornece maior controle sobre o processador e os perifricos do microcontrolador, a linguagem C mais amigvel ao programador e parte das configuraes no precisam ser dominadas pelo programador. As imagens abaixo, do conta das vantagens lgicas da linguagem Assembly quanto ao cdigo de mquina:

Firmware em C:

Firmware em ASM:

27

10.

REFERNCIAS

Notas de Aula, Sistemas Embarcados PUC Minas, 2012 Prof. Elton. PIC12F675 - Data Sheet Disponvel em: http://ww1.microchip.com/downloads/en/devicedoc/41190g.pdf Acessado em: 18/08/2013 BC337 NPN Transistor - Data Sheet Disponvel em: http://www.datasheetcatalog.org/datasheet/philips/BC337_3.pdf Acessado em: 18/08/2013 LM7805 3-Terminal 1A Positive Voltage Regulator - Datasheet Disponvel em: http://www.fairchildsemi.com/ds/LM/LM7805.pdf Acessado em: 18/08/2013 74LS04 Inversor - Datasheet Disponvel em: http://ecee.colorado.edu/~mcclurel/sn74ls04rev5.pdf Acessado em: 03/09/2013

S-ar putea să vă placă și