Universidade de São Paulo Escola de - OpenCore
Transcrição
Universidade de São Paulo Escola de - OpenCore
Universidade de São Paulo Escola de Engenharia de São Carlos SEL0373 - Projeto de Sistemas Digitais Olimex Sam7-Ex256 Daniel Vicentini Guimarães 5911120 Marcelo Tomasini 5911180 São Carlos – SP 2010 Daniel Vicentini Guimarães Marcelo Tomasini Olimex Sam7-Ex256 Monografia realizada para a disciplina SEL0373 - Projeto de Sistemas Digitais ministrado pelo professor Evandro Luís Linhari Rodrigues do departamento de Engenharia Elétrica e Computação – SEL – da USP São Carlos. São Carlos – SP 2010 AGRADECIMENTOS Agradecemos ao Professor Evandro Luís Linhari Rodrigues pelas suadas tardes de quarta-feira do primeiro semestre de 2010 em que tivemos a oportunidade de nos aprofundar em assuntos tão cotidianos e importantes para nossa formação profissional. Agradecemos também ao técnico de laboratório Petrucio Gonçalves da Silva por nos ajudar nos tempos que ficamos fora do horário de aula no laboratório. “Não vale a pena começar aquilo que não se deseja perseguir até o fim”. H F Amiel RESUMO Esta monografia aborda o tema desenvolvido na prática laboratorial da disciplina SEL0373 – Projeto de Sistemas Digitais. Nela desenvolver-se-á uma descrição da placa de desenvolvimento, uma explanação da IDE Eclipse e suas configurações iniciais, o funcionamento das linhas de entradas e saídas paralelas (PIO) do microcontrolador, explicação do protocolo SPI de comunicação e modo de funcionamento do transceiver nRF24L01, responsável pela comunicação via rádio freqüência (RF) . Palavras-chaves: Kit Olimex, ARM, Eclipse IDE, SPI, Serial Peripheral Interface, nRF24L01, RF Índice de Figuras Figura 1 – Kit de Desenvolvimento ............................................................................................... 2 Figura 2 - Ambiente de desenvolvimento integrado Eclipse ........................................................ 5 Figura 3 – Modem ADSL da NetGear com conector JTAG no item número 5 .............................. 7 Figura 4 – Firewall da NetGear com conector para JTAG no canto inferior esquerdo ................. 8 Figura 5– Menu de depuração no chip ......................................................................................... 9 Figura 6 – Configuração do External Tools. ................................................................................... 9 Figura 7 – Menu OpenOCD do tipo Tiny. .................................................................................... 10 Figura 8 – JTAG para selecionar sem nomeclatura ..................................................................... 10 Figura 9 – Menu de Depuração ................................................................................................... 11 Figura 10 – Configuração de Depurador, aba main .................................................................... 11 Figura 11 – Configuração de Depurador, aba Debugger ............................................................. 12 Figura 12 – Configuração de Depurador, aba Commands .......................................................... 13 Figura 13 – Multi-escravos interconexão típica ......................................................................... 16 Figura 14 – Multi-escravos com interconxão Daisy-Chain .......................................................... 17 Figura 15 – Esquemático de transmissão dados por SPI ............................................................. 18 Figura 16 – Esquemático de transmissão de dados por SPI para cada ciclo de CLK. .................. 18 Figura 17 – Tipos de sincronismo da comunicação SPI ............................................................... 19 Figura 18 – Ligação conector SD com microcontrolador usando SPI .......................................... 20 Figura 19 – Ligação do periférico LCD com microcontrolado usando SPI ................................... 20 Figura 20 – Ligação do conector para ligação externa com protocolo SPI ................................. 21 Figura 21 - Registrador de Controle ............................................................................................ 22 Figura 22 - Registrador de Modo ................................................................................................ 23 Figura 23 - Registrador de Dados Recebidos............................................................................... 24 Figura 24 - Registrador de Dados Transmitidos .......................................................................... 24 Figura 25 - Registrador de Estado ............................................................................................... 25 Figura 26 - Registrador de Seleção de Chip................................................................................. 27 Figura 27 – Delays programáveis ................................................................................................ 29 Figura 28 – Mecanismo de operação no modo mestre. ............................................................. 29 Figura 29 – Fluxograma do mecanismo SPI no modo Master..................................................... 30 Figura 30– Rádio.......................................................................................................................... 31 Figura 31– Esquemático do Rádio ............................................................................................... 32 Figura 32 – nRF24L01 em uma rede estrela................................................................................ 35 Figura 33 – Cronograma .............................................................................................................. 38 Índice de Tabelas Tabela 1 - Dispositivos Presentes no Kit........................................................................................ 3 Tabela 2 – Registradores mais Utilizados do Periférico PIO ....................................................... 14 Tabela 3 – Associação entre pinos e bits dos registradores de PIO ............................................ 15 Tabela 4 - Registradores SPI ........................................................................................................ 21 Tabela 5 - Configuração do Tamanho da Palavra........................................................................ 27 Tabela 6 – Principais Modos do nRF24L01 .................................................................................. 33 Tabela 7 – Tabela de instruções para o nRF24L01 ...................................................................... 34 Sumário 1. 2. 3. INTRODUÇÃO ....................................................................................................................................... 1 1.1. Motivação ................................................................................................................................... 1 1.2. Objetivos ..................................................................................................................................... 1 Kit de Desenvolvimento ....................................................................................................................... 2 2.1. Componentes do Kit ................................................................................................................... 2 2.2. Características básicas do microcontrolador AT91SAM7X256 ................................................... 3 ECLIPSE................................................................................................................................................. 5 3.1. OpenOCD .................................................................................................................................... 6 3.2. Configurações do OpenOCD – On chip debugger. ...................................................................... 8 3.2.1. Configurar o External Tools do Eclipse ............................................................................... 8 3.2.2. Configuração da Depuração On Chip (OCD) ..................................................................... 11 4. PIO ..................................................................................................................................................... 14 5. SPI – Serial Peripheral Interface Bus .................................................................................................. 16 6. 7. 5.1. SPI no kit .................................................................................................................................. 19 5.2. Registradores ............................................................................................................................ 21 5.2.1. Control Register ............................................................................................................... 22 5.2.2. Mode Register .................................................................................................................. 23 5.2.3. Receive Data Register ...................................................................................................... 24 5.2.4. SPI Transmit Data Register .............................................................................................. 24 5.2.5. Status Register .................................................................................................................. 25 5.2.6. Chip Select Register[0 .. 3] .............................................................................................. 27 Comunicação Via Rádio Frequência................................................................................................... 31 6.1. Transmissão .............................................................................................................................. 35 6.2. Recepção ................................................................................................................................... 36 Projeto ............................................................................................................................................... 37 7.1. Evolução .................................................................................................................................... 38 7.2. Implementações ....................................................................................................................... 39 7.2.1. Implementação da Serial .................................................................................................. 39 7.2.2. Implementação do LCD: ................................................................................................... 40 7.2.3. Implementação do SPI: .................................................................................................... 40 7.2.4. Configuração dos Registradores do Módulo nRF24L01. .................................................. 41 7.3. Próximos passos ........................................................................................................................ 41 8. Conclusão........................................................................................................................................... 42 9. Bibliografia ......................................................................................................................................... 43 1. INTRODUÇÃO 1.1. Motivação Com a evolução da tecnologia, cada vez mais é exigido processamento de informação. São celulares que tiram foto, filmam e conectam a internet, vídeo-games portáteis com imagens de alta resolução, calculadoras científicas capazes de solucionar sistemas não lineares. Para todas essas aplicações o ARM pode ser uma solução. Juntamente com tal progresso é notória a preferência da população por aparelhos sem fio, como fones de ouvido bluetooth, redes wireless e internet 3G. Uma das tecnologias que pode ser aplicada ao desenvolvimento de equipamentos sem fio de curto alcance é a comunicação via rádio frequência. Associando a potência de processamento e o baixo consumo fornecido pelo microcontrolador ARM7, juntamente com a mobilidade, disponibilizada pela comunicação RF, é possível a construção de poderosos dispositivos de envio de informação ou até mesmo controle de processos. 1.2. Objetivos Fornecer aos leitores base para o entendimento de algumas estruturas da placa de desenvolvimento. Mostrar como deve ser configurada a IDE Eclipse para realizar o processo transferência do programa para o ARM além do OCD. Passar o conhecimento adiquirido a respeito da comunicação SPI e de como essa faz a ponte entre as informações que o microcontrolador deseja enviar via rádio com o transceiver nRF24L01. Apresentar as maiores dificuldades encontradas no desenrolar do projeto, além de sugerir como os alunos que forem cursar posteriormente a matéria Projetos de Sistemas Digitais devem proceder ao chegar na etapa onde essa monografia termina. 1 2. Kit de Desenvolvimento O kit de desenvolvimento fornecido à dupla para a realização do projeto proposto trata-se de uma placa de desenvolvimento para microcontroladores AT91SAM7X256 ARM7TDMI-S, chamada SAM7-EX256. 2.1. Componentes do Kit Microcontrolador AT91SAM7X256; Conector JTAG; Display de LCD colorido Nokia; Ethernet 10/100 PHY; Conector USB; Interface RS232 e drivers; Conector de cartão SD/MMC; Joystick de 4 direções com botão; 2 botões; Conectores de entrada e de saída de áudio para microfone e fones de ouvido; Speaker com controle de volume por potenciômetro; Timpot conectado a um CAD; Termistor conectado a um CAD; Alimentação de 6V; LED de alimentação; Circuito de reset e Cristal de 18,432Mhz. Na figura 1 é apresentado o kit e alguns módulos relevantes do mesmo. Figura 1 – Kit de Desenvolvimento 2 Tabela 1 - Dispositivos Presentes no Kit Número 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Dispositivo Ethernet RS232 Rede CAN Conector para fones de ouvido Conector para microfone Speaker Conector de cartão Sensor de temperatura Controle de volume Trimpot ligado ao CAD Display LCD Joystick e botões LED de ligado Alimentação USB JTAG Cristal Microcontrolador ARM Conector externo (rádio) Conector externo 2.2. Características básicas do microcontrolador AT91SAM7X256 O microcontrolador possui as seguintes características: 256K de memória flash (simple plane) com capacidade de bloqueio de setor e bit de segurança. Esses 256K são organizados em 1024 páginas de 256 bytes; 64K de SRAM; Controlador de memória; Controlador de reset; Controlador de gerenciamento de energia; Controlador de interrupção Dois controladores de entrada e saída paralelas, Controlador serial síncrono; Gerador de clock. Um oscilador RC de baixa-potência, um oscilador interno de 3 a 20Mhz e um PLL(Phase lock loop); Unidade de Debug; Periodic Interval Timer ; Watchdog Timer; Real-time Timer; Treze canais do controlador do DMA 802.3 Ethernet MAC 10/100 base-T; Porta USB 2.0 (12Mbits por segundo); Controlador de CAN 2.0A e 2.0B; 3 Transmissor e receptor universal síncrono e assíncrono (USART); Duas Interfaces seriais mestre/escravo (SPI); Timer/counter de 3 canais de 16-bits; Controlador de Pulse Width Modulation (PWM) de 4 canais de 16-bits; Two-wire Interface (I2C); Conversor Analógico Digital de 8 canais de 10 bits, 4 dos canais multiplexados com entradas digitais; SAM-BA (Boot Assistance); IEEE 1149.1 JTAG em todos os pinos digitais; Entradas e saídas com tolerância de 5V, incluindo 4 linhas de entra e saída de alta-corrente, até 16mA cada; Fonte de alimentação; Até 55Mhz a 1.65V e 85°C nas condições de pior caso; É baseado no processador RISC ARM7TDMI de 32-bits, possui arquitetura Von Neumann com três estágios de pipeline: Fetch, Decode e Execute. Possui um conjunto de instruções 32-bits de alto-desempenho e um de 16-bits de código de alta-densidade (Thumb), este último é um subconjunto do primeiro, e apesar de comprimido em 16-bits, possibilita a execução das mesmas funções do conjunto de 32-bits. 4 3. ECLIPSE A plataforma Eclipse de desenvolvimento de software, figura 2, foi produzida pela IBM no ano de 2001. A empresa forneceu 40 milhões de dólares, aproximadamente, e a divulgou para comunidade como um software livre. Produzida em Java, hoje apresenta interfaces para várias linguagens de programação e é a IDE Java mais utilizada no mundo. Figura 2 - Ambiente de desenvolvimento integrado Eclipse Em 2004, fundou-se a organização Eclipse - Eclipse Fundation - uma comunidade de desenvolvedores que ajudam no crescimento da plataforma. Sendo uma IDE, Integrated Development Enviroment, ou Ambiente de Desenvolvimento Integrado, a plataforma apresenta alguns blocos funcionais que vale ressaltar: Editor - edita o código-fonte do programa escrito na(s) linguagem(ns) suportada(s) pela IDE; Compilador (compiler) - compila o código-fonte do programa, editado em uma linguagem específica e a transforma em linguagem de máquina; 5 Linker - liga (linka) os vários "pedaços" de código-fonte, compilados em linguagem de máquina, em um programa executável que pode ser executado em um computador ou outro dispositivo computacional. Depurador (debugger) - auxilia no processo de encontrar e corrigir defeitos no código-fonte do programa, na tentativa de aprimorar a qualidade de software; Modelagem (modelling) - criação do modelo de classes, objetos, interfaces, associações e interações dos artefatos envolvidos no software com o objetivo de solucionar as necessidades-alvo do software final. Geração de código - característica mais explorada em Ferramentas CASE, a geração de código também é encontrada em IDEs, contudo com um escopo mais direcionado a templates de código comumente utilizados para solucionar problemas rotineiros. Todavia, em conjunto com ferramentas de modelagem, a geração pode gerar todo ou praticamente todo o código-fonte do programa com base no modelo proposto, tornando muito mais rápido o processo de desenvolvimento e distribuição do software; Distribuição (deploy) - auxilia no processo de criação do instalador do software, ou outra forma de distribuição, seja discos ou via internet. Testes Automatizados (automated tests) - realiza testes no software de forma automatizada, com base em scripts ou programas de testes previamente especificados, gerando um relatório, assim auxiliando na análise do impacto das alterações no código-fonte. Ferramentas deste tipo mais comuns no mercado são chamadas robôs de testes. Refatoração (refactoring) - consiste na melhoria constante do código-fonte do software, seja na construção de código mais otimizado, mais limpo e/ou com melhor entendimento pelos envolvidos no desenvolvimento do software. A refatoração, em conjunto com os testes automatizados, é uma poderosa ferramenta no processo de erradicação de "bugs", tendo em vista que os testes "garantem" o mesmo comportamento externo do software ou da característica sendo reconstruída Para testar o código, editava-se, compilava-se, e depurava-se o programa. No caso laboratorial, a depuração do programa era feita on-chip, ou seja, o software era testado dentro do microcontrolador, dessa forma era realizada uma emulação, o código programado era executado no próprio chip, para que dessa forma fossem obtidas as respostas enviadas pelo mesmo. 3.1. OpenOCD O OpenOCD – Open On Chip Debugger – foi criado por Dominic Rath em sua tese na Universidade de Ciências Aplicaveis de Ausburgo. Nela desenvolve um trabalho de como depurar o código diretamente no chip. Seu trabalho é diferenciado, pois se trata de um código aberto. 6 Para usar desse artifício necessita-se de um hardware intermediador para fazer a comunicação e um software que suporta tal depuração. Na prática laboratorial aqui descrita, utilizou-se o hardware JTAG, figura 7, e o software IDE Eclipse. O JTAG, Standard Test Access Port and Boundary-Scan Architecture, inicialmente foi criado por um grupo da indústria, formado por Harry Wardrop em 1985, que testava circuitos impressos e funcionamento de blocos de circuitos integrados. Depois de alguns anos, em 1990, foi normalizado pelo IEEE (norma IEEE 1149.1). No mesmo ano a Intel produziu um processador com JTAG – processador 80486 - o que fez com que seu uso e produção aumentassem. Com isso, esse hardware foi se desenvolvendo até chegar ao que se tem hoje. Vê-se na figura 3 e na figura 4 que em alguns dispositivos comerciais como modens e firewalls já contém na própria placa um conector para JTAG. Figura 3 – Modem ADSL da NetGear com conector JTAG no item número 5 7 Figura 4 – Firewall da NetGear com conector para JTAG no canto inferior esquerdo O IDE Eclipse é uma interface que suporta esse tipo de depuração. Para isso é necessário instalar alguns pacotes e após isso necessita configurá-los. A Olimex, juntamente com sua placa, fornece um CD com a instalação de drivers para o Windows e juntamente pode-se instalar o IDE Eclipse já com os pacotes de OCD. Nela se usa o OpenOCD. As configurações para o OCD são descritas passo a passo a seguir. 3.2. Configurações do OpenOCD – On chip debugger. Vale lembrar que a instalação não é trivial e para instalar o suporte, é interessante que o usuário saiba o básico sobre os assuntos OCD e Eclipse citados acima. 3.2.1. Configurar o External Tools do Eclipse De acordo com a figura 5, deve-se clicar no ícone indicado e entrar no menu “External Tools Configuration”. Caso esse menu não esteja aparecendo deve-se instalar o pacote de suporte para o OpenOCD. 8 Figura 5– Menu de depuração no chip Dentro do menu “External Tools Configurations” deve-se configurá-lo de acordo com a figurax. Figura 6 – Configuração do External Tools. 9 Primeiramente deve-se saber qual o tipo de JTAG que se está trabalhando. No caso do laboratório havia dois modelos para se trabalhar, JTAG e JTAG tiny. No menu de configuração deve-se ficar atento para a seleção do JTAG correto. Seleciona-se OpenOCD Tiny – figura 7 - ou OpenOCD – figura 8 - na parte esquerda da janela de configuração do External Tools. Figura 7 – Menu OpenOCD do tipo Tiny. Figura 8 – JTAG para selecionar sem nomeclatura Feito isso, deve-se realizar mais três tarefas nessa mesma janela: (A) Escolher o programa para comunicação externa (“Location”) (B) Escolher o diretório de trabalho (“Working Directory”) (C) Escolher o arquivo de configurações para o JTAG (*.cfg) Essas três ações foram realizadas na figura 6. Vale ressaltar novamente que deve-se tomar cuidado com a seleção do tipo do JTAG, se Tiny ou não. 10 3.2.2. Configuração da Depuração On Chip (OCD) Para configurar a depuração On Chip deve-se clicar no ícone mostrado na figura 9 e selecionar a opção Debug Configuration Figura 9 – Menu de Depuração Dentro do menu de configuração, seleciona-se a opção Zylin Embedded debug (Native) no lado esquerdo da janela. Há três abas importantes para a configuração (i) Main, figura 10: Figura 10 – Configuração de Depurador, aba main 11 (A) Cria-se o nome da depuração – “name”; (B) O nome do Projeto – “Project”; (C) E o objeto de saída como “main.out”. Nas três configurações é importante ressaltar que o nome “main.out” é o único que não ser escolhido aleatóriamente. Deve mantê-lo. (ii) Debbuger, figura 11: Figura 11 – Configuração de Depurador, aba Debugger (A) Seleciona-se o executável de depuração (“arm-gdb-elf.exe”) no campo GDB debugger; (B) Limpa-se o campo GDB comand file; 12 (iii) Commands, figurax: Figura 12 – Configuração de Depurador, aba Commands Os commandos que devem ser digitados têm as seguintes funções: target remote localhost:3333 Configuração para debug utilizar host e portas corretas monitor reset init Reseta algumas configurações monitor arm7_9 force_hw_bkpts enable Habilita breakpoints de hardware symbol-file main.out Define main.out como arquivo para ser depurado monitor soft_reset_halt Reset do hardware thbreak main Insere breakpoint em main continue Continua execução do programa 13 4. PIO O microcontrolador utilizado possui dois periféricos denominados PIOA (Parallel I/O Controller A) e PIOB(Parallel I/O Controller B). Tais entradas e saídas paralelas totalizam 62 linhas, sendo essas nomeadas de PA0 até PA30 e de PB0 até PB30. As linhas paralelas são extremamente úteis quando o programador deseja fazer o controle manual de algum periférico não implementado em hardware no ARM. Como exemplo tem-se o joystick presente no kit, que está conectado a linhas portas do microcontrolador e tais linhas devem ser programadas como entradas, para que, dessa forma, seja possível realizar a leitura do nível de tensão presente nessas. Os registradores mais utilizados são apresentados na tabela 2. Tabela 2 – Registradores mais Utilizados do Periférico PIO PIO_PER PIO_PDR PIO_OER PIO_ODR PIO_SODR PIO_CODR Habilita a linha como PIO Desabilita a linha como PIO Habilita a linha como saída Desabilita a linha como saída Coloca a saída em nível alto Coloca a saída em nível baixo Tais registradores são facilmente localizados ao realizar uma pesquisa na biblioteca nomeada “AT91SAM7X256.h”. Para saber com qual periférico trabalhar, além de quais bits de seus registradores devem ser modificados, primeiramente deve-se verificar no esquemático quais linhas estão ligadas ao dispositivo a ser manuseado e se tais são entradas ou saídas. 14 As associações entre pinos do microcontrolador e bits dos registradores de PIOA e PIOB estão presentes na tabela 3. Tabela 3 – Associação entre pinos e bits dos registradores de PIO O seguinte exemplo de códio configura o bit 21 como saída em nível alto. pPIOA->PIO_PER = BIT21; //Habilita o pino 21 como PIO. pPIOA->PIO_SODR = BIT21; //Coloca sua saída em nível alto. pPIOA->PIO_OER = BIT21; //Habilita esse mesmo pino como saída. A estrutura “pPIOA->” trata-se de um ponteiro que contém o endereço dos registradores de configuração do periférico PIOA. Caso fosse necessário, a configuração do periférico PIOB, seria utilizada a estrutura “pPIOB->”. As definições desses ponteiros encontram-se no arquivo “common_definitions.h”, assim como a máscara “BIT21”. 15 5. SPI – Serial Peripheral Interface Bus O protocolo de comunicação SPI foi criado pela Motorola para a família de processadores MC68K. É um protocolo síncrono, Full Duplex com 4 sinais: MOSI (Master Output), MISO (Master Input), CLK (Clock), CS (Chip Select). Seu funcionamento decorre de um sistema mestre-escravo (master-slave). É denominado mestre aquele que gera o CLK para o sincronismo da transmissão e que opera o CS para selecionar um dos periféricos, denominados escravos, para a recepção dos dados. O sistema permite somente um mestre enquanto dá a possibilidade de conexão a vários escravos. Entre as topologias tem-se a típica, figura 13, e a chamada Daisy-Chain, figura 14. Figura 13 – Multi-escravos interconexão típica 16 Figura 14 – Multi-escravos com interconxão Daisy-Chain No esquemático da figura 13, na topologia típica, o mestre faz a demultiplexação entre os escravos e manda a informação diretamente ao escolhido. A figura 14, topologia Daisy-Chain, diferencia-se da típica por apresentar uma comunicação em anel em que todos os escravos operam juntos e informação passa por todos os escravos, um por vez. A comunicação é feita da seguinte forma: 1. 2. 3. Mestre faz sinal CS ir a nível lógico baixo Mestre gera sinal de clock para sincronismo da transmissão Palavra de dados é transmitida pelo MOSI no sentido mestre-escravo e o mestre recebe palavra pelo MISO no sentido escravo-mestre no mesmo tempo. 17 Na figura 15 e na figura 16 mostra-se o processo de transmissão de dados. Figura 15 – Esquemático de transmissão dados por SPI Figura 16 – Esquemático de transmissão de dados por SPI para cada ciclo de CLK. Na figura 15 viu-se que a cada ciclo de CLK o mestre envia um bit e recebe outro no mesmo tempo. Para o sincronismo da transmissão, leva-se em consideração a polaridade do CLK (se seu estado inicial, antes da primeira transição, é nível lógico alto ou baixo) e a 18 fase da palavra (se é transmitida na subida ou na descida de CLK). A Freescale nomeou a polaridade como CPOL e a fase como CPHA, nomes que hoje se tornaram padrão. A figura 17 mostra os quatro tipos possíveis de configuração do sincronismo de envio da mensagem: CPOL=0 e CPHA=0, CPOL=0 e CPHA=1, CPOL=1 e CPHA=0 ou CPOL=1 e CPHA=1. Figura 17 – Tipos de sincronismo da comunicação SPI Para finalizar, ainda vale ressaltar algumas características: Maior Taxa de Transferência que I²C ou SMBus: enquando o I²C típico opera com 400kbps o SPI pode chegar 70MHz; Simplicidade na interface de hardware; Comunicação possui mais pinos que o I²C; Não tem protocolo definido para checagem de erro (embora podese criar este não é padrão); Protocolo para curtas distância comparado com RS232,RS485 e CAN-BUS. 5.1. SPI no kit Toda comunicação SPI pode ser implementada pelo programador, mas o microcontrolador possui com ele dois periféricos SPI, o SPI0 e o SPI1. Basta configurar os registradores do periférico da forma desejada para que as normas definidas pelo protocolo SPI sejam realizadas pelo ARM7. Na placa existem periféricos que estão ligados como escravos ao microcontrolador. São eles o conector de cartão SD (figura 18), LCD (figura 19) e uma saída externa (figura 20). O LCD possui os pinos de CLK0, CS0 e MOSI0, o SD possui CLK0, CS0, MOSI0 e MISO0 e o conector externo CLK1, CS1, MOSI1 e MISO1, pinos esses 19 associados ao SPI. Nota-se que tanto o LCD quanto o conector de cartão SD usa o mesmo periférico SPI do microprocessador (SPI0) utilizando a topologia típica, figura 13, referente ao SPI. Outro ponto que valer ressaltar é a ausência da ligação do pino MISO do LCD dado que este não troca informação no sentido escravo-mestre. Figura 18 – Ligação conector SD com microcontrolador usando SPI Figura 19 – Ligação do periférico LCD com microcontrolado usando SPI 20 Figura 20 – Ligação do conector para ligação externa com protocolo SPI 5.2. Registradores Na tabela 4 encontra-se o conjunto de registradores para se configurar o periférico SPI do microprocessador. Tabela 4 - Registradores SPI 21 Nesta seção encontram-se detalhados os registradores Control Register, Mode Register, Receive Data Register, Transmit Data Register, Status Register e Chip Select Register [0 .. 3]. 5.2.1. Control Register Figura 21 - Registrador de Controle SPIEN: SPI Enable 0 = Sem efeito 1 = Habilita SPI para enviar e receber dados. SPIDIS: SPI Disable 0 = Sem efeito. 1 = Desabilita o SPI. SWRST: SPI Software Reset 0 = Sem efeito. 1 = Reseta o SPI. LASTXFER: Last Transfer 0 = Sem efeito. 1 = O chip select em uso vai para condição inicial depois da transferência 22 5.2.2. Mode Register Figura 22 - Registrador de Modo MSTR: Master/Slave Mode 0 = Seta o SPI no modo slave. 1 = Seta o SPI no modo master. PS: Peripheral Select 0 = Comunicação com somente um periférico SPI. 1 = Comunicação com vários periféricos SPI. PCSDEC: Chip Select Decode 0 = O CS está diretamente ligado ao periférico master. 1 = Se os pinos de CS estão ligados em um multiplexador para seleção de periféricos. Nesse modo pode-se escolher até 15 periféricos para se comunicar com o controlador. MODFDIS: Mode Fault Detection 0 = Detector de ausência de SPI habilitado 1 = Detector de ausência de SPI desabilitado. LLB: Local Loopback Enable 0 = Realimentação local desabilitada. 1 = Realimentação local habilitada. É feito uma ligação interna entre o MOSI e o MISO para testes de envio e recepção de dados. PCS: Peripheral Chip Select Esse resgistrador só será abordado se PS = 0. Se PCSDEC = 0: PCS = xxx0 NPCS[3:0] = 1110 PCS = xx01 NPCS[3:0] = 1101 PCS = x011 NPCS[3:0] = 1011 PCS = 0111 NPCS[3:0] = 0111 PCS = 1111 não permitido (nenhum periférico é selecionado) (x = irrelevante) 23 Se PCSDEC = 1: NPCS[3:0] = PCS. DLYBCS:Delay Between Chip Selects Esse registrador define a diferença de tempo entre a desativação de um CS e a ativação de outro. Se esse valor for setado menor ou igual a seis DLYBCS é setado como seis em padrão. Por outro lado tem-se a relação: DLYBCS 𝐃𝐞𝐥𝐚𝐲 𝐁𝐞𝐭𝐰𝐞𝐞𝐧 𝐂𝐡𝐢𝐩 𝐒𝐞𝐥𝐞𝐜𝐭𝐬 = 𝑀𝐶𝐾 5.2.3. Receive Data Register Figura 23 - Registrador de Dados Recebidos RD: Receive Data Dados recebidos pelo SPI são armazenados nesses registradores. Bits que não são usados são setados como zero. PCS: Peripheral Chip Select No modo mestre esses bits ganham o valor dos pinos de NPCS no valor da última transmissão. Caso contrário esses bits lêem zero. 5.2.4. SPI Transmit Data Register Figura 24 - Registrador de Dados Transmitidos 24 TD: Dado a ser transmitido é armazenado nesse registrador. PCS: Peripheral Chip Select Esse campo só é utilizado se PS = 1. Se PCSDEC = 0: PCS = xxx0 NPCS[3:0] = 1110 PCS = xx01 NPCS[3:0] = 1101 PCS = x011 NPCS[3:0] = 1011 PCS = 0111 NPCS[3:0] = 0111 PCS = 1111 estado não permitido (nenhum periférico é selecionado) (x = irrelevante) Se PCSDEC = 1: NPCS[3:0] output signals = PCS 5.2.5. Status Register Figura 25 - Registrador de Estado RDRF: Receive Data Register Full 0 = Nenhum dado foi recebido depois da última leitura do SPI_RDR 1 = Dados foi recebido e foi transmitido para SPI_RDR. TDRE: Transmit Data Register Empty 0 = Dado foi recebido pelo TDR mas não foi enviado ainda. 1 = O ultimo dado transferido para o TDR foi enviado. TDRE igual a zero quando SPI está desbilitado ou resetado. O commando de abilitar o SPI seta o bit para um. MODF: Mode Fault Error 0 = Não detectado ausência de SPI desde última leitura do SPI_SR. 1 = Detectado ausência de SPI desde a última leitura do SPI_SR. 25 OVRES: Overrun Error Status 0 = Nenhum “overrun” detectado desde a última leitura de SPI_SR. 1 = “Overrun” detectado desde a última leitura de SPI_SR. Um “overrum” ocorre quando SPI_RDR é carregado ao menos duas vezes para o duto de dados desde a útlima leitura do SPI_RDR. ENDRX: End of RX buffer 0 = O registrador contador de recebimento não chegou a zero desde a última escrita em SPI_RCR(1) ou SPI_RNCR(1). 1 = O registrador contador de recebimento chegou a zero desde a última escrita em SPI_RCR(1) or SPI_RNCR(1). ENDTX: End of TX buffer 0 = O registrador contador de transmissão não chegou a zero desde a última escrita em SPI_RCR(1) ou SPI_RNCR(1). 1 = O registrador contador de transmissão chegou a zero desde a última escrita em SPI_RCR(1) ou SPI_RNCR(1). TXBUFE: TX Buffer Empty 0 = SPI_TCR(1) or SPI_TNCR(1) tem um valor diferente de 0. 1 = Both SPI_TCR(1) e SPI_TNCR(1) vale 0. NSSR: NSS Rising 0 = Nenhuma transição de subida de borda detectada no pino NSS desde última leitura. 1 = Subida de borda detectada no pino NSS desde última leitura. TXEMPTY: Transmission Registers Empty 0 = Assim que o dado é escrito no SPI_TDR. 1 = SPI_TDR e shift register interno está vazio. Se for setado delay para a transferência de dados, TXEMPTY é setado depois de completar esse delay. SPIENS: SPI Enable Status 0 = SPI está desabilitado. 1 = SPI é abilitado. 26 5.2.6. Chip Select Register[0 .. 3] Figura 26 - Registrador de Seleção de Chip CPOL: Clock Polarity 0 = SPCK inativo tem nível lógico baixo. 1 = SPCK inativo tem nível lógico alto. NCPHA: Clock Phase 0 = Dado é deslocado com a decida de borda do SPCK e enviado com a subida de borda do SPCK. 1 = Dado enviado com a decida de borda do SPCK e deslocado com a subida de borda do SPCK CSAAT: Chip Select Active After Transfer 0 = O CS ganha nível lógico alto logo depois da transferência. 1 = O CS não ganha nível lógico alto logo depois da transferência. BITS: Bits Per Transfer Seta o número de bits por transferêcica de acordo com a figuração da tabelax. Tabela 5 - Configuração do Tamanho da Palavra 27 SCBR: Serial Clock Baud Rate No modo mestre a interface SPI usa um módulo para derivar o CLK baud rate a partir do CLK do microcontrolador. Se escreve um valor de 1 a 255 no campo SCBR. Dessa forma tem-se o baud rate do CLK do SPI através da equação: SCBR 𝐒𝐏𝐂𝐊 𝐁𝐚𝐮𝐝𝐫𝐚𝐭𝐞 = 𝑀𝐶𝐾 A programação do campo SCBR em 0 é proibido. No reset, o SCBR é 0 e o usuario tem que program para um valor válido para realizar a sua primeira transferência. DLYBS: Delay Before SPCK Esse campo define o delay entre o CS e a primeira transição válida para o CLK do SPI. Quando DLYBS igual a zero, o CS valido é de 1/2 do período de clock. Caso contrario segue a equação 𝐃𝐞𝐥𝐚𝐲 𝐁𝐞𝐟𝐨𝐫𝐞 𝐒𝐏𝐂𝐊 = 𝐷𝐿𝑌𝐵𝑆 𝑀𝐶𝐾 DLYBCT: Delay Between Consecutive Transfers Esse campo define o delay entre duas transferecia consecutivas sem a remoção do CS. O delay sempre é colocado depois de uma transferência e antes de um chip select. Quando DLYBCT igual a zero, nenhum delay entre transferencias consecutivas é colocado e o clock continua o duty cycle sobre o bit de transferência.2 Caso contrario segue a equação: 𝐃𝐞𝐥𝐚𝐲 𝐁𝐞𝐭𝐰𝐞𝐞𝐧 𝐂𝐨𝐧𝐬𝐞𝐜𝐮𝐭𝐢𝐯𝐞 𝐓𝐫𝐚𝐧𝐬𝐟𝐞𝐫𝐬 = 𝐷𝐿𝑌32 × 𝐷𝐿𝑌𝐵𝐶𝑇𝐵𝑆 𝑀𝐶𝐾 Para melhor entendimento do sistema de dealays do CLK e do CS veja a figurax. 28 Figura 27 – Delays programáveis Como pode-se observar, a configuração do periférico SPI exige a programação de muitos registradores. A figura 28 mostra o funcionamento do periférico SPI, no modo mestre, e como esses registradores se relacionam com a comunicação. Figura 28 – Mecanismo de operação no modo mestre. 29 Da mesma forma, observa-se na figura 29 a lógica do mecanismo SPI no modo mestre. Figura 29 – Fluxograma do mecanismo SPI no modo Master 30 6. Comunicação Via Rádio Frequência O kit fabricado pela Olimex possui um conector que possibilita a comunicação do microcontrolador, presente no mesmo, com algum dispositivo externo. Foi adquirido um rádio, também produzido pela Olimex, capaz de executar comunicação via rádio frequência (RF). Tal rádio e seu conector podem ser visualizados na figura 30. Figura 30– Rádio 31 O esquemático da placa do rádio encontra-se na figura31. Figura 31– Esquemático do Rádio 32 Ao ser realizada uma análise do esquemático da placa em questão, fica evidente que o principal circuito presente nesta, é o módulo nRF24L01 daí a importância do estudo do mesmo. Tal módulo trata-se de um transciever, que se comunica com o microcontrolador utilizando o protocolo de comunicação SPI, com até 8MHz de frequência e com outro rádio utilizando rádio frequência. Quanto a comunicação RF, esta pode ser realizada com taxas de transferência de dados de até 2Mbits, além de possuir 125 canais e trabalhar na faixa de frequências de 2,4-2,5GHz. O nRF24L01 pode ser configurado nos principais modos, exibidos na tabela 6, dependendo em como estão suas entradas e saídas (recebendo ou enviado informações) e como estão configurados seus registradores. Tabela 6 – Principais Modos do nRF24L01 Antes que a comunicação RF possa ser realizada é necessário programar como o módulo nRF24L01 deve funcionar. Para realizar tal programação é necessário gravar, via SPI, valores nos registradores que o módulo possui. Os comandos que podem ser utilizados estão apresentados na tabela 7. Toda vez que CSN (chip select) estiver baixo a interface espera uma nova instrução e toda nova instrução deve ser começada por uma transição em CSN de alto para baixo. 33 Tabela 7 – Tabela de instruções para o nRF24L01 O conteúdo do registrador de estado é colocado no MISO toda vez que ocorre uma transição de alto para baixo em CSN. A comunicação RF é feita em um modo denominado “Enhanced ShockBurstTM” para transmissão e para recepção. Cada módulo possui um endereço para transmissão, porém pode utilizar até seis data pipes para recepção de informação, como é mostrado na figura 32, sendo possível dessa forma receber informações de até seis diferentes rádios e armazenando-as isoladamente, para então manuseá-las da forma desejada. 34 Figura 32 – nRF24L01 em uma rede estrela 6.1. Transmissão Quando deseja-se realizar uma transmissão, primeiramente o bit de configuração PRIM_RX precisa estar em nível lógico baixo. No momento em que a aplicação do microcontrolador possuir dados para enviar, o endereço destino e os dados a serem enviados devem ser pulsados no nRF24L01 via interface SPI. Caso ocorra a necessidade de enviar mais dados ao mesmo endereço, esse não precisa ser reenviado. Como o dispositivo de transmissão precisa receber o ACK, o data pipe 0 deve ser configurado para recebê-lo, para tanto, o endereço deste deve ser o mesmo utilizado na transmissão. Um pulso para nível alto em CE inicia a transmissão, esse pulso deve durar no mínimo 10us. 35 Se a função auto-ACK estiver habilitada (ENAA_P0=1), ao realizar uma transmissão o rádio passa imediatamente para o modo RX e se um pacote válido é recebido dentro da janela de tempo programada, a transmissão então foi bem sucedida. Então o bit TX_DS é coloca em nível lógico alto, mostrando que os dados já foram removidos de TX FIFO. Se um ACK válido não é recebido dentro dessa janela de tempo, os dados são reenviados, desde que a opção de auto-retransmissão tenha sido habilitada. Caso o número máximo de tentativas seja alcançado, o bit MAX_RT do registrador de status é setado e os dados não são removidos de TX FIFO. O pino de interrupção IRQ é ativado quando MAX_RT ou TX_DS são colocados em nível lógico alto. Se o número máximo de tentativas de transmissão é atingido, então uma nova transmissão não pode ser efetuada até que a interrupção MAX_RX seja zerada. O dispositivo vai imediatamente para modo Standby caso CE esteja em nível lógico baixo, consumindo assim pouca energia. Caso contrário o próximo pacote em TX FIFO será enviado, porém se TX FIFO estiver vazia e CE continuar alto, um segundo modo de Standby é ativado. 6.2. Recepção Quando o interesse é efetuar uma recepção de dados, primeiramente o bit de configuração PRIM_RX deve ser colocado em nível lógico alto. Todos os data pipes que serão utilizados para receber dados devem estar habilitados (registrador EN_RXADDR). Os tamanhos corretos dos pacotes de dados a serem recebidos devem estar configurados (registradores RX_PW_Px). A ativação da recepção é feita colocando CE em alto. Depois de 130µs o módulo nRF24L01 já estará monitorando o ar a procura de informação. Quando um pacote válido é recebido (endereço e CRC corretos), os dados são guardados em RX FIFO e o bit RX_DR do registrador de estado é colocado em nível alto. O pino de interrupção IRQ é posto em alto quando RX_DR está alto. RX_P_NO no registrador de estado indicará em qual data pipe a informação foi recebida. Se o auto-ACK estiver habilitado um ACK será enviado de volta. Caso seja necessária a comunicação em ambos os lados, o microcontrolador deve fazer o chaveamento em PRIM_RX, para, dessa forma, conseguir sincronizar a recepção e transmissão de dados. 36 7. Projeto O docente Evandro Luís Linhari Rodrigues, que ministrou a disciplina SEL373 Projeto de Sistemas Digitais no primeiro semestre de 2010, forneceu aos alunos alguns kits contendo o microcontrolador ARM AT91SAM7, para que os mesmos desenvolvessem projetos envolvendo o dispositivo ARM juntamente com os periféricos presentes no kit. Visto tal oportunidade, a proposta de projeto feita pelos alunos Daniel Vicentini Guimarães e Marcelo Tomasini, foi programar o microcontrolador para que esse funcionasse como uma ponte entre um chefe e um funcionário, ou seja, o ARM seria responsável por receber a tarefa destinada pelo chefe e garantir o recebimento da mesma pelo funcionário. Para a destinação de uma obrigatoriedade ao funcionário, o chefe deve primeiramente acessar o hiper terminal de seu computador, entrar com a tarefa a ser atribuída e pressionar a tecla enter. A mensagem será transmitida para o kit via RS232, para então o microcontrolador processá-la e exibí-la no visor de LCD. O próximo passo é o chefe verificar se a tarefa está correta no visor, para então tomar a decisão de enviá-la ou descartá-la. Caso a opção enviar seja selecionada, o ARM comunicar-se-á com o módulo nRF24L01 por meio da interface SPI, para que então a informação seja modulada e transmitida via rádio frequência pelo ar. Assim que o outro rádio detectar a informação presente no ar ele a captará e avisará ao microcontrolador, via pino de interrupção, que a informação já foi recebida, vendo isso o ARM pegará a informação contida no módulo nRF24L01 e exibirá ela no visor LCD. O funcionário, vendo a mensagem no display, deve então aceitar ou rejeitar a tarefa, de modo com que sua decisão será enviada de volta a seu supervisor utilizando o mesmo processo citado anteriormente. 37 7.1. Evolução O cronograma do projeto está apresentado na figura 33. Figura 33 – Cronograma Ambientalização: A proposta inicial de ambientalização era instalar a IDE Eclipse, ler sobre os dispositivos presentes no kit, encontrar bibliotecas já implementadas dos mesmos e conseguir executar terefas simples. Como foi utilizado de três a quatro semanas apenas para conseguir instalar a IDE Eclipse e configurar corretamente a gravação e o debug no microcontrolador a próxima etapa foi iniciada, mesmo não sendo cumprida toda a parte da atividade proposta. Serial: A idéia inicial para essa etapa do projeto era entender o funcionamento da comunicação assíncrona, encontrar alguma biblioteca que já implementasse tal comunicação entre o microcontrolador e o computador para então, finalmente, implementar a comunicação nos dois sentidos utilizando a configuração RS232. Foi entendido o funcionamento da interface UART e a biblioteca foi encontrada, porém a comunicação não era concluída com êxito, tanto no recebimento quanto no envio de dados. LCD: Não obtendo êxito na comunicação serial a etapa de programação do LCD foi inicializada e a etapa de comunicação via serial deixada para ser concluída posteriormente. A proposta inicial do LCD era, assim como no item anterior, entender seu funcionamento, encontrar uma biblioteca pronta e implementar funções de escrita na tela. O tempo utilizado para tal, uma semana, foi bem inferior ao estimado, que era 38 de três semanas. Com a etapa de programação do LCD cumprida antes do prazo, foi possível voltar para realizar a conclusão da etapa anterior, que foi resolvida mudandose dois jumpers conectados de forma inadequada no kit. RF: Erroneamente a etapa de RF não foi dividida em duas partes menores, pois tal tarefa engloba duas grandes e complexas funções, a programação do SPI presente no microcontrolador e a configuração correta do módulo nRF24L01. A proposta inicial era realizar toda a comunicação RF em três semanas, porém esse foi o tempo necessário apenas para a correta compreenção do funcionamento do periférico SPI presente no kit, juntamente com sua configuração. Projeto: A idéia presente nessa etapa era integrar todas as partes do projeto, montar a apresentação e confeccionar a monografia, porém como uma das etapas primordiais do projeto, realizar a comunicação RF, não estava concluída a etapa “Projeto” foi sacrificada em grande parte para as tentativas de conclusão da comunicação via rádio frequência. O projeto apresentado é capaz de realizar a comunicação entre o computador e o kit e entre o kit e o computador, além de exibir as informações recebidas no display LCD e utilizar os dois botões, cada um com sua tarefa relacionada. Além dessa interface humano-máquina, o sistemas é capaz de realizar a comunicação via SPI, que pôde ser observada no osciloscópio, deixando a desejar apenas na codificação dos dados recebidos pelo transciever em RF. 7.2. Implementações 7.2.1. Implementação da Serial Colocados os jumpers nas posições corretas para essa aplicação e encontrada a biblioteca “usart.h”, que possui as principais funções InitUSART0, write_char_USART0, read_char_USART0 e write_str_USART0, a comunicação entre o microcontrolador e o computador foi realizada com sucesso. Para tal, primeiramente deve-se chamar a função InitUSART0, função essa que configura corretamente a USART. Feitas as configurações, a função read_char_USART0 deve ser chamada caso queira ler um caractere recebido ou write_char_USART0 e write_str_USART0 devem ser chamadas caso queira colocar um caractere ou string, respectivamente, no canal da serial. Exemplo de código para recepção de caractere: InitUSART0(); data=read_char_USART0(); Onde data é do tipo caractere. 39 Exemplo de código para escrever uma string: InitUSART0(); write_str_USART0(Frase1); Onde Frase1 é uma string (unsigned char Frase1*+=”Teste”). 7.2.2. Implementação do LCD: Encontrada a biblioteca a implementação do LCD deu-se da seguinte maneira: Primeiramente a função LCDInit é chamada para inicializar o dispositivo, em seguida a função LCDSettings configura corretamente o dispositivo, após a função LCDWrite130x130bmp insere uma imagem na tela e permite a inclusão de novos textos na mesma. Finalmente a função LCDPutStr escreve a string desejada na tela. Exemplo de código: LCDInit(); LCDBacklight(LCD_BKLGHT_OFF); LCDSettings(); LCDWrite130x130bmp(); LCDClearScreen(); LCDSetRect(15, 15, 13, 120, LCD_FILL, LCD_YELLOW); LCDPutStr(M1, 20, 20, LCD_MEDIUM, LCD_BLACK, LCD_YELLOW); LCDBacklight(LCD_BKLGHT_ON); Esse código inicia o LCD, desliga o back light, configura todo o display, gerando um retangulo de 13x120 a partir posição 15x15 e escrevendo uma frase chamada de M1 a partir da posição 20x20, para somente no final ligar o back light, quando todo o display já está corretamente atualizado, exibindo as informações ao usuário. 7.2.3. Implementação do SPI: Após a leitura minuciosa da seção de comunicação SPI presente no manual do microcontrolador AT91SAM7, foram assimiladas ações que cada registrador desempenha no dispositivo. Dessa forma a função init_spi foi criada para que o periférico SPI fosse capaz de enviar os dados ao transciever, utilizado uma freqüência que fosse aceita pelo mesmo, além da quantia desejada de bits por transmissão e outras características, como CPOL e CPHA. Um dos problemas encontrados foi a necessidade da realização do CSN manual, já que o microcontrolador não implementava-o corretamente sozinho. O uso do osciloscópio foi essencial para a detecção de presença do clock no pino CLK, além da visualização dos bits sendo transmitidos no pino MOSI. 40 O código da configuração SPI está presente na biblioteca feita pelos alunos Daniel Vicentini Guimarães e Marcelo Tomasini (baseada em outras bibliotecas analisadas e nas informações lidas em datasheets) dentro da função init_spi. 7.2.4. Configuração dos Registradores do Módulo nRF24L01. Foram as três tentativas: Primeiramente, depois de configurada a comunicação SPI, colocou-se uma palavra qualquer para ser enviada ao módulo usando a interface SPI. Almejava com isso que o rádio transmitisse sem maiores problemas a mensagem. Não funcionou. Analisando melhor o dispositivo, estudou-se a transmissão do sinal e viu-se que haveria necessidade de configurar diversos registradores para que a comunicação fosse realizada com sucesso. Pegou-se uma biblioteca para o mesmo módulo, o nRF24L01, porém estava relacionada com uma um outro microcontrolador. Portanto fizeram-se algumas adaptações e partiu para a segunda tentativa que também foi mal sucedida. A terceira tentativa foi a configuração manual do módulo. Tentativa essa interrompida pelo tempo limite da prática. 7.3. Próximos passos Analisando o problema de comunicação mal sucedida, sugeriu-se algumas hipóteses ao problema: (a) SPI mal configurado. (b) Módulo do rádio configurado de forma incorreta; (c) Módulo compreende a ação que recebe, faz sua função de enviar dados, mas não retorna valor para o microcontrolador; (d) O rádio não compreende a mensagem do microcontrolador; Primeiramente analisou-se o SPI e viu-se perfeitamente os sinais no osciloscópio fazendo assim a negação da hipótese (a), o SPI estava configurado perfeitamente. Dessa forma pormenorizou-se toda a folha de dados do nRF24L01 e verificou todas as configuração do rádio. Negou-se, portanto, a hipótese (b), o módulo estaria configurado corretamente. Se houvesse mais tempo para abordar o assunto, atacar a hipótese (c) seria mais viável. Basta utilizar um analisador de espectro para saber se o rádio está enviando a informação. Dessa forma, caso não fosse detectada a presença de um sinal, certificaríamos por fim que a hipótese (d) seria a correta, o rádio não compreende a mensagem e portanto seria um erro de código na programação. 41 Assim, o código fornecido pela biblioteca teria que ser atacado para solucionar o problema. 8. Conclusão Mesmo com o projeto incompleto, devido à não configuração correta dos registradores do módulo do rádio, o aprendizado dos dois alunos, envolvidos na proposta de programação de um complexo dispositivo, até então desconhecido pelos dois, foi enorme. Os dispositivos cujas bibliotecas já encontravam-se implementadas corretamente, como o visor LCD e a interface USART foram rapidamente e facilmente programados da forma desejada. As maiores dificuldades foram encontradas ao surgir a necessidade da construção de uma nova biblioteca para a configuração e execução da comunicação SPI com o rádio e da configuração dos registradores presentes no mesmo. Alguns tópicos de extrema importância na vida profissional de qualquer engenheiro, porém pouco explorados na faculdade, como apresentação de seminários feitos por alunos para os demais da classe, além da confecção de um cronograma para a realização do projeto, foram abordados na disciplina Projetos de Sistemas Digitais. Um outro aspecto também muito importante para qualquer engenheiro, porém agora na área técnica, e igualmente pouco explorado durante a faculdade foi a pesquisa de especificações nos relatórios de dados dos dispositivos programáveis (ARM e nRF24L01) para a correta programação da comunicação SPI, além da análise de esquemáticos para verificar como as conexões entre os dispositivos estão implementadas e quais pinos devem ser manipulados para realizar uma determinada função. 42 9. Bibliografia Eclipse: http://www.eclipse.org/org/ http://pt.wikipedia.org/wiki/Eclipse_%28IDE%29 http://pt.wikipedia.org/wiki/Ambiente_de_Desenvolvimento_Integrado http://openocd.berlios.de/web/?page_id=8 http://openocd.berlios.de/doc/pdf/openocd.pdf Comunicação SPI http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus http://www.embedded.com/story/OEG20020124S0116 http://www.atmel.com/dyn/resources/prod_documents/doc6120.pdf http://www.sabereletronica.com.br/secoes/leitura/279 Rádio: An151 – nRF24L01 datasheet ento atual. 43 44