Como projeto final da disciplina de laboratórios de microprocessadores resolvemos investigar dois tópicos: economia de energia e memória não-volátil. Para juntar estes dois tópicos em uma única aplicação decidimos implementar a simulação de um sistema de controle de pedágio.
Em rodovias movimentadas, as praças de pedágio se tornam gargalos para o tráfico. Para minimizar esse problema algumas rodovias possuem em suas praças de pedágio "faixas rápidas". Nessas faixas, o motorista não precisa parar para pagar o pedágio. Ele passa em velocidade normal pelo pedágio, quando um leitor, por rádio, identifica um cartão pré-pago fixado em seu para-brisa, e desconta do saldo a tarifa a ser paga.
2.1 Proposta de aplicaçãoBaseado neste caso real baseamos a nossa proposta. Desenvolveremos um sistema que receba uma entrada (a identificação do cartão em um caso real) e que guarde esta informação em uma memória não-volátil. E que também seja possível mais tarde visualizar quais os dados foram guardados(num caso real, quais os cartões que passaram pelo pedágio).
2.2 Requisitos da aplicaçãoA aplicação deve:
A aplicação é constituída de três módulos: encapsulamento das ações de acesso à memória não-volátil, aquisição de dados e recuperação de dados.
Nossa aplicação será implementada para o microcontrolador AVR at90s8515 pois oferece os recursos necessários dados os requisitos da aplicação e pela familiariade com a plataforma por parte dos autores. Utilizaremos para programação a linguagem assembly, C/C++.
3.1 Módulo para encapsulamento das ações de acesso à memória não-volátilO hardware que oferece a memória não-volátil é uma memória EEPROM(electrically erasable programmable read-only memory). É um tipo de PROM que pode ser apagada ao ser exposta a cargas elétricas e, diferentemente de outros tipos de PROM, mantém seu conteúdo mesmo quando a força é desligada.
Esta memória, para a placa escolhida, é controlada pelos registradores:
Para a leitura deve-se:
Para a leitura deve-se:
Devido a detalhes de operação, partes críticas de escrita/leitura da EEPROM teve que ser escrita em assembly. Por exemplo, quando setamos EEMWE e logo em seguida temos que setar EEWE. Ou no caso que devemos fazer o polling para esperar que EEWE seja 0.
3.2 Funcionamento geral e economia de energiaA aplicação se mantém em estado de dormência, pondo o processador em um estado IDLE, até que seja interrompida por INT0 e INT1. Estas interrupções fazem o processador voltar a sua operação normal. INT1 leva o sistema a permitir a leitura ou exclusão de dados armazenados na EEPROM. INT0 aciona a parte do sistema responsável por adquirir e guardar os dados. Após executadas essas funções volta a por o procesador em estado IDLE esperando por outra interrupção, formando assim um ciclo infinito.
3.3 Módulo para aquisição de dadosEsta rotina é invocada pela interrupção INT0. Primeiro o processador é reativado, é lido o dado do teclado, gravado na EEPROM e então o processador é posto novamente em estado IDLE.
3.4 Módulo para recuperação de dadosEsta rotina é invocada pela interrupção INT1. Como no caso anterior, também é necessário reativar o processador. Então é definida, através da leitura do teclado qual operação será executada: apagar toda EEPROM ou mostrar os registros seqüencialmente, um a um, a cada requisição.
3.5 Interação do usuário com o sistemaO usuário interage com o sistema através dos botões e obtém respostas através dos leds. Quando a interrupção INT0 é selecionada através do botão 2 os primeiros quatros leds são acessos indicando que a aplicação entrou no módulo de aquisição de dados. O usuário deve então entrar com os dados e pressionar o botão 0 para encerrar a leitura. Todos os leds acenderão para indicar que o processador será desligado.
Quando o botão 3 é acionado e a interrupção INT1 é acionado o sistema entra no modo de recuperação de dados. Pressionando 0 o próximo dado é lido da EEPROM e mostrado nos leds. Pressionando os dois últimos botões toda a EEPROM é apagada. Os dois primeiros botões para inicializar a EEPROM e todos os quatros para sair.
3.6 Código fonteO código da fonte está disponível sob a GPL.
4 ConclusãoDe tudo que nós especificamos, a única coisa que não foi implementada foi a aquisição de dados através do sensor. Para suprir essa deficiência, nós emulamos o acionamento do sensor através dos botões do kit.
No caso de um projeto real, consideramos a escolha do microcontrolador errada, pois apesar de ele fazer tudo o pretendido, possui mémoria insuficiente para esta aplicação.