Home
Fechadura Electrónica
Contents
1. initializa o timer0 TRO 0 para o timer0 TMOD 0x11 timer 0 1 como TIMERS controlados por TRx modo 1 THO TIMERO H carrega o valor inicial da contagem TLO TIMERO L TRO 1 arranca o timer0 44 time c ELLE FECHADURA ELECTRONICA FEUP LEEC SUC 2001 02 Rui Sousa Pedro Leal Daniel Duarte BARRAR RRA RR RAR RRA RAR RRA RR RAR RARA RARA AEKk kkk kkk kkk RAR RAR RRA RAR k k k k kk k k k k k RR k kk k k k k M DULO time c Implementa as fun es de controlo do tempo kat ET OE OPET A SA SAD IA ss Sos SAS ido SAS A Include eg Se d e el ed Eds ie ld e SD CDS ee d ee deed e ed ee neo tinclude fechadu h Sia a ie ie ie ie Da lie ie el e ie ven leg ien ie ien ie ien lie ien s S Vari veis Globais Aen Menn A eebe ege extern uint timer0 ct contador do timer0 O se tempo passou ebe Prot tipos de Fun es pa a NA ee void time ct uint tempo carrega o contador que valor de tempo adequado void delay void fica espera enquanto tempo n o passar dee e ET e aen a a E E e e A E e AT EH Fun es EE void time ct uint tempo recebe um valor inteiro em ms maior que 5 e m ltiplo de 5 escreve no contador de tempo o valor correspondente para contar esse tempo com interrup es de cada 5ms Est limitado a 65536 contagens o que significa 65536 5ms 327680 ms 327s 5 45minutos Se for necess rio mais tempo pode se passar de int
2. unsigned char PPI CONTROL PP CONTROL 0xE003 PPI CONTROL 0x88 Dificuldades na leitura do teclado Numa fase posterior tivemos dificuldades em ler o teclado O problema estava na parte da fun o keybscan que faz circular um O entre 4 sa das de dados da porta C da PPI Este problema foi resolvido deixando de se tentar rodar esse O pelos v rios bits e atribuindo o directamente a cada um dos bits Jumpers errados Como as placas CORE andavam constantemente a rodar entre v rios grupos acontecia por vezes o sistema n o funcionar por a CORE ter algum componente estragado ou estar mal configurada Estes problemas eram tipicamente resolvidos fazendo o auto teste da CORE e corrigindo os seus Jumpers Problemas na configurac o do compilador Se o compilador n o estiver bem configurado todo o software ou partes n o correm S o especialmente cr ticas as sec es que configuram o modelo de mem ria o tamanho da ROM de c digo e o n vel de optimiza o do c digo 26 Problemas no envio do ficheiro hex S se comecou a ter sucesso no funcionamento do sistema quando se passou a enviar o ficheiro para a RAM da CORE directamente atrav s de um programa de terminal como o TeraTerm e n o pelo uVision 1 ou 2 Problemas por falta de disponibilidade de material Tamb m aconteceu com alguma frequ ncia haver dificuldade em se ter acesso ao laborat rio por este estar demasiado cheio ou por o tempo de perman ncia nele
3. FECHADURA ELECTR NICA FEUP LEEC SUC 2001 02 Rui Sousa Pedro Leal Daniel Duarte EEE A D ARS RA RA A RR AR A RC A E k k k k E M DULO main c Implementa todo o programa principal ARA ARA RR A AN A EE Include EE tinclude fechadu h Jee A Vari veis Globais SCENE timer extern uint timer0 ct flag que assinala que o tempo passou variaveis do main uchar nextstate ESPERA pr ximo estado uchar nextsubstate UM pr ximo sub estado uchar const default_user_code 1 2 3 uchar const default special code 9 8 7 3 uchar user code NUM DIGITOS CODIGO uchar special code NUM DIGITOS CODIGO uchar temp code NUM DIGITOS CODIGO deene Prot tipos de Fun es EE uchar compara codigos void void reset codes void void change user code void void change special code void void main void AAA A A A A E E Fun es A A A A A a A A rea uchar compara codigos void JA Comapara as vari veis globais temp code com special codel e user code e retorna 2 se for igual a special code 1 se for igual a user code 0 nas outras situa es uchar i u code 1 s code 1 for i 0 i lt NUM DIGITOS CODIGO 1 i if user code il temp code i u code 1 u_code 0 nesta situac o esta flag fica a O if special code il temp code il s_code 1 s code 0 48 c digo especial codigo normal retorna modo especial if s_code 1 return 2
4. aquel E F E U Universidade do Porto Faculdade de Engenharia Relat rio do trabalho Fechadura Electr nica Sistemas de Microcontroladores Suc www fe up pt ee98055 suc fechadura Pedro Leal Rui Sousa Daniel Duarte 32 Ano LEEC Turma 7 Grupo 4 Docente Am rico Azevedo Junho de 2002 ndice IT TE 3 1 ele CAE 5 2 Projecto e Implementa o do Hardware see NENNEN RER EEE 7 2 1 Funcionamento do Display NENNEN H 2 2 Funcionamento do Tecado cosa a oo aa Ea a a DE a a DEA a Dna a dea aa Dean Dinos 8 2 3 Funcionamento da PPa cial nada dA Ad 9 2 4 Implementa o do Display iiviiinioionniiani dd 10 2 5 Implementa o do Teclado occcccccncccccnccnnnccnnnnnnnnncnnnnnnnnnonnnnnnanens 12 2 6 Implementa o dos LEID 12 2 7 Implementa o da bb 13 2 8 Configura o da CORE WEEN 14 3 Projecto e Implementa o do Software ks RENE NEEN EN 15 3 1 Controlo do hardware TE 15 3 2 Organiza o do C digo Fonte 16 3 2 1 Ficheiro de include fechadu h sega saca pandas Guida dia sarau ck 16 3 3 Descri o dos m dulos de suporte ieeeees 17 3 3 1 Rotina de Interrup o Unterpt ct 17 3 3 2 Leitura do Teclado keyb C eres 17 3 3 3 Acesso ao Display display C ooccccconncncnnoccnnnnncnnnnarononanonos 19 3 3 5 Controlo de Tempo mec 20 3 3 6 Testes ao Gstema testes Cl 20 3 3 7 Inicializa es nit C scr A 21 3 4 Programa Principal Mali ia 22 3 4 1 Descri
5. o dos EstadosS ooccccccccnncnncnnnnoncnncnnnonanccnnnnannnncnnnnnns 25 4 Problemas Encontrados sssssssnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 26 5 Evolu o do sistema sssssssnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 27 6 CONCIUSOOS ege eg nissan dani atadas ira nota dadas 29 7 Bibliografia TEE 29 ANEXOS EEN 30 A 1 Esquema da montagem kSRKKRERKEKRRENERENKNENERESKEEKKER ENKER Dena ado 30 A 2 Fotografia da montagem cccoocccccnncononnnononnncncnnnrononanononnarononarinonns 31 A 3 Diagramas das fun es principais do programa 32 A 4 Listagem do C digo rial li 36 el EE 36 EE dee 38 AS a o e cl 39 UD AAA AAA A 41 MEDE C amanan E 43 IM EA AAA 45 A AA NN 46 A A A EA T 48 A 5 Configura es do Compilador saia a oa aia tena aa tena aa tenia ndo 54 A 6 Manual do Utilizador ooccccoocccccncccnnnnccnnnnncnnnnnrononancnnonarononaninnnns 56 1 Objectivos O objectivo principal deste trabalho projectar e implementar um sistema para uma fechadura electr nica nas vertentes de hardware e software baseado num microprocessador da s rie 8051 e na placa de desenvolvimento CORE 51 Este sistema deve possuir como entrada um teclado e como sa das 3 displays de 7 segmentos um LED verde um vermelho e um bit para controlo da fechadura O funcionamento deveria ser o seguinte Em repouso o sistema tinha os leds e o display de 7 segmentos desligados A introduc o do c di
6. re inicia o c digo tempor rio temp_code i N break case CODIGO CERTO LEDVERD ON acende led verde TRINCO ON activa o trinco time ct 1000 activa a espera durante Is delay fica espera que esse segundo passe LEDVERD TRINCO OFF apaga os leds nextstate ESPERA no pr ximo estado volta ao estado de espera clr keyb buf apaga todas as teclas lidas gt ignora esses inputs break sai fora case CODIGO ERRADO LEDVERM ON acende o led vermelho wr disp OITOP 9 acendo todos os leds de todos os displays time ct 5000 activa o contador para 5s delay fica espera durante esse tempo wr disp NADA 9 apaga o buffer dos displays LEDVERM OFF apaga o led vermelho nextstate ESPERA o pr ximo estado o de espera clr keyb buf apaga todos os valores no buffer do teclado break salta fora para recome ar case MODO UTILIZADOR ESP fica espera de uma tecla time ct 60000 inicia o contador de tempo do tecla lida rd keyb buf while tecla_lida N tecla_lida amp timer0 ct 20 if tecla lida timer0_ct 0 nextstate ESPERA break se tecla encontrada ou o tempo esgotou sai fora converte o valor da tecla tecla lida key converter tecla lida 1 converte o valor da tecla para o valor escrevivel no ecra nextsubstate tecla_lida pr ximo estado depende da tecla press
7. stores permitia n o ter mais 8 componentes discretos e respectivas resist ncias Em rela o a um inversor da s rie 74HCT porque contem j 8 portas enquanto que os inversores t m menos o que implicaria o uso de mais do que um integrado Para limitar a corrente nos LEDs usamos uma resist ncia calculada da seguinte forma Vec a Voz Vo E Voz ULN2803 eg Equac o 2 I Pico Para calcular a Irico seguimos este racioc nio apenas um display est aceso de cada vez Em cada interrup o aceso o display seguinte e apagado o anterior o que significa que cada display est apagado 2 per odos e aceso 1 Vamos usar interrup es peri dicas em cada 5ms ou seja temos um per odo de refrescamento de 15ms e um per odo em que est ligado de 5ms Temos 3 displays e queremos uma corrente m dia em cada um de 10mA T 1 Jg ig x t 30mA Equac o 3 To 5 11 Durante a fase de montagem seleccionamos experimentalmente resist ncias de 3300 por estas garantirem uma luminosidade adequada ao display Ficamos assim com um sistema em que cada display tem um enable activo baixo accionando o bit correspondente da porta A e em que os dados s o introduzidos na porta B com um sinal activo alto 2 5 Implementa o do Teclado Em rela o ao teclado escolhemos para bits de sa da os 4 menos significativos da porta C e para entrada os 4 mais significativos Para garantir que as entradas nunca ficavam desligadas
8. timer O configurando o para funcionamento como contador Sempre que o contador chega a O executada a rotina de interrupc o Esta vai tratar destas tr s reas distintas Isto executado de uma forma autom tica e perfeitamente transparente para o resto do programa Assim o programador do programa principal apenas tem de utilizar as func es j existentes de escrita nos displays leitura do teclado e controlo de tempo Ainda que num n vel muito restrito a rotina de interrup o e fun es associadas funcionam quase como um mini sistema operativo respons vel pela interac o com o hardware libertando o programador desse trabalho sempre que tal for necess rio 15 Assim criaram se diversas fun es que n o se destinam a ser usadas pelo programa principal mas apenas pela fun o de interrup o Todas as fun es podem assim ser distinguidas quanto sua disponibilidade ou n o para serem usadas pelo programa principal 3 2 Organiza o do C digo Fonte Do ponto de vista da organiza o do c digo fonte optamos por criar m dulos tanto quanto poss vel independentes uns dos outros Cada m dulo respons vel por uma rea por exemplo display teclado interrup o testes main etc Isto permitiu nos ter as diversas fun es separadas em ficheiros diferentes conforme a sua finalidade rea de actua o Os m dulos dividem se fundamentalmente em duas reas Uma rea o m dulo main c que impl
9. 2 Fotografia da montagem Figura 3 31 A 3 Diagramas das func es principais do programa TESTA OS DISPLAYS DE 7 SEGMENTOS p INCREMENTA D GITO INCREMENTA DISPLAY ESCREVE NO DISPLAY DISPLAY 3 gt DIGITO MAX TIMERO CT 02 Figura 4 func o delay Figura 5 fun o teste 7seg 32 CONTADOR DE TEMPO TECLADO CONTADOR DE INTERRUP O EST A 0 CONTADOR MAIOR QUE 0 L NOVO VALOR DO TECLADO DECREMENTA O CONTADOR DECREMENTA O CONTADOR VALIDA ESSE VALOR GUARDA Figura 7 tempo em timer0_int NO BUFFER APAGA OS DISPLAYS REINICIA O CONTADOR DE INTERRUPCOFS INCREMENTA O VALOR DO DISPLAY ACTUAL Figura 6 parte do teclado da fun o timer0_int ESCREVE NOVO VALOR ACTIVA O NOVO DISPLAY Figura 8 parte do display da func o timer0 int 33 INICIALIZA ES ACTIVA AS INTERRUP ES E A INTERRUP O DO TIMER 0 INICIALIZA O ENDERE O DA PPI CONFIGURA A PPI PARA O MODO 0 PALAVRA 4 PORTA A B C_L gt SA DAS PORTA CH ENTRADAS INICIALIZA O TIMER O APAGA TODOS OS VALORES DO BUFFER DO TECLADO APAGA TODOS OS LEDS INICILIZA O BUFFER DO TECLADO COM TODAS AS INICIALIZA O APONTADOR PARA O BUFFER DO TECLADO ESCREVE PARA OS DISPLAY O VALOR DO TECLADO
10. DISPLAY EN OXFE break case 2 DISPLAY EN 0xFD break case 3 DISPLAY EN 0xFB break default DISPLAY EN 0xF8 break se isto se passar acende todos ficam mais claros void wr disp uchar valor uchar disp escreve um valor na posicao display do buffer do teclado se display 9 escreve para todos os displays uchar tmp 0 if disp 9 for tmp 0 tmp lt NUM DISPLAYS 1 tmp disp bf tmp valor else disp bf disp valor uchar key converter uchar tecla f converte o valor da tecla lido no valor a escrever para o display de modo a acender os respectivos leds switch tecla case 1 return UM break 39 case 2 return DOIS break case 3 return TREZ break case 4 return QUATRO break case 5 return CINCO break case 6 return SEIS break case 7 return SETE break case 8 return OITO break case 9 return NOVE break case 0 return ZERO break case A return LETRA_A break Case B return LETRA_B break Case C return LETRA_C break Case D return LETRA_D break Case return ASTE break case return CARDI break case N return NADA break se der erro acende todos os leds default return OITOP break void wr keys uchar tecla uchar display escreve a tecla lida para o display se 9 escreve para todos os displays wr_disp key_converter tecla display 40 keyb c I FECHADU
11. PRESSIONADO TODOS OS DISPLAYS COM MENOS TECLA DIFERENT EDE F ESCREVE NOS DISPLAYS TECLA Figura 9 func o teste_keyb Figura 11 func o init_hardw 34 Nova tecla N 9 Tecla velha Tecla nova SATFORA tecla velha Tecla nova tecla I Tecla nova vel ha retorna IN tecla nova Figura 13 fun o key validate Buffer est vazio Retorna valor Retorna N Decrementa apontador SAI FORA Figura 14 func o rd_keyb_buf Buffer est cheio Escreve valor 2 Incrementa apontador Figura 15 fun o wr keyb bf 35 AA Listagem do C digo fechadu h PARAR RIA RRA RRA RRA RR RAR RRA RRA RR RR RAR RAR RRA RAR RARA RAR FECHADURA ELECTR NICA FEUP LEEC SUC 2001 02 Rui Sousa Pedro Leal Daniel Duarte RARA AR RRA RRA RR RAR RRA RRA RRA RR RR RR RR RRA RR RAR RAR RAR RARAS J E F K RA A RA AR RA k k k k k k k k k MODULO fechadu h Concentra num s ficheiro todas as defini es de todo o programa FK AE A E AE AE e E A A E AE e e AE e E A PR eenen E a Ee Includes EE finclude lt atmellat89x51 h gt define os registros do 8051 finclude lt intrins h gt define as fun es intrinsecas do compilador A AA A A A CADA DADA DITA DID ADIDAS TEDADADA SA Defines O A ee ee define uchar unsigned char define uint unsigned int defini es do timer define
12. as especifica es requeridas Obtivemos assim baseado na nossa aprendizagem de sistemas digitais microprocessadores e da actual disciplina de suc um sistema electr nico de fechadura de porta pouco complexo e perfeitamente capaz de ser utilizado por pessoas sem quaisquer conhecimentos nesta rea Permitiu nos tamb m aperfei oar os nossos conhecimentos e m todos de trabalho ao n vel do projecto e implementa o de sistemas de microcontroladores 7 Bibliografia C51 Primer Hitex UK 1996 Mathew Chapman The Final Word on the 8051 1994 Thomas W Schultz C and the 8051 Prentice Hall 1998 Sencer Yeralan Programming and interfacing the 8051 Addison Wesley Publishing Company 1995 M rio guas O microcontrolodor 8051 CINEL 1996 Brian Kernigham Dennis Ritchie The C Programming Language Second Edition Prentice Hall Software Series 1988 Jo o Paulo Sousa CORE51 22 Edi o Departamento de Engenharia Electrot cnica e de Computadores FEUP 2001 Documenta o do programa uVision 2 Datasheets v rias do micro processador 8031 e do perif rico 82C55A e do ULN2803 29 Anexos J8qUINN WMaunoon eITUOAZISLA EMPEDA TSH OTUTANNIAS K HOLIINOD Z00Z TOO0Z ong SAAOPPTOAJUODOADEA op SPUSISTS 201 20A zt pe LET OIYIIIL CHO 2082 N1N HOMOJ gaus e E IT 77 SOLNIHIIS AYTdSIT an OZ 224 or TSIHOD TYdIINTAd HOLIINOD A 1 Esquema da montagem S 30 A
13. de nenhum n vel l gico inclu mos resist ncias entre as 4 entradas e Vcc Assim no estado em que n o h nenhum bot o pressionado as entradas est o garantidamente a 1 Quando se pressiona um bot o qualquer garante se que o valor na porta de entrada igual ao valor na sa da e nunca se chega a gerar nenhum fen meno cr tico como se n o fosse colocada a resist ncia criando um curto circuito entre alguns bits da porta C e Vcc Um outro problema poss vel poderia acontecer quando se pressionassem dois bot es da mesma coluna ao mesmo tempo Caso isso acontecesse no momento em que o microprocessador colocasse todas as sa das excepto uma a 1 ia se gerar um curto circuito entre as duas delas Para evitar isto inclu mos tamb m d odos entre as portas de sa da da PPI e as entradas de linha do teclado com o nodo virado para a PPI Aqui usamos d odos gen ricos 1N4148 2 6 Implementa o dos LEDS Como este sistema n o ia ser fisicamente ligado a uma fechadura el ctrica opt mos por associar esse sinal de controlo a um LED Assim sempre que esse sinal fosse activado esse LED seria aceso Ir amos assim precisar de 3 LEDs Escolhemos tamb m para simplificar o projecto utilizar os LEDS j existentes na CORE51 12 2 7 Implementac o da PPI J sabemos agora que a PPI vai funcionar no modo O tem de ter as portas A e B configuradas como sa da a parte alta da porta C tamb m como sa da e a parte baixa configurada co
14. do seguinte modo Na base os trans stores t m sempre uma tens o t pica de 4 3V que se deve a queda de tens o Ver entre o Vcc e a base A corrente do emissor aproximadamente igual corrente de colector do trans stor Por sua vez esta proporcional corrente de base do trans stor sendo a raz o de proporcionalidade o seu ganho B Da folha de caracter sticas verificamos que pode variar entre 100 e 800 A corrente de base vai ser quanto maior quanto a diferen a de tens o entre a base e o n vel de tens o da porta PA Esse valor imposto pela resist ncia de base Assim sendo escrever para PA o n vel l gico alto implica ter uma corrente de emissor m nima e escrever o n vel l gico baixo uma corrente de emissor m xima Por isso para activar os displays necess rio colocar o bit da porta PA correspondente no n vel l gico 0 10 Para o valor da resist ncia de base usamos a seguinte f rmula Vee Voz Equa o 1 8x10mA B FS B Deu nos um valor aproximado de 1KQ A ligac o dos displays a porta B da PPI tamb m n o pode ser feita directamente porque a PPI n o pode absorver os 10mA de cada led individual Usamos por isso um driver de corrente ULN2803 Este inverte o sinal introduzido pela PPI e tem capacidade para absorver bastante mais que os 10mA necess rios Preferimos a utiliza o deste integrado em detrimento de trans stores e simples inversores por dois motivos Em rela o aos trans
15. estar limitado a 2 horas 5 Evolu o do sistema A primeira e mais simples evolu o do sistema passar para c digos de 4 d gitos assim como para 4 displays Esta altera o muito simples e requer altera es m nimas no c digo A principal nas defini es globais NUM DIGITOS CODIGO e NUM DISPLAYS Uma altera o tamb m bastante interessante era associar uma buzina ao sistema Esta permitia ouvir um tom de aceita o quando se est a abrir a porta um tom de erro quando o c digo est errado um tom de erro quando o buffer do teclado estivesse cheio e um tom de aceita o quando se pressionasse numa tecla O c digo fonte do programa principal est um pouco confuso e podia ser bastante melhorado Uma outra altera o bastante til e simples o aumento das configura es no modo de utilizador especial Algumas destas configura es poss veis e bastante f ceis de implementar s o configurar o valor dos temporizadores de espera configurar o tempo do sistema em que a fechadura est aberta configurar o tempo em que o sistema fica bloqueado com um c digo errado utiliza o ou n o de teclas alfanum ricas nos c digos 27 Ao mudar o c digo n o existe nenhum algoritmo de verifica o se o novo c digo igual ou n o ao outro c digo j existente Esta situa o n o critica porque caso o sistema tenha os dois c digos iguais ao introduzi lo ele vai automaticamente para o modo de
16. keyb buf 0 void wr keyb buf uchar valor escreve para o buffer do teclado if valor N se valor for diferente de nada faz if keyb_buf_pt lt keyb_buf KEYB_BUF_SIZE 1 se n o estiver cheio keyb_buf_pt valor escreve valor keyb_buf_pt incrementa apontador se estiver cheio n o faz nada 41 uchar rd_keyb_buf void 18 do buffer di teclado if keyb_buf_pt gt keyb_buf 0 se n o estiver vazio keyb buf pt decrementa o apontador return keyb buf pt retorna o valor else return N se estiver vazio retorna NADA void clr keyb buf void apaga o buffer do teclado keyb buf pt amp keyb buf 0 inciia apontador para a 1 posi o uchar keyb_scan void rastreia o teclado para detectar uma tecla uchar coluna 0x0F i 0 linha 0xFE for linha 0 linha lt 4 amp coluna 0x0F linha escreve cada uma das linhas a 0 uma de cada vez switch linha case 0 1 KEYB OxFE break case 1 KEYB OxFD break case 2 1 KEYB OxFB break case 3 1 KEYB 0xF7 break default KEYB OxFE break coluna KEYB coluna coluna gt gt 4 switch coluna detecta valor lido na coluna case 0x0E coluna 1 break case 0x0D coluna 2 break case 0x0B coluna 3 break case 0x07 coluna 4 break default coluna 5 se n o detectou nada ent o garante que retorna N if coluna 5
17. linha 4 retorna o valor correcto do array return teclas linha 1 4 coluna 1 uchar key validate uchar new key compara a nova tecla com a tecla antiga e retorna o valor correcto if new key N fold key N return N se n o houve uma tecla premida actualiza old key else se houve tecla premida faz if new key old key se a nova tecla diferente da antiga faz old_key new_key actualiza tecla_antiga com novo valor return N else se a tecla igual antiga old_key N re inicia tecla antiga return new_key 42 intrpt c EEK kkk kkk kkk RARA RAR RRA RRA RR RAR k k k k RA k k k k k k k FECHADURA ELECTR NICA FEUP LEEC SUC 2001 02 Rui Sousa Pedro Leal Daniel Duarte kk AEk kkk kkk kkk k kkk kkk kkk k k k RR RH kk k M DULO intrpt c Controla as rotinas de interrup o do sistema kk WEE Include ef tinclude fechadu h o o a ee o o ao a no a Vari veis Globais A E a ET ds PIES IS SR no an A O o dA en uchar disp actual 1 n mero do ltimo display escrito varia entre 1 e NUM DISPLAYS uint timer0 ct O contador do timer 0 O se tempo passou usado por outros m dulos uchar keyb ct NUM KEYB DELAY contador de interrup es para leitura do teclado uchar led ct PISCA LED CT contador de interrup es para piscar o LED VERDE PALA See E E E RN ap ET e a a A dn Vari veis Globais Externas EE extern ucha
18. retorna 2 se igual a special code if u_code 1 return 1 retorna 1 se igual a user code else return 0 retorna O nas outras situa es void reset codes void coloca todos os c digos iguais ao seu valor default uchar i for i 0 i lt NUM DIGITOS CODIGO 1 i user code il default user codeT il special code il default special code il void change user code void muda o c digo de utilizador para o valor que vai recebendo do teclado S activa a altera o quando se pressiona em no fim uchar i tecla lida N wr disp MENOS 9 for i 0 i lt NUM DIGITOS CODIGO 1 i do ftecla lida rd keyb buf while tecla lida N tecla lida if tecla lida break elsef temp_code i tecla_lida wr keys tecla lida i if tecla lida return while tecla_lida amp tecla lida tecla lida rd keyb buf if tecla lida return for i 0 i lt NUM DIGITOS CODIGO 1 i user code i temp code il temp code il N wr disp MENOS 9 tecla lida N void change special code void muda o c digo de utilizador especial para o valor que vai recebendo do teclado S activa a altera o quando se pressiona em no fim uchar i tecla lida N wr disp MENOS 9 for i 0 i lt NUM DIGITOS CODIGO 1 i do ftecla lida rd keyb buf while tecla_lida N tecla_lida if tecla lida break else tem
19. simples ent o escolhemos o modo O como modo de funcionamento Visto que a porta C apresenta a caracter stica de poder ser configurada para ter 4 bits como entrada e os outros 4 como sa da optamos por ligar o teclado a essa porta Ficamos ent o com a porta A e B para os displays Optamos por usar a porta B com sa da de dados e a porta A como enable de cada displays Assim ficamos ainda com mais 5 bits da porta A livres para expans o de outras sa das como por exemplo mais displays 2 4 Implementac o do Display J sabemos como ligar os displays fisicamente no entanto h um aspecto que n o pode ser descuidado Trata se dos valores de corrente associados Visto que cada LED do displays consome um valor t pico de 10mA ent o nem o bit de enable nem os oito bits de dados poderiam ser ligados directamente PPI O bit de enable iria ser necess rio ter uma corrente m xima de 8 x 10mA 80mA sendo por isso necess rio implementar um sistema capaz de fornecer este valor Para este bit escolhemos usar um trans stor PNP BC557 em que a base ligada sa da da porta A da PPI o emissor ao Vcc e o colector ligado ao ponto comum dos displays Assim este trans stor vai funcionar como interruptor controlado pela tens o na base A corrente de base sempre muito baixa e o elevado valor de corrente necess rio para activar cada um dos displays passa apenas no emissor e no colector A activa o do sistema processa se
20. utilizador especial No entanto podia ser implementado um sistema que rejeite o novo c digo caso ele fosse igual ao outro Outra funcionalidade bastante interessante seria o bloqueio da abertura de porta ap s x tentativas de c digo erradas Ap s este bloqueio apenas seria poss vel o desbloqueio com o c digo de supervisor ou com um c digo diferente criado para este efeito com bastantes mais d gitos O n mero de tentativas m ximas poderia ser configurado no menu de supervisor assim como a activa o ou n o desta funcionalidade Temos consci ncia que o c digo fonte n o est optimizado do ponto de vista do espa o que ocupa Durante todo o processo de projecto esta nunca foi uma prioridade desde que n o se atingisse o limite m ximo dispon vel 8Kb de RAM Uma melhoria bastante interessante seria a optimiza o do c digo para este efeito especialmente ao n vel das v rias vari veis arrays que se encontram espalhadas pelas v rias fun es As fun es change user code e change special code s o completamente id nticas tirando uma linha que as diferencia Torna se assim um desperd cio de espa o Era tamb m interessante torna las numa s em que ao receber um par metro fazia a diferen a entre o c digo de utilizador e o c digo especial 28 6 Conclus es Todo o desenrolar do trabalho correu como esperado e apesar de alguns contratempos e atrasos conseguiu se finalizar o projecto de acordo com todas
21. 3 ON Selecciona o mapa de descodifica o 0 da PAL JP4 JP5 OFF ON Configuram o tipo de mem ria de programas JP6 JP7 ON OFF Configuram o tipo de mem ria de dados JP8 JPO Indiferente Permitem ligar a tecla INTR a INTO ou TO JP10 JP11 Indiferente Permitem ligar o segundo canal s rie aos bits P1 2 e P1 3 JP12 ON Activa os perif ricos existentes na placa leds e bot es JP13 ON Liga a tens o de alimenta o da placa aos conectores de expans o A core usada estava equipada com um RAM de 8kb e com um micro processador da s rie 8031 14 3 Projecto e Implementacao do Software O software de suporte a fechadura electr nica foi feito na linguagem C e n o em assembly Tomamos esta op o pelas seguintes raz es C mais intuitivo do que assembly por ser uma linguagem de alto n vel modular permitindo reutiliza o de c digo C permite tamb m estruturar todo o c digo fonte de uma forma simples que devido sua modularidade perfeitamente compat vel com futuros upgrades ao sistema tanto no software como no hardware 3 1 Controlo do hardware No desenvolvimento do software optou se por tentar criar uma estrutura que permitisse acesso ao hardware de uma forma simples e transparente para o programa principal Isto principalmente em tr s reas distintas acesso ao display leitura do teclado controlo de tempo Isto foi conseguido atrav s da utiliza o da rotina de interrup o do
22. A o enable de cada display individual Todo o projecto foi feito de modo a que apenas um display estivesse aceso de cada vez Esta t cnica de multiplexagem permite ter valores diferentes escritos em cada display sendo a informac o renovada em cada interrupc o Para implementar esta funcionalidade criaram se v rias fun es de controlo dos displays e parte da rotina de interrupc o gere tamb m esta funcionalidade O timer que origina a rotina de interrup o periodicamente carregado com o valor correspondente a 5ms Este tempo foi determinado experimentalmente como o tempo m ximo necess rio para que n o se visse cintila o nos displays dando a sensa o que todos est o acesos em simult neo Fun es do display void en disp uchar display Recebe como par metro o numero de display e activa esse display O desactiva todos usada pela fun o de interrup o void wr disp uchar valor Recebe o valor a escrever e o uchar disp n mero do display Guarda o valor na posi o correspondente do buffer do display Disp 9 corresponde a todos usada pelo programa principal uchar key converter uchar Recebe um valor de tecla e tecla converte o no correspondente valor requerido para escrever para os displays retornando esse valor Esta fun o disponibilizada ao programa principal 19 3 3 5 Controlo de Tempo time c Sempre que o programa principal tem necessidade de contabilizar um pe
23. CERTO 3 fdefine CODIGO ERRADO 4 fdefine MODO UTILIZADOR ESP 5 define NUM_DIGITOS_CODIGO 3 define ON 0 define OFF 1 EE Vari veis Externas EE apontadores para os endere os da PPI extern unsigned char xdata DISPLAY extern unsigned char xdata DISPLAY EN extern unsigned char xdata KEYB extern unsigned char xdata PPI CONTROL kee Seed EE EE E Prot tipos Externos de Todas as Func es dos v rios M dulos A aa SS es ea extern void init_keyb void inicializa o teclado extern void init_hardw void initializa todo o hardware extern uchar key_converter uchar tecla converte teclas em valores do display extern uchar key validate uchar new key valida tecla lida extern uchar keyb scan void faz o scan do teclado extern uchar rd keyb buf void 1e o buffer do teclado extern void clr keyb buf void apaga o buffer do teclado extern void delay void fun o de espera extern void en disp uchar display activa o display selecionado O desativa todos extern void teste 7seg void faz o teste dos displays extern void teste 7seg2 void faz outro testes aos displays extern void teste keyb void testa o teclado extern void teste leds void testa os leds extern void time ct uint valor recebe o valor em ms para contar timer0 ct vem a 0 qd o tempo tiver passado extern void timer0 init void inicializa o timer O extern void timer0 int void fun o de interrup o do time
24. Com uma mem ria de 8Kb este valor permite ter um c digo at 5120bytes e um espa o para Xdata at 2880bytes Caso se pretenda tamb m usar as fun es de execu o passo a passo e de paragem do programa necess rio incluir Code 0030 Target Output Listing 051 A51 BUS Locate BL51 Mis Debua Y Use Memory Layout from Target Dialog Code Banga III Space Base Segments Xdata Range Code o Xdata ham P ss Linker TO fechadu a control ATA 1400 string e Cancel Defaults Figura 18 55 A 6 Manual do Utilizador Para utilizac o desta fechadura autom tica deixamos aqui o seu manual de utilizac o Assim consider mos as principais teclas o que nos permite validar qualquer opc o e o que a qualquer momento nos concede o cancelamento sa da O estado espera ou inicial encontra se registado com indicac o de um ponto a piscar em todos os displays Os c digos pr definidos s o 123 para o utilizador e 987 para o supervisor A introdu o do c digo de utilizador seguida da sua valida o por permite abrir a porta caso o c digo esteja certo ou bloquear o sistema durante 5 segundos caso esteja errado Na primeira situac o acende se O LED verde enquanto a porta aberta e o sistema fica parado 1 segundo na segunda acende se o LED vermelho os displays e o sistema fica parado 5 segundos Caso se introduza o c digo de supervisor entra se no modo de configu
25. RA ELECTR NICA FEUP LEEC SUC 2001 02 Rui Sousa Pedro Leal Daniel Duarte BARRAR RAR RRA RRA RR RARA RRA RR RAR RRA RA RH A AEKk kkk kkk kkk kkk kkk kkk k k RR k k k RAR RRA RR RAR RAR k k k k k k kkk kkk k kkk k k k M DULO keyb c Implementa todas as fun es de gest o do teclado kk PE SI A A A A A A Include A A AAA Ee tinclude fechadu h Ze Vari veis Globais A A AI A A ebessi teclado uchar old key N guarda ltima tecla uchar keyb buf KEYB BUF SIZE buffer do teclado uchar keyb buf pt apontador para o buffer do teclado array com os valores do teclado N significa nada ou nenhum unsigned char teclas ELE E TBM AT DA EG GL PB BT OE RT AQ ADA INT PRESSE CBS O DISC ee LA IES Dis SEa dd so Prot tipos de Fun es E AAA A MS E AA dad void init keyb void inicializa o teclado void wr keyb buf uchar valor escreve para o buffer do teclado uchar rd keyb buf void l o buffer do teclado void clr_keyb_buf void apaga o buffer do teclado uchar keyb_scan void faz o scan do teclado uchar key validate uchar new key valida ou n o a nova tecla A a Fun es Ee void init_keyb void fun o de inicializa o do teclado uchar tmp inicializa o buffer do teclado com todas as posi es vazias for tmp 0 tmp lt KEYB BUF SIZE 1 tmp keyb buf tmp N initializa o apontador para o buffer do teclado keyb buf pt
26. TIMERO COUNT 60928 define o n mero a contar pelo timer0 para 5ms 65536 5000 11 0592 12 define TIMERO H TIMERO COUNT gt gt 8 define o valor alto do timero fazendo 1 shift para a direita define TIMERO L TIMERO COUNT amp 0x00ff define o valor baixo do timero0 limpando os 8 bits menos significativos define NUM DISPLAYS 3 defini es do display define ZERO OXFA valor bin rio a escrever para um display de 7 segmentos de modo a que seja escrito o valor correspondente define UM OxAO define DOIS 0x79 define TREZ 0xB9 define QUATRO 0xA3 define CINCO 0x9B define SEIS 0xDB define SETE OxA8 define OITO OXFB define NOVE OXBB define LETRA_A OXEB define LETRA_C 0x5A define LETRA B 0xD3 define LETRA_D OxF1 define MENOS 0x01 define PONTO 0x04 define NADA 0x00 define OITOP O0OxFF define ASTE 0xC1 define CARDI 0xD0 defini es dos LEDS define LEDVERM P1_4 no core LED1 define LEDVERD RI ZS LED2 define TRINCO Pl 6 LED3 define PISCA LED CT 100 numero de interrup es antes de trocar o valor do led defini es do teclado define KEYB BUF SIZE 5 pode ir desde 1 at 36 5 para pressionar lentamente 12 um meio termo bastante satisfat rio define NUM KEYB DELAY 12 10 bom para quem pressiona rapidamente o teclado e defini es do estado da programa principal define ESPERA 0 fdefine RECEBE CODIGO 1 define VALIDA CODIGO 2 define CODIGO
27. ais existentes no mercado Pretendeu se tamb m tentar garantir ao m ximo a robustez e fiabilidade do sistema tentado tanto ao n vel do software como do hardware dota lo de procedimentos rotinas e solu es em que limitasse ao m ximo os riscos de falha 2 Projecto e Implementac o do Hardware Ao n vel do hardware era necess rio ligar ao microprocessador 2 bits de sa da para LEDS 1 bit para a actua o da fechadura 3 displays de 7 segmentos 1 teclado matricial de 16 teclas 4 linhas x 4 colunas 2 1 Funcionamento do Display Para activar os 3 displays escolhemos multiplexa los e activar cada um sequencialmente Era impens vel usa los separadamente pois isso iria implicar 8 bits para cada um Ao todo iria ser necess rio 3 portas de 8 bits s para os displays Assim usamos s uma porta ligada em paralelo a todos os displays e para activar cada um deles separadamente activado um bit de uma outra porta que ao estar ligado ao ponto comum de cada display funciona como chip select Assim s o necess rios apenas 3 bits para controlo mais oito bits de dados O princ pio de funcionamento baseia se em que cada um dos display s pode estar aceso de cada vez Se a frequ ncia de refrescamento for suficientemente alta ent o todos os displays parecem ao olho humano estar activos em simult neo Isto foi realizado atrav s da utiliza o de uma interrup o associada a um timer Periodicamente e indep
28. amb m presente a fun o de inicializa o do timer0O Antes de mais opt mos por usar apenas o timer O de modo a deixar o timer 1 livre permitindo que este pudesse ser utilizado pelo canal s rie e assim interagir com o programa de monitoriza o no computador A inicializa o do timer configura o para modo 1 e carrega o valor a decrementar para os registos apropriados 3 3 2 Leitura do Teclado keyb c A leitura do teclado est tamb m montada de uma forma transparente para o utilizador Periodicamente o teclado lido avaliada a validade ou n o da leitura e guardada essa informa o num buffer Esta fase implementada pela rotina de interrup o O sistema implementado para guardar os dados do teclado um buffer que implementa uma estrutura de FIFO first in first out Para implementar esta estrutura est o presentes tr s fun es wr keyb buf rd keyb bf e clr keyb buf A primeira usada pela rotina de interrup o e as ltimas s o usadas pelo programa principal Dado que a rotina de interrup o executada cada 5ms consideramos que este era um tempo excessivamente curto para se ler o teclado periodicamente por isso associamos esta leitura a um contador que vai permitir contabilizar um tempo que ronda os 40ms 17 A func o de inicializac o do teclado respons vel por duas reas distintas Por um lado garante que todas as posic es do buffer do teclado t m o caracter nulo N por
29. correr os 3 displays for tmp 0 tmp lt NUM DISPLAYS tmp escreve no buffer dos displays if tmp display wr disp array valor display else wr disp NADA tmp time ct 500 inicializa o contador do timer 0 para 1000ms delay fica espera durante 2s tecla lida rd keyb buf if tecla lida amp break 46 wr_disp array valor 9 escreve todos iguais time ct 500 inicializa o contador do timer O para 2000ms delay fica espera durante 2s if tecla lida return teste 7seg2 chama o teste 2 void teste 7seg2 void acende durante um per do todos os displays wr keys 8 9 5 escreve 8 no display time ct 2000 inicializa o timer O para 2000ms delay fica espera wr disp NADA 9 apaga o display void teste leds void f escreve alternadamente para todos os leds LEDVERM ON LEDVERD TRINCO OFF time ct 500 delay LEDVERM TRINCO OFF LEDVERD ON time ct 500 delay ii LEDVERM LEDVERD 1 TRINCO 0N time ct 500 delay LEDVERM LEDVERD TRINCO OFF void teste keyb void escreve para os displays o valor da tecla pressionada uchar tmp N wr_disp MENOS 9 while tmp tmp rd_keyb_buf if tmp N wr keys tmp 9 1 LEDVERM LEDVERM Usado para teste 47 main c J 5 F F E ARI RRA RRA RRA RR RAR RRA RR RAR RAR RRA RRA RRA RR RAR RAR RRA RAR
30. ementa o programa principal e fun es relacionadas A outra s o todos os outros m dulos que implementam fun es de suporte ao primeiro 3 2 1 Ficheiro de include fechadu h Comum a todos os m dulos encontra se um ficheiro de include onde est o concentradas todas as defini es prot tipos de fun es e mesmo includes relativos ao microprocessador Esse ficheiro fechadu h e a sua constitui o a seguinte 1 includes de ficheiros necess rios 2 defini es de labels 3 defini es de vari veis externas comuns a todos os m dulos 4 prot tipos externos de todas as fun es do sistema Opt mos por criar apenas um ficheiro de include e n o v rios um para cada m dulo porque consideramos que a dimens o e complexidade do programa n o o justificava Ainda assim o facto de todo o tipo de defini es do programa estar concentrado num s ficheiro permite um muito simples controlo gest o e modifica o 16 3 3 Descric o dos m dulos de suporte 3 3 1 Rotina de Interrupc o interpt c A rotina de interrup o respons vel pela implementa o das fun es descritas anteriormente Adicionalmente tamb m implementa uma funcionalidade do programa principal sendo esta o piscar do LED verde quando o sistema est no modo de utilizador especial Os algoritmos de cada uma das sec es da rotina de interrup o est o representados nos tr s diagramas No m dulo da rotina de interrup o est t
31. endentemente do programa principal o micro processador vem executar a rotina de interrup o em que desliga o display actual carrega o novo valor destinado a aparecer no display seguinte liga o novo display e sai fora O sinal de enable dos displays o representado na figura 1 em que as tr s formas de onda representam os 3 sinais de enable de cada display le e ds a A Figura 1 Figura 2 2 2 Funcionamento do Teclado O funcionamento do teclado matricial Figura 2 tamb m relativamente simples Existem 4 linhas e 4 colunas Quando se pressiona um bot o est se a fazer a ligac o el ctrica entre a linha e a coluna respectiva Para se detectar qual o bot o premido o que o sistema faz tendo por exemplo as linhas ligadas como sa das e as colunas como entradas e Activa uma linha de cada vez e verifica se esse bit aparece em alguma das colunas e Caso esse bit apareca numa coluna ent o tem se a informac o de qual a linha e coluna associada ao bot o pressionado Dado que do ponto de vista de um micro processador o processo de se carregar num bot o demora bastante tempo ent o poss vel associar uma rotina que l o teclado a uma interrup o e a um timer Assim periodicamente o microprocessador vem ler o teclado verificando se existe alguma tecla pressionada guardando esse valor e voltando posteriormente ao programa principal 2 3 Funcionamento da PPI Para im
32. go de utilizador de 3 d gitos alfanum ricos permitiria a abertura da fechadura durante 1 segundo em simult neo com a activac o do LED verde Cada d gito do c digo acenderia sequencialmente o segmento central de cada display C digos n o completamente inseridos teriam de ser automaticamente apagados ao fim de 10 segundos Existiriam tamb m duas teclas extra e que permitiriam respectivamente confirmar e cancelar a instru o A introdu o de um c digo errado bloqueava o sistema durante 5 segundos durante os quais este devia ligar o LED vermelho e ignorar poss veis introdu es de dados no teclado Deveria tamb m existir um modo de utilizador especial em conjunto com o c digo de acesso respectivo que permitiria alterar o c digo de utilizador e o c digo de utilizador especial Neste modo o LED verde deve piscar e os visualizadores deveriam mostrar as letras pressionadas Ao longo de todo o processo de desenvolvimento tivemos tamb m sempre como objectivo a obtenc o de um sistema facilmente evolutivo tanto no hardware como no software Isto levou nos a alterar ligeiramente as especifica es iniciais do seu funcionamento de modo a torn lo modular criando quase um sistema de men s e menus e submenus para a sua configurac o Outra vantagem resultante da alterac o do modo de funcionamento do ponto de vista do utilizador foi a sua compatibilizac o com o modo de funcionamento dos sistemas t picos de alarme residenci
33. inticializa o timer0 activa as interrup es e a interrup o do configura a PPI para o Modo 0 Inicializa todas as sa das da wr disp NADA 9 LL LEDVERD LEDVERM TRINCO OFF SS init_keyb apaga todos os valores do buffer do teclado apaga todos os leds inicializa o teclado 38 ispl display c ARI kkk KR RAR RRA RRA RR RAR RRA k k k RR RAR k k k k RA k k k k k k k FECHADURA ELECTR NICA FEUP LEEC SUC 2001 02 Rui Sousa Pedro Leal Daniel Duarte kk Jk kkk kkk k kkk kkk kkk kk kk kkk kkk k k k k RH k k k M DULO display c Implementa todas as fun es de gest o dos displays kk HEES Include A A AAA Ee tinclude fechadu h A A A ESSE DS Vari veis Globais ps A de eebe uchar disp bf NUM DISPLAYS guarda o valor a escrever em cada display PESE DEC RS A Prot tipos de Fun es e AAA III void en disp uchar display activa o display 1 2 ou 3 O desativa todos void wr disp uchar valor uchar disp escreve no buffer do display se disp 9 escreve em todos uchar key converter uchar tecla converte um valor de tecla no valor a escreer nos displays void wr keys uchar tecla uchar display escreve uma tecla mos displays A cp pac e A A PR e ERA A A E e EO Fun es A A E E EEE E void en disp uchar display activa o valor display que se pretende acender switch display case 0 DISPLAY EN OxFF break com 0 desactiva os displays case 1
34. ionada wr disp tecla lida 0 escreve no display 0 esse valor time_ct 60000 initializa o contador de tempo fica epera de um ou que o tempo esgote do tecla lida rd_keyb_buf while tecla lida amp tecla lida amp timer0 ct gt 0 enquanto n o se carregar no no ou o tempo n o esgotar l o buffer do teclado if timer0_ct 0 nextstate ESPERA break se acabou o tempo ent o volta ao estado inicial nextstate MODO UTILIZADOR ESP 52 if tecla lida break se se carrega no ent o volta ao menu anterior e re inicia o menu de utilizador especial if tecla lida se se carregou no entra nos sub estados time_ct 250 delay switch nextsubstate case UM teste leds break case DOIS teste 7seg break case TREZ teste keyb break case SETE change user code break case OITO change special code break case NOVE default wr_disp OITOP 9 time_ct 2000 delay break reset_codes break wr_disp NADA 9 break 53 A 5 Configurac es do Compilador O compilador usado foi o uVision 2 vers o V2 23 As configura es necess rias para o bom funcionamento do programa s o as seguintes Target Memory Model Small Code Rom Size Large Figura 16 C51 Level 6 Loop Rotation Emphasis Favor Speed Figura 17 54 BL51 Locate Xdata 1400
35. isplays o valor da tecla pressionada Sai fora da fun o uando se pressionar em Todas as fun es de teste s o usadas pelo programa principal 3 3 7 Inicializa es init c A fun o init hardw respons vel por inicializar todas as quest es relativas ao hardware Assim est sob a sua al ada activar as interrup es e a interrup o do timer 0 inicializar os apontadores da mem ria externa com o valor conveniente inicializar a PPI com a palavra de controlo adequada e garantir que as suas sa das est o a 1 Garantir que todos os leds e displays est o desligados Correr a rotina de inicializa o do timer e do teclado Todas as chamadas de outras fun es de inicializa o do hardware timer teclado etc est o j inseridas na fun o init hardw de modo a que o programa principal tenha apenas de chamar esta fun o 21 3 4 Programa Principal main c No desenvolvimento do programa principal optou se por seguir uma estrutura de m quina de estados Esta estrutura permite simplificar bastante todo o desenvolvimento do programa principal assim como garantir que o sistema est sempre num estado determinado Foi nesta fase de projecto do sistema que se optou por n o seguir a risca O modo de funcionamento do sistema sugerido Isto aconteceu para permitir retirar uma s rie de vantagens j referidas anteriormente Tentou se sempre que o programa obedecesse s seguintes caracter
36. mo entrada A esta configurac o corresponde a palavra de controlo 0x88H Em rela o s entradas da PPI era necess rio liga las CORE e atribuir lhe um endere o de mem ria Para isso ligamos directamente o barramento de dados do conector principal da CORE ao barramento da PPI Os sinais de RD RST e WR tamb m foram ligados directamente entre o conector principal da CORE e a PPI Do conector secund rio usamos os bits AO A1 e AUX Os primeiros dois correspondem aos bits menos significativos do barramento de endere os j desmultiplexado e o segundo um snal activo baixo quando o microprocessador acede a toda a rea de mem ria externa desde 0xE000 at OxFFFF Como a PPI o nico perif rico que vamos usar podemos reservar toda a rea auxiliar para este perif rico Assim ligamos o sinal AUX ao CS da PPI e os sinais AO e Al directamente aos sinais AO e Al da PPI Neste caso vamos ter para endere os base da PPI Palavra de Controlo 0xE000 Porta A 0xE001 Porta B 0xE002 Porta C 0xE003 Estes endere os repetem se periodicamente no espa o desde 0xE000 at OXFFFF no entanto basta nos usar um dos conjuntos poss veis 13 2 8 Configurac o da CORE 51 Do ponto de vista do hardware o nico ponto que falta descrever a configurac o da CORE 51 Esta configurac o feita atrav s de jumpers e foram usados as seguintes configura es JP1 ON Controla o sinal EA JP2 JP
37. modular que facilmente pode crescer com novas caracter sticas O programa principal chama v rias fun es que se destinam a tornar o c digo mais simples e intuitivo Algumas delas s o Fun es do programa principal main c uchar compara codigos void Compara o c digo tempor rio temp code com o c digo de utilizador especial special code e com o de utilizador normal user code Retorna 2 se for igual ao c digo especial 1 se c digo normal e O se diferente de ambos usada pela fun o principal void reset codes void Muda os c digos actuais para os c digos iniciais void change user code void Muda o c digo de utilizador void Muda o c digo de utilizador especial change special code void void main void implementa os v rios estados do programa principal e respectivas condi es de transi o 24 3 4 1 Descric o dos estados Estado de ESPERA Neste estado o sistema tem todas as sa das desligadas Os displays ficam com um ponto a piscar continuamente Quando se pressionar uma tecla diferente de ou ele passa para o estado recebe codigo Ao passar envia como par metro para este estado a informac o da tecla premida que vai funcionar como primeiro d gito do c digo Estado RECEBE CODIGO Neste estado sempre que premida uma tecla acendido o segmento central de cada um dos displays Guarda os d gitos do c digo no array temp codel Estado VALIDA CODIGO Este estado
38. n o interage directamente com o utilizador Limita se a especificar qual o pr ximo estado em fun o dos valores existentes nos arrays temp code user code e special code Estado CODIGO CERTO Neste estado aceso o LED verde e o TRINCO Dura 1s e ap s esse tempo ele ignora todos os valores introduzidos no buffer do teclado entretanto e volta ao estado de espera Estado CODIGO ERRADO Neste estado acendem se todos os LEDs de todos os displays assim como o LED vermelho durante 5s Ap s este estado ele volta ao estado de espera e ignora os valores introduzidos no teclado entretanto Estado MODO UTILIZADOR ESPECIAL Neste estado o LED verde fica a piscar Isto conseguido atrav s da rotina de interrup o Ao pressionar se uma tecla ela aparece no primeiro display indicando que se escolheu aquele submenu Para se entrar nele pressiona se no levando o sistema a executar a fun o pretendida Ap s a execu o dessa fun o volta ao modo de utilizador especial 25 4 Problemas Encontrados Durante o projecto e montagem do sistema deparamo nos com diversos problemas Fica aqui uma descric o sucinta de v rios Dificuldades ao aceder PPI Numa fase inicial n o se conseguia ler nem escrever da PPI fazendo o include do ficheiro que define o acesso mem ria externa Embora este n o seja motivo para o sistema n o funcionar consegui se superar o problema quando se come ou a aceder atrav s de apontadores ex
39. outro inicializa o apontador para o primeiro endere o a ser escrito do buffer Fun es do teclado void init keyb void Fun o das inicializa es do teclado void wr keyb buf uchar valor uchar rd keyb buf void void clr keyb buf void uchar keyb scan void uchar key validate uchar new key void wr keys uchar tecla uchar display Recebe um valor de tecla e guarda o no buffer do teclado usado pela rotina de interrup o Fun o que retorna o 1 valor introduzido no buffer do teclado Retorna o caracter n caso esteja vazio usada pelo programa principal Apaga os valores contidos no buffer do teclado usada pelo programa principal Fun o que percorre o teclado e retorna o valor da tecla premida Usa o vector teclas i para retornar esse valor usada pela rotina de interrup o Recebe o valor da nova tecla e implementa o algoritmo de verificac o da tecla premida Usa a vari vel global old key para comparac o Retorna o valor da nova tecla usada pelo programa principal Recebe o valor de uma tecla e o n de display e usa as fun es key converter e wr disp para as escrever no display seleccionado usada pelo programa principal 18 3 3 3 Acesso ao Display display c Tal como j foi referido na descric o do hardware os displays est o ligados a porta A e B da PPI sendo a porta B para recepc o do valor a escrever no display e a porta
40. p_code i tecla_lida wr_keys tecla_lida 1i if tecla lida return while tecla lida l tecla lida tecla lida rd keyb buf if tecla lida return for i 0 i lt NUM DIGITOS CODIGO 1 i special code il l temp code il temp code il N wr disp MENOS 9 tecla lida N void main void uchar i tecla_lida N init hardw inicializa o hardware inicializa o software for i 0 i lt NUM DIGITOS CODIGO 1 i initializa os c digos iguais ao default user_code i default_user_code i special code i default special code i temp_code i N tecla_lida N while 1 LEDVERM LEDVERD TRINCO OFF wr disp NADA 9 switch nextstate case ESPERA para garantir que a sistema n o fica pendurado foi necess rio incluir todos estes ciclos while tecla_lida N tecla lida tecla_lida wr_disp PONTO 9 time_ct 500 while timer0_ct gt 0 amp tecla_lida N tecla lida 4 tecla lida tecla lida rd keyb buf _nop_ 0 if tecla_lida N tecla lida break else wr_disp NADA 9 time_ct 500 while timer0_ct gt 0 6 tecla_lida N tecla lida tecla_lida tecla_lida rd_keyb_buf _nop_ 0 50 nextstate RECEBE_CODIGO break case RECEBE_CODIGO tempor rio sai fora displays o timer com o tempo m ximo de array tempor rio a tecla lida display o
41. para double ou usar outra variavel char para contar no m ximo 256 5 45min tempos comuns 5min 300000ms60000 contagens imin 60000ms 12000 contagens 10 s 10000ms 2000 contagens Do e 5000ms 1000 contagens ls 1000ms 200 contagens timer0_ct tempo 5 void delay void 1 enquanto a variavel timer0_ct for O n o faz nada while timer0_ct gt 0 _nop_ 45 testes c HORROR ROO ROO ROO ROO ROO ROO OOOO OOOO OOOO OOOO OOOO A ARA FECHADURA ELECTRONICA FEUP LEEC SUC 2001 02 Rui Sousa Pedro Leal Daniel Duarte E A J E F K RR A A A A A A RC A k k k k k k k M DULO testes c Implementa todas as rotinas de teste do sistema GAR AE A e e A A A RR A A A RAR k kk k k k k k S include fechadu h void teste_7seg void teste dos displays void teste_7seg2 void outro teste do display void teste leds void teste dos leds void teste keyb void teste do teclado void teste 7seg void testa o displays de 7 segmentos uchar array ZERO UM DOIS TREZ QUATRO CINCO SEIS SETE OITO NOVE LETRA_A LETRA_B LETRA_C LETRA_D ASTE CARDI PONTO MENOS NADA uchar tmp 1 display 1 valor 0 tecla_lida N contadores para os for e while wr disp NADA 9 garante que o buffer est a 0 for valor 0 valor lt 18 valor permite percorrer todos os valores do array if tecla lida 4t break for display 0 display lt NUM DISPLAYS display permite per
42. plementar todo o sistema seriam ent o necess rios 19 bits Embora fosse poss vel usando directamente as portas do micro processador dispon veis na CORE e posic es de mem ria externa atrav s do uso de latches esta t cnica iria ter alguns inconvenientes iria implicar a utiliza o de bastante l gica discreta para multiplexar desmultiplexar externamente sinais do micro processador Iria impossibilitar qualquer crescimento posterior do hardware do sistema Por exemplo se se pretendesse utilizar 4 d gitos de c digo em vez de 3 essa evolu o n o poderia ser acompanhada pelo aumento de 3 para 4 displays Por estes motivos e tamb m com a vantagem de aumentar a simplicidade do sistema ao n vel do hardware preferimos usar uma PPI Este perif rico permitiu nos obter 3 portas adicionais al m das j existentes no micro usando para isso 4 posi es da mem ria externa Assim apenas com um circuito integrado obtemos um sistema facilmente escalon vel simples de projectar montar e fundamentalmente simples de utilizar Outra vantagem prende se com o facto de todas as portas da PPI permitirem receber ou fornecer 2 5mA de corrente enquanto que o microprocessador est limitado a valores inferiores A PPI usada 80c55a apresenta bastantes possibilidades de configura o tanto no modo de funcionamento tipo de dados como na selec o de entrada ou sa da para cada porta Como era apenas pretendido usar entradas e sa das
43. primeiro traco 1 Recebe os 3 valores do c digo para o array ao fim de 60 segundos sem se introduzir nenhum valor manda o sistema para o estado anterior n o aceite como c digo s aceita os primeiros 3 d gitos introduzidos Si wr_disp NADA 9 apaga os time ct 60000 Ef inicia espera temp code 0 tecla lida escreve no wr_disp MENOS 0 escreve no wr_keys tecla_lida 0 for i 1 i lt NUM_DIGITOS_CODIGO 1 6 timer0_ct gt 0 amp tecla_lida ciclo para os n meros do c digo que faltam tecla lida do tecla lida rd keyb buf while tecla_lida N amp timer0 ct gt 0 if tecla lida l amp tecla lida temp code i tecla lida wr disp MENOS i wr keys tecla lida i i espera por 1 if tecla lida amp timer0 ct gt 0 do tecla lida rd keyb buf while tecla lida amp timer0 ct gt 0 if timer0 ct 0 tecla _lida nextstate ESPERA break if timer0_ct gt 0 6 tecla_lida nextstate VALIDA_CODIGO break else nextstate ESPERA break case VALIDA CODIGO Compara valores recebidos com os c digos actuais i compara codigos a fu o compara codigos compara cod tmp com codigo utilizador if i 1 nextstate CODIGO CERTO else if i 2 nextstate MODO UTILIZADOR ESP else nextstate CODIGO ERRADO 51 for i 0 i lt NUM DIGITOS CODIGO 1 i
44. r odo de tempo espec fico este controlo pode ser feito pelas fun es criadas para este efeito O princ pio muito simples existe uma func o que recebe o valor do tempo que se pretende controlar e carrega o valor necess rio para uma vari vel global que vai funcionar como flag Quando essa flag tiver chegado a O ent o porque o tempo j passou Fun es de controlo de tempo void time ct uint tempo Recebe um valor em ms e configura o contador para o n mero de interrup es correspondentes O contador vari vel global Omer ct tornando se O quando o tempo tiver passado usada pelo programa principal void delay void Mant m o microprocessador parado enquanto n o passar todo o tempo seleccionado contador de tempo n o for 0 usada pelo programa principal 3 3 6 Testes ao Sistema testes c As func es de teste permitem testar as quatro reas principais de interacc o com o hardware Acedem a esses recursos da mesma forma que o programa principal o faz levando a que o bom funcionamento destes testes seja garantia de que o hardware e o software de suporte est bem 20 Fun es de teste void teste 7seg void Escreve sequencialmente em cada display v rios algarismos void teste 7seg2 void Acende durante um per odo de tempo todos os d gitos do tr s displays void teste leds void Acende sequencialmente cada um dos leds void teste keyb void Escreve nos 3 d
45. r O extern void wr disp uchar valor uchar disp escreve no buffer do display disp o valor valor se disp 9 escreve em todos extern void wr keyb buf uchar valor escreve no buffer do teclado extern void wr keys uchar tecla uchar display escreve no display o valor da tecla 37 init c D AR AR A A A A A A AR A A A FECHADURA ELECTR NICA FEUP LEEC SUC 2001 02 Rui Sousa Pedro Leal Daniel Duarte RSRS A A A A A A A A A RRA RS J F F F K K e A e AE A d e A e e A e e AE A e E A e e A e e E A A E A e e A e e AE E e E A e e A k e E A e k k k k k k k M DULO init c M dulo respons vel pela inicializac do hardware RARA E AE A A AE E A E AE e e AE e e AE E e E A e e RAR RR E A e e A RR RAR k k k k k k k k k k k k k k AAA A A A AAA Include A A ee ee ee A A Ee ee e ee e tt to tinclude fechadu h PA A A A A A e Declarac o de Vari veis Globais PAPA E OO OS SAO E A AA AA A unsigned char xdata PPI CONTROL unsigned char xdata DISPLAY unsigned char xdata DISPLAY EN unsigned char xdata KEYB apontadores para os endere os da PPI void init hardw void void init hardw void inicializa es TIMERO DISPLAY EN 0xE000 DISPLAY 0xE001 KEYB 0xE002 PPI CONTROL 0xE003 initializa o endere o da PPI XPPI CONTROL 0x88 palavra 4 Porta A B C_L gt sa das Porta C H gt entradas DISPLAY EN DISPLAY KEYB OXFF PPI a 1 timer0_init
46. r nextstate pr ximo estado do programa principal extern uchar disp bf NUM DISPLAYS buffer do display Dq pap E Ip RE Sp SRT A A E e Re E SR E SS op Prot tipos de Fun es SE EE void timer0 int void rotina de interrup o do timer0 void timer0 init void initializa o do timer0 deene NE to SE e E e E E E E E EH Fun es Rn nen S Sl RS EU PE O a a E A void timer0_int void interrupt 1 rotina de interrupc o do timer 1 uchar new key N inicializa a nova tecla trata do teclado if keyb ct 0 se o contador de interrup es j est a zero faz wr keyb buf key validate keyb scan key validate escreve o novo valor caso seja validado usando wr keyb bf keyb ct NUM KEYB DELAY re inicia o contador de interrup es else keyb_ct 43 trata do display en_disp 0 apaga os displays disp_actual incrementa o valor do display actual if disp_actual NUM_DISPLAYS 1 disp_actual 1 DISPLAY disp_bf disp_actual 1 escreve o novo valor en disp disp actual activa o novo display contador de tempo if timer0 ct gt 0 se ainda n o for 0 decrementa tiner ct led verde if led ct 0 se j for O faz if nextstate MODO UTILIZADOR ESP LEDVERD LEDVERD led ct PISCA LED CT re inicia contador else led ct se n o for O decrementa timer timer0 init reinicia o timerO void timer0_init void
47. rac o Neste modo o LED verde est sempre a piscar e est o dispon veis as seguintes op es 1 seguido de para teste dos leds Neste modo os 3 leds piscam alternadamente 2 seguido de para teste dos displays escrito em todos os displays sequencialmente v rios caracteres 3 seguido de para teste do teclado Neste teste sempre que se pressiona uma tecla o valor correspondente aparece escrito nos 3 displays 7 seguido de para alterar o c digo de utilizador Marcar c digo novo e novamente para altera o do c digo do utilizador 56 8 seguido de para alterar o c digo de supervisor Marcar c digo novo e novamente para altera o do c digo do supervisor 9 seguido de Permite reiniciar todos os c digos deixando os com o seu valor por defeito Em todos os estados excepto quando o sistema est bloqueado devido a um c digo errado poss vel marcar para cancelar os d gitos introduzidos ou sair para o estado anterior Existe tamb m um temporizador que limita o tempo m ximo para a introduc o de dados Caso o utilizador n o pressione nenhuma tecla durante 1 minuto o sistema automaticamente reenviado para o estado de espera 57 58
48. sticas O sistema nunca deve ficar bloqueado o tempo de resposta a uma instru o deve ser r pido a tecla deve funcionar em todo o programa como tecla de cancelamento correc o A tecla deve ser sempre a tecla de activa o da instru o Em todos os estados do programa principal deve existir um per odo m ximo para introdu o dos dados garantindo que ao fim de x tempo desde que se pressionou a ltima tecla o sistema volta ao estado de espera Todas as condi es de transi o de estado devem estar explicitamente declaradas sendo estas as nicas que podem levar as transi es a acontecerem A implementa o de todas estas caracter sticas em todos os estados do sistema tornou um c digo simples num bastante complicado e de dif cil leitura interpreta o Criou se tamb m um fluxograma contendo todos os estados e respectivas condi es de transi o 22 Tempo Recebe 1 d gito Recebe 2 Estado d gito Recebe C digo Recebe 3 d gito C digo c d uti lizador especial 2 C digo c d no rmal Estado C digo certo de digitac o ao got ado Modo de utilizador especial 23 Implementaram se cada um dos estados tendo em conta as suas condi es particulares O mais complicado foi o estado de utilizador especial que contem v rios sub estados Esta estrutura permite uma an lise e tratamento
Download Pdf Manuals
Related Search
Related Contents
Philips ND 7600/58 User's Manual Attenzione! - Edilportale Descarga RBC411 - Pdfstream.manualsonline.com MANUEL D`INSTRUCTIONS & PIÈCES Integra DTR-5.1 Stereo Receiver User Manual Copyright © All rights reserved.
Failed to retrieve file