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