Sistemas Eletrónicos
Rede de Sensores de Temperatura
João Martins
Rui Graça
[ee10187|ee10123]@fe.up.pt
Grupo 10
Conteúdo
1 Introdução
3
2 Visão geral do dispositivo
2.1 Circuito funcional . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Circuito de regulação . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3
4
3 Micro-Controlador
4
4 Firmware
4.1 Organização . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Variáveis não-voláteis . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Inicialização . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 Teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5 Leitura da temperatura . . . . . . . . . . . . . . . . . . . . . . .
4.6 Controlo do nível da bateria e atualização de variáveis não-voláteis
4.7 Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7.1 ’a’ - Ler o endereço do dispositivo . . . . . . . . . . . . .
4.7.2 ’s’ - Ler um número de temperaturas medidas . . . . . . .
4.7.3 ’p’ - Modificar o período de medição da temperatura . . .
4.7.4 ’t’ - Ler o período de medição atual . . . . . . . . . . . .
4.7.5 ’e’ - Modificar o endereço do dispositivo . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
6
6
8
9
9
9
10
10
10
11
11
11
5 Protocolos de Comunicação
5.1 I2 C . . . . . . . . . . . . . . . . . . . .
5.1.1 Sensor de temperatura - LM75B .
5.1.2 EEPROM - 24LC128 . . . . . . .
5.1.3 Transmissões . . . . . . . . . . .
5.2 RS485 . . . . . . . . . . . . . . . . . .
5.2.1 Transceiver - SN65HVD11 . . . .
5.2.2 Transmissões . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
12
12
13
14
16
16
17
6 Protocolos de Teste
6.1 March Test X - Teste de memória volátil . . . . . . . . . . . . . . . . .
6.2 Flash Checksum - Teste de memória não-volátil . . . . . . . . . . . . . .
21
21
23
7 Circuito de Regulação
23
8 Protótipo Industrial
25
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9 Análise para Produção
26
10 Manual de utilização
10.1 Para o utilizador final . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2 Para programação e acesso específico . . . . . . . . . . . . . . . . . . .
27
27
27
Anexo A - Esquemático do dispositivo
28
Anexo B - Circuito Impresso
29
Anexo C - Software Utilizado
Code Composer Studio 6 . .
mspdebug . . . . . . . . . .
Eagle 7.2.0 Light . . . . . . .
VIM . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11 Referências
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
30
30
30
30
30
31
2
1
Introdução
Com a descida do preço dos circuitos integrados e o aumento da procura por soluções
de monitorização de variáveis como temperatura, humidade, vento, entre outros, o desenvolvimento de produtos que permitem ao utilizador criar uma rede de monitorização
à sua medida tem vindo a ganhar mais interesse.
O trabalho desenvolvido focou-se na criação de um dispositivo que tomará o papel de
um de vários nós de uma destas redes, permitindo a monitorização da temperatura de um
local, com memória de até 16 000 leituras anteriores, permitindo ao utilizador descarregar
várias medições anteriores para outro dispositivo (master ) de forma assíncrona. Isto é,
o nó funciona de forma independente do master, respondendo a este apenas quando um
comando é enviado. De forma a permitir a criação de uma rede com múltiplos módulos
foi ainda implementado um acesso através de um barramento RS485.
2
Visão geral do dispositivo
Tal como foi referido, o dispositivo desenvolvido tem como objetivo a medição periódica da temperatura e a escrita desse valor numa memória não volátil, assim como deve
fornecer uma interface que permita a sua introdução numa rede composta por múltiplos
nós semelhantes ou que executem medições de variáveis diferentes.
De forma a facilitar mais a criação da rede, teve-se em consideração que seria interessante o utilizador apenas ter como preocupação a ligação ao barramento RS485,
pelo que o dispositivo foi desenhado de forma a poder ser utilizado com 2 baterias AA
(possivelmente recarregáveis).
Assim, o dispositivo pode ser analisado ao nível do circuito funcional e do circuito de
regulação para a bateria.
2.1
Circuito funcional
Em termos funcionais o dispositivo é composto por um micro-controlador (o MSP430G2553),
um sensor de temperatura (o LM75B), uma EEPROM de 128kbit (24LC128), um transceiver responsável pelo acesso ao barramento RS485 (SN65HVD11), dois LEDs e resistências de pull-up para o barramento I2 C constituído pelo micro-controlador, pelo sensor
e pela EEPROM.
3
2.2
Circuito de regulação
O circuito de regulação é baseado num circuito integrado, o TL499A, que implementa
uma função de step-up recebendo das baterias uma tensão perto dos 3V e procedendo
à passagem para 3.3V regulados. Este circuito integrado necessita de uma malha de
realimentação composta por uma bobina, dois condensadores e três resistências.
3
Micro-Controlador
O desenvolvimento do dispositivo proposto centra-se num micro-controlador que terá
como função gerir todas as comunicações e funcionalidades pelo que a escolha deste foi
fulcral para o sucesso do projeto.
Foram analisadas 3 opções de micro-controlador de diferentes fornecedores: a gama
PIC da Microchip, a gama ATmega da Atmel e a gama MSP430 da Texas Instruments.
Optou-se por utilizar a gama MSP430 da Texas Instruments devido à sua facilidade de
uso e acesso a material de prototipagem, assim como o acesso a um IDE distribuído pela
empresa, o Code Composer Studio, que oferece uma lista extensa de funcionalidades de
debug.
Além disto, os micro-controladores desta gama focam-se no baixo consumo de potência, que é um foco importante para a aplicação em questão.
O desenvolvimento do protótipo laboratorial também teria de ser extremamente rápido, pelo que se optou pela utilização de uma plataforma de prototipagem rápida: o
MSP-EXP430G2, um LaunchPad que permite a utilização de múltiplos modelos de microcontroladores da gama MSP430 da Texas Instruments, Inc. com diferentes configurações
e acesso a pinos.
A escolha do micro-controlador específico teve em consideração várias necessidades
para a aplicação:
• O micro-controlador deveria ser capaz de operar em modo de baixo consumo energético de forma a extender a duração das baterias;
• O número de pinos disponíveis teria de ser suficiente para todas as ligações necessárias;
• O micro-controlador teria de ter um pino disponível para efetuar a medição do nível
da bateria através de um ADC;
• O micro-controlador teria de estar disponível, ao mesmo tempo, num encapsulamento DIP; para que fosse passível de utilizar no protótipo, e num encapsulamento
que ocupasse o mínimo de espaço possível;
4
• O preço deveria ser baixo de forma a possibilitar o desenvolvimento de um módulo
cujo preço total de produção fosse competitivo.
Com estas necessidades em vista foi escolhido, numa fase inicial, o MSP430F2002.
Enquanto este dispositivo cobre todas as necessidades previamente referidas, verificouse rapidamente que na realidade o espaço de memória Flash disponível para o trabalho não chegaria para a aplicação a desenvolver pelo que se decidiu passar a utilizar o
MSP430G2553. Este micro-controlador apresenta um conjunto de funcionalidades muito
mais completo, sendo as principais:
• 16 KB de Flash
• 512 B de RAM
• 2 timers
• ADC
• Módulo USCI (Universal Serial Communication I/F )
O módulo USCI é composto por dois blocos principais (USCI_A e USCI_B), podendo
estes ser configurados de maneira autónoma para implementar diversos protocolos de comunicação: SPI (USCI_A ou USCI_B), UART(USCI_A), 2 C (USCI_B). A possibilidade
de utilizar o bloco USCI_A para a comunicação UART, e subsequente acesso ao barramento RS485, e o bloco USCI_B para a comunicação I2 C permitiu um desenvolvimento
mais rápido e eficiente da aplicação.
Além disto, existem outros micro-controladores da mesma gama, a preços mais reduzidos, que têm o mesmo hardware mas menos memória Flash e RAM, pelo que, após a
conclusão do projeto, é possível selecionar o modelo mais adequado, de forma a otimizar recursos e custo, com alterações mínimas no código (apenas as que dizem respeito
diretamente ao tamanho das memórias).
Tendo sido escolhido o micro-controlador, plataforma de prototipagem e IDE a ser
utilizado durante a fase de debug, procedeu-se ao desenvolvimento da aplicação.
4
Firmware
Nesta secção do relatório é apresentada toda a estrutura e funcionalidades da versão
1.0 do Firmware. Para a realização do firmware, a norma MISRA-C 2004 foi seguida,
tendo como auxilio um verificador a esse fim destinado, incluído no IDE utilizado.
5
4.1
Organização
Numa primeira análise, a aplicação pode ser dividida em duas fases: a fase de inicialização e teste e a fase de execução do ciclo principal.
1. Inicialização e Teste
Esta fase é executada todas as vezes que o dispositivo é ligado, apenas uma vez,
antes do inicio da execução do ciclo principal.
2. Ciclo Principal
O ciclo principal é iniciado logo após a primeira fase e corresponde a um ciclo infinito
com diversas funcionalidades. Cada iteração do ciclo infinito é começada por uma
entrada no modo de low power do qual o micro-processador sairá após ocorra uma
interrupção provocada pelo timer (configurado para um tick a cada 1 segundo) ou
após a receção de um comando pelo barramento RS485. Após a saída de poupança
o micro-controlador procederá ao processamento necessário e voltará ao modo de
poupança de energia. Esta implementação permite que o micro-controlador esteja
num modo de poupança de energia durante uma grande parte do tempo, visto
que, no caso de não existir qualquer necessidade de processamento, o consumo de
potência é muito baixo. Neste ciclo estão implementadas as funcionalidades que
devem estar disponíveis durante todo o período de funcionamento do dispositivo.
São elas:
• a leitura periódica da temperatura e escrita desta na memória externa;
• o teste do nível da bateria;
• o processamento de comandos enviados pelo utilizador através do barramento
RS485;
• a atualização periódica de variáveis não voláteis.
4.2
Variáveis não-voláteis
Variáveis criadas e modificadas durante a execução do programa serão armazenadas
na RAM, pelo que serão voláteis e eliminadas em caso de perda de energia. Assim,
no caso de ser necessário manter os valores de um conjunto de variáveis armazenado
é necessário utilizar memória não-volátil (Flash). São exemplos deste tipo de variáveis:
configurações de sistema, variáveis de identificação do dispositivo e firmware e variáveis
de controlo. Na aplicação são utilizadas algumas variáveis que se encontram armazenadas
em memória não-volátil sendo elas:
6
• firm_version - Versão do Firmware
Nesta variável estará armazenada a versão do firmware em execução no microcontrolador. Esta informação permitirá ao utilizador ou técnico de manutenção
garantir que todos os dispositivos numa rede contêm a mesma versão da aplicação
de modo a eliminar possíveis incompatibilidades.
• serial - Número de série
O número de série de cada dispositivo encontra-se guardado nesta posição da
memória Flash.
• flash_address - Endereço
Cada dispositivo deverá responder a dois endereços no barramento RS485: 0x00
e o endereço guardado nesta variável. O primeiro deverá ser utilizado apenas em
caso de ser necessário efetuar um broadcast na rede ou no caso de o utilizador estar
a efetuar o acesso isolado ao dispositivo de modo a poder configurar um endereço
único ou descobrir o endereço atualmente guardado nesta variável. É possível,
através de comandos específicos no acesso ao barramento RS485, ler o endereço e
configurar um novo endereço do dispositivo.
• on_times - Número de ciclos
Um dos indicadores de um mau uso de um equipamento poderá ser o número de
ciclos que o dispositivo fez (número de vezes que este foi ligado e desligado). Um
exemplo de este tipo de mau uso seria o de um equipamento com 1 semana de
vida apresentar 100 000 ciclos quando deixa de funcionar.
Esta variável é especificamente utilizada de modo a permitir a deteção destes casos.
De cada vez que o dispositivo é ligado, esta variável será incrementada.
• temp_period - Período de leitura
A leitura da temperatura é feita a um período definido pelo utilizador. Este período
pode ser configurado através do barramento RS485, no entanto se fosse apenas
guardado em variáveis em RAM, as configurações seriam perdidas quando o sistema
perdesse energia. De modo a resolver esta volatilidade, o período de medição é
guardado numa variável em Flash, lido durante a inicialização e atualizado quando
o utilizador o deseje.
• last_write_pos - Última escrita
A escrita de cada temperatura lida na memória externa (EEPROM) deverá ser
feita de maneira sequencial como se se tratasse de um buffer circular. Esta implementação permitirá manter um registo de até 15 999 medições anteriores com a
possibilidade de serem lidas pelo utilizador. No entanto, caso o endereço de escrita
7
atual fosse guardado apenas em variáveis voláteis, a posição seria perdida quando
se efetuasse uma reinicialização do sistema levando à escrita de novo a partir da
posição 0 da memória.
Mais uma vez a resposta foi guardar este valor numa variável na Flash, no entanto
foi necessário ter algumas considerações em mente. Caso a atualização desta variável fosse feita sempre que uma nova medição fosse efetuada, haveria um número
excessivamente elevado de escritas na mesma posição da Flash. A memória Flash
apresenta sempre uma dada endurance, significando que existirá um número finito
de ciclos de escrita e leitura disponíveis antes de começarem a ocorrer falhas. No
caso da Flash do MSP430G2553 é apresentada, pelo fabricante, uma endurance
mínima de 10 000 ciclos e típica de 100 000 ciclos. Num caso limite de leitura
de temperatura a cada 1 segundo, isto traduzir-se-ia num ciclo por segundo, resultando em 10 000 ciclos em aproximadamente 2 horas e 48 minutos. De modo
a prevenir esta falha precoce foi definido que a atualização da variável em Flash
apenas ocorreria aproximadamente a cada hora, ou a cada período de leitura de
temperatura caso este seja superior a uma hora, resultando num tempo de vida
em funcionamento contínuo sem qualquer pausa de aproximadamente 1,14 anos e
típico de mais de 11 anos.
• ram_flag - Flag do teste à RAM
Visto de todas as vezes que o dispositivo é ligado serem corridos dois testes (um
teste à RAM e outro à Flash), seria vantajoso para um técnico de manutenção ter
um fácil acesso a saber se o teste à RAM falha, ou seja que há um problema na
RAM). De forma a ser simples fazer esta verificação, caso o teste falhe é colocada
uma flag nesta posição de memória indicando que tal ocorreu.
4.3
Inicialização
Nesta fase são inicializadas várias variáveis de execução, selecionadas todas as opções
referentes aos módulos a serem utilizados para comunicação (pinos, velocidade, entre
outros), ao timer (com 1 segundo de período) e ao ADC.
Para além de inicializar variáveis que terão sempre o mesmo valor inicial e configurar
todos os periféricos, são também inicializadas variáveis dependentes de valores guardados
em flash ou atualizados valores guardadas nesta. O período de leitura da temperatura, o
endereço do dispositivo e o endereço da próxima escrita na EEPROM são lidos das respetivas posições na flash e o contador do número de ciclos de inicialização é incrementado.
Por fim, são definidos os pinos a ser utilizados para os LEDs de feedback visual e
ativadas as interrupções.
8
4.4
Teste
Na fase de inicialização são também incluídos os dois testes de integridade implementados na versão 1.0 do Firmware. Estes testes têm como função garantir que não existem
erros nos dispositivos testados, diminuindo a probabilidade de erro ou mau funcionamento
do módulo.
De forma a testar a integridade da memória volátil (RAM) é implementado o algoritmo
de teste March X, que será melhor explicado na secção 6.1. O teste é corrido duas vezes:
uma na zona de memória RAM geral e a outra na zona reservada à stack. Isto é efetuado
visto ser necessária uma preparação dos dados antes de executar o teste na zona da stack.
É também testada a integridade da memória não-volátil (flash) na zona onde se
encontra armazenado o programa e variáveis constantes. O teste efetuado é um checksum
de todos os dados em memória.
4.5
Leitura da temperatura
A leitura da temperatura é feita a cada período definido pelo utilizador. O sistema
apresenta um timer com período de 1 segundo, pelo que o utilizador terá a liberdade
de escolher qualquer período de leitura, expresso em segundos, passível de ser guardado
num inteiro de 16 bits (entre 1 e 65 535). Por pre-definição, o período de leitura será de
600 segundos.
A cada passagem de um período será feita uma nova medição. Este processo é
composto pelos seguintes pontos:
• Leitura através do barramento I2 C da temperatura medida pelo sensor LM75B.
• Escrita da temperatura lida na posição de memória atual da EEPROM 24LC128
através do barramento I2 C.
• Atualização do contador indicador de um novo período e incremento da posição de
escrita da EEPROM.
Em cada uma das 2 operações envolvendo o barramento I2 C é testado se esta foi
bem sucedida sendo o terceiro ponto efetuado apenas no caso de isto ser verdade. Caso
não o seja, na próxima iteração uma nova tentativa será feita.
4.6
Controlo do nível da bateria e atualização de variáveis nãovoláteis
A cada 1 hora de funcionamento, ou período de leitura da temperatura caso este seja
superior a 1 hora, são efetuadas duas operações:
9
• Controlo do nível da bateria
De forma a garantir que o utilizador é avisado quando a bateria estará perto do
seu limite, é necessário que o seu nível seja medido periodicamente. Visto não ser
necessário estar permanentemente a verificar o nível, uma medição a cada hora
será suficiente. A medição do nível da bateria é efetuada com o apoio do ADC do
micro-controlador e, caso esta se encontre abaixo do limiar definido, um LED será
ligado indicando ao utilizador que será melhor trocar as baterias.
A definição do valor de threshold a ser utilizado é algo que apenas poderia ser
encontrado após o teste de qual o nível ótimo a partir do qual se deverá alertar
o utilizador para a necessidade de trocar as baterias. Assim, na versão 1.0 do
Firmware o threshold não apresenta um valor que deva ser utilizado num cenário
real devendo ser acertado após algum teste real.
• Atualização de variáveis não-voláteis
Tal como já foi referido, a posição atual de escrita na EEPROM deverá ser mantida
em memória não-volátil, tendo no entanto o cuidado de não efetuar um número
excessivamente elevado de ciclos de escrita e leitura de modo a conservar a Flash.
Assim, será nesta fase que o endereço atual para escrita na EEPROM é guardado
em memória não-volátil.
4.7
Comandos
A leitura e processamento de comandos enviados pelo barramento RS485 baseia-se
numa máquina de estados em que, após a receção do endereço do micro-controlador em
questão, é esperado um dos comandos válidos. Caso não seja recebido um comando
válido, a máquina voltará a um estado em que se espera pelo endereço. Os comandos
permitidos e suas implicações são os seguintes:
4.7.1
’a’ - Ler o endereço do dispositivo
Este comando simplesmente despoleta o envio imediato do endereço atual do dispositivo, que se encontra guardado numa variável de execução e é lido aquando da
inicialização da Flash.
4.7.2
’s’ - Ler um número de temperaturas medidas
Após o envio do comando são esperados dois bytes de informação contendo o número
N de medidas a enviar para o utilizador. Após a receção destes, o programa procede
à leitura das últimas N medições guardadas na memória EEPROM. Cada leitura da
10
EEPROM é feita no máximo em blocos de 32 bytes (dado ser este o tamanho dos
buffers implementados para as transmissões) pelo que no caso de serem pedidas mais do
que 32 medições, um ciclo de leitura e envio de blocos de 32 bytes para o utilizador é
implementado.
4.7.3
’p’ - Modificar o período de medição da temperatura
O período de medição é implementado com um inteiro sem sinal de 16 bits pelo que
a sua modificação pressupõe o envio de 2 bytes de informação. Assim, após envio do
comando, o utilizador deverá enviar 2 bytes correspondentes ao valor do período, em
segundos, a que deseja que a medição de temperatura seja efetuada. Após a receção
destes bytes, a variável contendo o período é modificada, assim como o valor guardado
em memória não-volátil que é utilizado na inicialização do programa.
4.7.4
’t’ - Ler o período de medição atual
Tal como no caso da leitura do endereço do dispositivo, este comando procede ao
envio imediato do valor do período de medição atualmente armazenado na variável usada
na execução do programa.
4.7.5
’e’ - Modificar o endereço do dispositivo
Cada dispositivo apresenta um endereço único e um endereço de broadcast partilhado
por todos os módulos da rede. De forma a poder endereçar cada módulo especificamente,
este deve ter um endereço único não repetido e isto pode ser conseguido utilizando este
comando. Por pre-definição, quando o dispositivo é programado, tanto o endereço de
broadcast como o de endereço único são iguais (0x00) mas utilizando este comando, o
utilizador poderá modificar o endereço único para qualquer valor hexadecimal que possa
ser contido num byte enviando o comando seguido de um byte de informação.
Após a receção do novo endereço, a variável utilizada na execução é atualizada e o valor
guardado na posição de Flash utilizada para armazenar o endereço também é atualizado.
5
Protocolos de Comunicação
Cada nó da rede é composto por um conjunto de circuitos integrados. De forma a
permitir a comunicação entre o sensor de temperatura, a EEPROM e o micro-controlador,
foi implementada a comunicação através de através de I2 C, um protocolo de comunicação
desenvolvido para interligar diversos circuitos integrados na mesma PCB.
11
Tendo as interligações em cada PCB assentes em I2 C, foi necessário encontrar um
protocolo de comunicação que permitisse formar a rede de nós. Visto cada nó ficar
separado por distâncias consideráveis o protocolo mais bem adaptado e aquele que foi
escolhido foi o RS485.
5.1
I2 C
O I2 C é um protocolo de comunicação que permite a transmissão bi-direcional de
informação, com a possibilidade de existência de múltiplos masters e slaves. A sua
implementação apenas necessita de 2 sinais: o Serial Data (SDA) e o Serial Clock. Cada
dispositivo no barramento deve ter um endereço único, apenas um master pode começar
uma comunicação e o acesso partilhado é garantido através de CSMA/CA (Carrier sense
multiple access/Collision Avoidance. Na aplicação em questão, o micro-controlador terá
o papel de master e o sensor de temperatura e a EEPROM serão os slaves.
A transmissão de dados rege-se por duas situações nas linhas: a Start Condition,
caracterizada pela descida do SDA seguida pela descida do SCL, e a Stop Condition,
caracterizada pela subida do SCL seguida pela subida do SDA. De notar ainda que cada
dispositivo terá um endereço de 7 bits, sendo o 8o utilizado de forma a indicar se a
operação é de escrita ou leitura.
Uma comunicação I2 C é inicializada por uma Start Condition, seguida do endereço
do dispositivo, o bit de escrita/leitura e uma espera pela aceitação do outro dispositivo
após o que se começa a transmissão de dados, terminada por uma Stop Condition.
Tal como foi referido, existem dois slaves em cada dispositivo: o sensor de temperatura e a memória EEPROM, cujo funcionamento é explicado abaixo.
5.1.1
Sensor de temperatura - LM75B
O sensor de temperatura fornece medições da temperatura de 9 bits com uma casa
decimal, querendo isto dizer que o 9o bit dará uma resolução de meio grau. O seu endereço, na implementação feita, é 0x48 e por pre-definição quando este é ligado encontra-se
no modo de operação em que efetua conversões da temperatura acessíveis através de
um simples envio do seu endereço com o bit de leitura ativo. Visto a medição ter uma
resolução de 9 bits, são enviados 2 bytes de informação sendo apenas utilizáveis o 1o
byte e o MSB do 2o byte. Como cada posição da memória EEPROM e a transmissão
de dados através do barramento RS485 são baseadas em bytes (8 bits), foi necessário
efetuar uma truncatura dos dados recebidos do sensor, optando-se por utilizar apenas os
8 bits mais significativos da medição.
Assim, na aplicação desenvolvida, quando é altura de proceder a uma nova medição
12
da temperatura, é feita a inicialização do módulo I2 C com o endereço 0x48, enviada
uma Start Condition, o endereço do sensor com o bit de leitura ativo e feita a leitura
dos dados enviados pelo sensor. Visto os dados necessários (8 bits mais significativos
da medição) encontrarem-se no 1o byte recebido não haverá necessidade de processar o
2o byte enviado pelo sensor, resultando no envio da Stop Condition após a leitura do 1o
byte recebido.
5.1.2
EEPROM - 24LC128
A memória EEPROM apresenta 128Kb, resultando na necessidade de envio de 2 bytes
de informação sobre o registo a ler ou escrever em cada operação deste tipo. Na aplicação
desenvolvida foi definido que o endereço desta seria 0x50.
Na aplicação desenvolvida foi necessário utilizar a memória tanto em modo de escrita
como de leitura, tendo cada um dos modos as suas particularidades:
• Escrita
De modo a escrever um novo valor na memória será necessário enviar o endereço
da posição a escrever, seguida do byte a escrever. Assim, visto o endereço de
cada posição da memória necessitar de 2 bytes, uma operação de escrita de uma
medição de temperatura é composta por 4 bytes após a Start Condition: endereço
com o bit ativo para escrita, dois bytes com o endereço do registo e finalmente o
valor a ser escrito seguido de uma Stop Condition.
• Leitura
Na leitura da memória é também necessário começar por definir o registo de onde
se pretende começar a leitura. Como tal, tem de se começar por enviar um comando inicial de escrita do registo a ler seguido de um comando de leitura. Isto é
conseguido da seguinte maneira:
1. Envia-se uma Start Condition
2. O endereço é enviado com o bit final com a opção de escrita
3. São enviados os 2 bytes referentes ao registo onde se pretende começar a
leitura
4. É enviada uma nova Start Condition sem enviar anteriormente uma Stop
Condition
5. O endereço é enviado com o bit final com a opção de leitura
6. Efetua-se a leitura do número de valores pretendido
7. Envia-se uma Stop Condition
13
5.1.3
Transmissões
A operação do barramento podemos dividir as transmissões em 3 tipos: leitura da
medição do sensor de temperatura, leitura de um registo da memória EEPROM e escrita
de uma medição na memória EEPROM. Abaixo é apresentado um gráfico para cada um
destes casos. A aquisição dos dados foi feita com o apoio de um osciloscópio, transferidos
através de um ficheiro CSV que foi depois utilizado na criação dos gráficos com o apoio
do Matlab.
Serial Clock
4
3
2
1
0
0
10
20
−5
x 10
Serial Data
4
3
2
1
0
0
10
20
−5
x 10
Figura 1: Leitura da temperatura
A figura 1 mostra a leitura de um valor da temperatura. Verifica-se, inicialmente,
a ocorrência de uma start condition, causada pelo flanco descendente do valor de SDA
com SCL a 1. As transições subsequentes de SDA ocorrem apenas com SCL a 0, sendo
por isso valores de dados. A comunicação mostrada na figura é 10010001 0 00010111 1
0. O primeiro byte contem o endereço do sensor de temperatura, 0x48, seguido do valor
1, que indica que o master está a iniciar uma leitura. O bit 0 que se segue é um bit
de acknowledgement (ACK), enviado pelo slave, indicando que está presente e pronto a
enviar dados. O byte seguinte, 0x17, é a temeratura medida, em graus Celsius (23o C). O
1 indica que o master não enviou ACK e o 0 corresponde ao início de uma transmissão
14
Serial Clock
4
3
2
1
0
4
5
6
7
8
9
−4
x 10
Serial Data
4
3
2
1
0
4
5
6
7
8
9
−4
x 10
Figura 2: Escrita de um novo valor na EEPROM
Serial Clock
4
3
2
1
0
0
1
2
3
4
5
6
7
8
9
−4
x 10
Serial Data
4
3
2
1
0
0
1
2
3
4
5
6
7
8
9
−4
x 10
Figura 3: Leitura sequencial de 5 valores da EEPROM
seguinte, que será interrompida (na verdade o 0 é forçado pelo master, para, de seguida,
enviar a stop condition. Esta é a condição que se observa quando se verifica o flanco
ascendente de SDA com SCL a 1, o que indica o fim da comunicação.
A figura 2 mostra a escrita na EEPROM de um valor de temperatura lido. Como
pode ser visto, após a ocorrência de uma start condition, a sequência de dados é 1010000
0 0 00000001 0 11101110 0 00010110 0. O primeiro byte é o endereço da EEPROM, 50,
com o último bit a 0, indicando que se irá proceder uma escrita. Seguidamente é enviado
o endereço da posição de memória a escrever (2 bytes), e depois o valor a escrever (último
byte), que corresponde a 0x16 (22o C). Como resposta a todos os bytes enviados, surge
no barramento um valor 0, que corresponde ao ACK enviado pela EEPROM. No fim da
comunicação, observa-se uma stop condition.
A figura 3 mostra uma leitura de cinco valores da EEPROM. O início da comunicação
é semelhante ao caso da escrita - o endereço da EEPROM é enviado, com o bit de R/W a
0, indicando que se irá proceder a uma escrita, seguidamente são enviados 2 bytes com a
posição da EEPROM a ler, seguidamente é enviada uma start condition, à qual se segue
15
o envio do endereço da EEPROM, mas com o bit de R/W a 1, indicando que o master
pretende ler. De seguida, a EEPROM transmite os 5 bytes desejados (5 bytes enviados
de forma sequencial, com base no endereço indicado). A transmissão é concluída quando
o micro-controlador envia a stop condition.
5.2
RS485
O RS485 é um protocolo de comunicação assíncrono baseado na transmissão de
um sinal diferencial, ou seja, o sinal é transmitido em dois canais (fios), sendo que a
informação está contida na diferença de tensão entre os dois canais. Esta implementação
permite a transmissão a maiores distâncias e uma maior resistência ao ruído (dado que,
uma vês que ambos os fios estão sujeitos às mesmas interferências, o sinal diferencial
é pouco afetado por ruído e atenuação), tornando este protocolo adequado à criação
de uma rede entre nós afastados. A transmissão de dados na aplicação utliza o modo
de comunicação a 9 bits, possibilitado pelo RS485. Com o acesso a um nono bit por
transmissão, é possível passar a identificar cada byte transmitido como contendo um
endereço ou dados, facilitando a criação de uma rede com múltiplos nós.
Na aplicação desenvolvida um computador do utilizador funciona como master da rede
pelo que uma transmissão apenas ocorrerá consoante um comando seu. Isto permite uma
implementação mais simples de acesso partilhado ao meio de transmissão e adequa-se
bem ao uso pretendido para o sistema.
O micro-controlador, através do módulo USCI_A, implementa o protocolo de comunicação série, tendo associados um sinal TX e outro RX. De modo a aceder ao barramento
RS485, é necessário o uso de um transceiver, responsável pela conversão dos sinais entre o
domínio diferencial, usado no barramento, e não diferencial, usado no micro-controlador.
Além disso, o barramento funciona de forma half-duplex, pelo que é necessário um sinal
de controlo, enviado pelo micro-controlador, que indica ao transceiver se este deve operar
como transmissor ou recetor.
5.2.1
Transceiver - SN65HVD11
O circuito integrado SN65HVD11 tem como função o acesso ao barramento RS485.
Recebe como entrada um sinal de controlo, que indica se deve funcionar como transmissor ou como recetor. Funcionando como recetor, traduz o sinal diferencial presente
no barramento num sinal single-ended, que é transmitido pela saída R, ligada ao RX do
micro-controlador. Funcionando como transmissor, traduz o sinal na entrada D, proveniente do TX do micro-controlador, num sinal diferencial que é introduzido no barramento
RS485. O dispositivo apresenta 4 pinos a ser utilizados pelo micro-controlador: R (Re-
16
ceive), D (Driver ), RE Receiver Enable e DE (Driver Enable). Ao barramento serão
ligados os pinos A e B. Como é possível ver nos sinais utilizados pelo micro-controlador
(figura 7), o sinal DE é ativo a um nível alto e o sinal RE ativo a um nível baixo pelo que
poderão ser controlados pelo mesmo sinal: quando este sinal estiver a um valor lógico 0,
o dispositivo encaminha o sinal para RX, quando estiver ao valor lógico 1, encaminha do
pino R para o barramento.
Tendo sido explicado o funcionamento do transceiver, a sua utilização será extremamente simples:
1. Por omissão o sinal de controlo estará sempre ao nível lógico 0.
2. Quando é detetado um byte no buffer de chegada do micro-controlador é feita a
análise se este apresenta o 9o bit como sendo endereço e, se sim, se este é igual
ao do dispositivo.
3. Se o endereço for igual, passar-se-á à espera de um comando que será processado
mal chegue, byte a byte.
4. No caso de o comando pressupor o envio de informação do micro-controlador para
o master, procede-se à passagem do sinal de controlo do transceiver para o valor
lógico 1, transmitem-se os dados através do sinal TX da UART.
5. Mal a transmissão termine, o sinal de controlo é colocado de novo no valor lógico
0.
5.2.2
Transmissões
São agora apresentadas algumas medições de transmissões utilizando um osciloscópio.
Os valores foram obtidos utilizando 3 canais para os sinais receiver, driver e visto estes
serem controlados pelo mesmo sinal driver enable/receiver enable. Visto a implementação
utilizar a transmissão de 9 bits, é possível verificar as diferenças entre a transmissão de
endereços (9o bit a 1) e de dados (9o bit a 0).
A aquisição foi transferida através de ficheiros CSV, reconstruídos depois utilizando
o Matlab.
A figura 4 mostra a relação entre o sinal diferencial e o sinal na saída R do transceiver.
Como se observa, a informação está presente na diferença entre os dois sinais.
A figura 5 mostra a transmissão do caracter ’U’ como endereço, de notar que o 9o bit
é 1, dado ser um endereço. Os sinais na figura, assim como nas seguintes, correspondem
aos nós que interligam o transceiver e o micro-controlador.
17
Differential Signal A
2
0
−2
−4
0
2
4
6
8
10
−4
x 10
Differential Signal A
2
0
−2
−4
0
2
4
6
8
10
−4
x 10
Receiver Signal
2
0
−2
−4
0
2
4
6
8
10
−4
x 10
Figura 4: Sinais diferenciais A e B e a saída do SN65HVD11
A figura 6 mostra a transmissão do caracter ’a’ como dados, de notar que o 9o bit é
0, dado tratar-se de dados.
A figura 7 mostra o envio de 3 bytes por parte do nó, após a receção de um pedido
do master. É possível verificar o fim do último byte do pedido, que consiste em 0x03 com
o 9o bit a 0. Todos os bytes transmitidos são 0x15 e são enviados como dados (9o bit
a 0). Verifica-se que cada envio de 1 byte se inicia com um start bit e termina com um
stop bit. Verifica-se ainda que o sinal de Drive Enable é colocado a 1 quando se inicia a
transmissão (antes do envio do start bit), sendo reposto a 0 quando esta termina (logo
após o stop bit.
18
Receiver Signal
4
3
2
1
0
0
2
4
6
8
10
−4
x 10
Driver Signal
4
3
2
1
0
0
2
4
6
8
10
−4
x 10
Driver Enable
4
3
2
1
0
0
2
4
6
8
10
−4
x 10
Figura 5: Receção do caracter ’U’ (0x55) como endereço
Receiver Signal
4
3
2
1
0
0
2
4
6
8
10
−4
x 10
Driver Signal
4
3
2
1
0
0
2
4
6
8
10
−4
x 10
Driver Enable
4
3
2
1
0
0
2
4
6
8
10
−4
x 10
Figura 6: Receção do caracter ’a’ (0x61) como dados
19
Receiver Signal
4
2
0
1
2
3
4
5
6
−3
x 10
Driver Signal
4
2
0
1
2
3
4
5
6
−3
x 10
Driver Enable
4
2
0
1
2
3
4
5
6
−3
x 10
Figura 7: Envio de 3 valores após receção desse pedido
6
Protocolos de Teste
De cada vez que o utilizador liga um dispositivo, este executa uma série de testes e
inicializações antes de entrar no seu ciclo de execução normal. Estes testes têm como
objetivo garantir que certas funcionalidades do micro-controlador se encontram sem erros,
aumentando assim as garantias do bom funcionamento do dispositivo.
Na versão 1.0 do Firmware, estão implementados dois tipos de teste: um teste à
memória volátil (RAM) do micro-controlador implementando o algoritmo de teste March
X e um teste à memória não-volátil (Flash) através da implementação de um teste de
checksum.
6.1
March Test X - Teste de memória volátil
O algoritmo de teste de memória volátil March é bastante usado em teste de memórias
RAM de forma a tentar detetar células defeituosas, com falhas de transição, acoplamento,
entre outras. A base deste algoritmo é bastante simples, baseando-se no varrimento da
memória efetuando operações de escrita e leitura em cada posição, sendo o algoritmo
representado pela sua própria notação. No caso do teste March X esta seria:
m (w0); ⇑ (r0, w1); ⇓ (r1, w0); m (r0)
Interpretando a notação, cada célula corresponde a um varrimento do início ao fim da
zona em teste, a seta indica a direção que se deve tomar no endereçamento (do menor
20
endereço para o maior ou vice-versa) e uma operação deve incidir sobre um bit de cada
vez, levando a estas operações:
• Escrever 0 em ordem decrescente ou crescente
• Em ordem crescente, ler o valor 0 e escrever o valor 1
• Em ordem decrescente, ler o valor 1 e escrever o valor 0
• Em ordem crescente, ler o valor 0
Caso alguma destas leituras não retorne o valor esperado, o teste é falhado e há um
erro, levando à não execução do programa e indicação do erro através da passagem da
flag presente em memória flash para o valor 1.
Tendo sido apresentado e discutido o algoritmo implementado, passa-se à explicação de como este foi implementado. Utilizou-se como base uma biblioteca incompleta
fornecida pela Texas Instruments para o teste à memória RAM. Esta foi bastante modificada de forma a acomodar as características pretendidas. A zona de memória RAM
encontra-se dividida entre a zona de uso normal e a zona de stack. Enquanto a primeira
é passível de ser movimentada sem grandes problemas, a alteração dos valores guardados
na stack poderá levar ao mau funcionamento do programa, visto ser crucial na utilização
de funções. Assim, foi necessário aplicar métodos que permitissem o teste da zona de
stack sem levar à perda de informação.
Antes de implementar as funções de teste foi necessário criar uma zona na memória
que é utilizada como buffer para o armazenamento temporário da informação contida na
memória a ser testada. Assim, foi criada a zona SAFE_RAM com 16 bytes (correspondentes
a 8 posições de memória visto o micro-controlador utilizar blocos de 2 bytes) que permitiu
que o teste fosse executado em 128 bits de memória de cada vez de maneira nãodestrutiva.
A implementação do teste em si está dividida em 3 funções: uma função que executa
o algoritmo na zona passada por argumento, uma função de preparação do teste à stack
e uma última de preparação do teste ao resto da memória.
A função que implementa o algoritmo é bastante simples, executando um ciclo ao
longo do espaço de memória recebido para cada ponto previamente apresentado.
Visto o objetivo do teste à zona fora da stack é que seja não-destrutivo, a função de
preparação implementa o seguinte:
• Testa-se a zona a ser utilizada como buffer com o apoio da função que implementa
o teste. Se não fosse testada, não se poderia garantir a integridade dos dados lá
armazenados a cada iteração.
21
• Após o teste ser concluído com sucesso, é copiado para essa zona o primeiro bloco
de 128 bits de dados armazenado na primeira zona de memória a ser testada.
• Utiliza-se a função que implementa o algoritmo para testar a zona.
• Caso o teste seja bem sucedido, procede-se à reposição dos dados na zona testada
e passa-se aos próximos 128 bits.
• O processo de armazenamento em buffer, teste e reposição é repetido para todo o
endereçamento em causa
No caso da stack é necessário garantir que para a execução do programa, não há em
qualquer momento uma alteração não pretendida nos dados. Isto é conseguido através
da cópia de toda a stack para uma zona diferente de memória e alteração do Stack
Pointer para esse local. A stack implementada na aplicação apresenta 80 bytes, pelo que
a função de preparação faz o seguinte:
• Copia a stack para os 80 bytes de espaço de endereçamento "acima"do início da
stack, ou seja, serão utilizados 80 bytes da RAM como se fosse um buffer da stack
• Altera o Stack Pointer para a primeira posição da nova "stack"
• Executa o teste, utilizando a função para isso desenvolvida
• Repõe os dados da stack
• Retorna o Stack Pointer ao seu valor inicial
6.2
Flash Checksum - Teste de memória não-volátil
O teste de checksum da zona de Flash ocupada pelo programa e variáveis constantes
tem como objetivo tentar garantir que não existam erros nas instruções a executar no
decorrer do programa. Este teste efetua a função lógica XOR entre todas as posições da
zona em teste comparando o valor final com uma constante definida. Caso o valor final
seja diferente desta constante haverá um erro na Flash e o programa não será executado.
A constante utilizada no teste final do checksum é o valor 0. No entanto, foi preciso
garantir que o checksum realmente seria igual a este valor. De forma a consegui-lo
procedeu-se da seguinte forma:
1. Criou-se uma variável nesta zona inicialmente com o valor 0
2. Após compilar o programa, utilizando o Matlab, efetuou-se o checksum do programa resultante consultando o ficheiro de formato HEX
22
3. Tendo sido encontrado o checksum real do programa alterou-se o valor hexadecimal
no ficheiro HEX na posição da variável inicialmente criada com o valor 0 para o
valor obtido do checksum. Esta alteração fará com que o valor que será lido desta
posição leve a um checksum final igual a 0, tal como o pretendido
Tendo sido obtido o ficheiro de programação alterado com o checksum pretendido,
bastou programar o micro-controlador com esse ficheiro.
7
Circuito de Regulação
De modo a permitir a utilização do dispositivo com baterias, foi implementado um
circuito de regulação de modo a permitir o uso de 2 baterias de 1.5V (ou, possivelmente,
1.2V) em série para alimentar o circuito a 3.3V (dado este valor se encontrar na gama
recomendada de todos os integrados), e para garantir que a tensão seria minimamente
estável mesmo com o descarregar das baterias.
Para o conseguir foi utilizado o circuito integrado TL499A da Texas Instruments. Na
datasheet do produto é apresentada uma implementação básica (abaixo apresentada) e
que foi seguida no desenho do circuito para o dispositivo. De notar que apenas será
necessário definir o valor da resistência RE1 com base na seguinte equação:
Vout = 1.27 ∗ (1 +
RE1
)
4.7∗103
Com base no valor pretendido e nas resistências disponíveis foi utilizado o valor de
8.2kΩ.
Figura 8: Configuração básica do TL499A. Imagem retirada da datasheet do dispositivo
Visto o dispositivo poder funcionar como regulador, step-up e step-down estão disponíveis 2 entradas, sendo a pretendida para o caso desta aplicação a entrada SW REG
IN2. Assim, a bateria estará ligada a esta entrada, enquanto a saída será o Vdd do dispositivo. De notar também que o pino do micro-controlador a ser utilizado como ADC
23
estará também ligado ao pino SW REG IN2 do TL499A de modo a ser possível medir o
nível da bateria.
24
8
Protótipo Industrial
O protótipo do dispositivo final, com o circuito de alimentação incluído foi montado
e testado, sendo abaixo apresentada uma fotografia do mesmo, em operação com outro
protótipo ainda na placa de desenvolvimento.
Figura 9: Protótipo industrial à direita, ligado através de um barramento RS485 ao protótipo laboratorial à esquerda. De notar que o protótipo industrial encontra-se alimentado
a baterias.
25
9
Análise para Produção
Após a finalização do desenvolvimento verificou-se que se poderia substituir, sem
perda de qualquer funcionalidade e sem modificar mais do que o ficheiro que irá efetuar a
criação de secções de memória, o micro-controlador MSP430G2553 pelo MSP2353 que
apresenta menos memória total, mas suficiente para a aplicação.
Abaixo são apresentados algumas estimativas dos valores dos componentes mais influentes no custo total de produção do dispositivo.
Componente
Bobina 50µH - SMSC-500M-01
Condensador 470µF - EDK477M016A9MAA
Conector de 2 pinos - MOLEX 87438-0243
Conector de 3 pinos - MOLEX 87438-0343
LED SMD branco - LWL283-Q1R2-3K8L-1-Z
Switch - COM-00097
Regulador - TL499ACPSR
Sensor de temperatura - LM75ADP
Memória EEPROM - 24LC128-I/SN
Transceiver - SN65HVD11D
Micro-controlador (opção 1) - MSP430G2553
Micro-controlador (opção 2) - MSP430G2353
Quantidade
1
1
2
1
2
1
1
1
1
1
1
1
Preço unitário
0.29$
0.16$
0.15$
0.23$
0.44$
0.35$
0.92$
0.20$
0.50$
1.51$
1.07$
0.79$
Vendedor
Mouser
Farnell
Farnell
Farnell
Farnell
Sparkfun
Mouser
Farnell
Farnell
DigiKey
Farnell
DigiKey
Tabela 1: Valores de cada componente a ser utilizado
Assume-se que os elementos passivos não representados apresentam custos extremamente baixos. Utilizando a tabela acima apresentada é possível efetuar uma primeira
estimativa do custo total esperado dos materiais com a primeira ou a segunda opção de
micro-controlador:
• Opção 1 - 6.41$
• Opção 2 - 6.13$
Além disso, seria possível produzir várias versões do produto com EEPROMs iguais
mas de diferentes tamanhos. No código, apenas seria necessário alterar o #define que
contém o tamanho da EEPROM. Os preços variam entre 0.16$ para 1Kbit e 2.65$ para
1Mbit.
26
10
10.1
Manual de utilização
Para o utilizador final
Como já foi indicado, o produto é um nó de uma rede, funcionando a pilhas, de forma
autónoma. De origem, cada nó vem com o endereço 0x00, pelo que é necessário, a não
ser que se deseje utilizar apenas um nó, alterar este endereço. Isto pode ser feito ligando
o nó utilizando um barramento em que apenas existe esse nó e um master, endereçando
o nó como 0x00, e enviando o comando ’e’ seguido do endereço desejado (1 byte). Após
esta inicialização, o nó está pronto a ser colocado no barramento. O utilizador pode ainda
definir o periodo de amostragem da temperatura, utilizando o comando ’p’, seguido de
um número inteiro de 2 bytes que contém o período desejado, em segundos. Durante
o funcionamento normal do nó, este poderá, ou não, estar ligado ao barramento. Isso
não irá influenciar a sua operação. Sempre que o utilizador deseje ler valores medidos,
basta que envie o comando ’s’, seguido de um inteiro de 2 bytes que contem o número
de valores a ler. As medições serão, seguidamente, recebidas pelo barramento. Além
destes comandos, o utilizador pode inquirir qual o período de amostragem, utilizando
o comando ’t’, ou, caso não saiba o endereço de um nó, pode liga-lo ao master sem
qualquer outro nó presente no barramento, e enviar o comando ’a’, ao qual o nó irá
responder com o seu endereço.
10.2
Para programação e acesso específico
Os pinos Test e RST do micro-controlador estão disponíveis na placa de circuito
impresso. Estes pinos são utilizados para acesso específico a teste/debug e programação
do micro-controlador. Utilizando estes pinos é possível entrar em modo de teste, no qual
é possível não só programar o micro-controlador com um firmware diferente, mas também
consultar os valores das variáveis guardadas na flash ou efetuar testes mais específicos e
não implementados no firmware.
27
Figura 10: Esquemático do dispositivo.
1
87438-02
POWER-1
POWER-2
GND
IN_PWR
1
2
4
3
GND 2
GND
TEST
R1
2
1
2.2k +3V3
SERIES_IN1
L2
OUT
TL499A
GND
SW_IN
GND(PWR)
SW_CUR_CTRL
SW_REG_IN2
REF
S1
50uH
GND
4
3
5
6
7
8
C1
3
10nF
GND
GND
24/12/14 01:26 /home/joao/Local Programs/EAGLE/eagle/SELE/SELE 2014.sch (Sheet: 1/1)
E
D
C
87438-02
PROGRAM-1
PROGRAM-2
500
87438-03
R5
+
R2
8.2k
4.7k
B
R6
RS485-1
RS485-2
RS485-3
+3V3
470uF
C2
GND
R
A
B
U1
4
SN65HVD11D
1
6
7
GND
D
~RE
DE
VCC
1
2
3
4
IN_PWR 5
6
7
8
ON/OFF 9
STATUS10
11
12
13
14
15
16
+3V3
LED1
ON/OFF
GND
5
4
2
3
8
GND
R7
LED2
STATUS
MSP430
MSP430G2XX3
5
5
GND
R8
4
1k
3
1k
28
R3 +3V3
SDA
TP
32
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
SCL
2.2k
+3V3
GND
TEST
RST
SDA
SCL
GND
6
6
3
2
1
6
7
GND
SCL
A2
A1
A0
VCC
GND
SDA
SDA
O.S.
1
3
5
SDA
SDA
7
7
Turma 14, Grupo 10
Joao Martins , Rui Graca
TempSenseBoard
LM75AIM
U2
GND
24LC128ST
A2
A1
A0
SCL
WP
IC1
+VS
GND
4
5
6
7
SCL 2
8
SCL
EEPROM
Array
+3V3
8
4
2
+3V3
A
1
Sheet: 1/1
8
24/12/14 01:04
SELE 2014
REV: 1.0
8
E
D
C
B
A
Anexo A - Esquemático do dispositivo
Serve a seguinte imagem para apresentar o esquemático do dispositivo desenvolvido
no Eagle 7.2.0 Light, em formato reduzido. Uma versão em tamanho A3 será enviada
em formato físico para melhor análise.
+3V3
2.2k
R4
Anexo B - Circuito Impresso
O circuito foi desenvolvido utilizando o Eagle 7.2.0 Light, e as medidas apresentam-se
em milímetros.
Figura 11: Parte superior da PCB.
Figura 12: Parte inferior da PCB.
Figura 13: PCB completa.
29
Anexo C - Software Utilizado
Code Composer Studio 6
Este IDE é distribuído diretamente pela Texas Instruments Inc. para desenvolvimento
de firmware para produtos produzidos pela empresa. O micro-controlador escolhido para o
desenvolvimento deste projeto foi o MSP430G2553, que produzido pela Texas Instruments
Inc., pelo que foi utilizado este IDE para as fases de debug do projeto. O compilador de
C utilizado por este IDE é desenvolvido pela Texas Instruments, e a versão utilizada foi
a 4.3.5. A ferramenta oferece, entre outras, as seguintes capacidades:
• Execução passo-a-passo do programa.
• Visualização de variáveis durante a execução.
• Navegador da memória do micro-controlador durante a execução do programa.
• Verificador MISRA-C 2014.
mspdebug
Um outro debugger, com funcionalidades semelhantes às do Code Composer Studio,
que foi utilizado para verificação do teste da Flash
Eagle 7.2.0 Light
O desenvolvimento do esquemático e desenho do circuito impresso utilizaram a ferramenta Eagle 7.2.0 Light por duas razões:
• A facilidade de uso e quantidade de recursos disponíveis.
• A versão Light é gratuita.
VIM
O desenvolvimento (escrita) de uma grande porção do software foi efetuada utilizando
o VIM como editor.
30
11
Referências
MSP430G2x53, MSP430G2x13 Mixed Signal Microcontroller (Rev. J)
http://www.ti.com/lit/gpn/msp430g2353
MSP430x2xx Family User’s Guide (Rev. J)
http://www.ti.com/lit/pdf/slau144
70-V Fault-Protected RS-485 Transceiver (Rev. F)
http://www.ti.com/lit/gpn/sn65hvd1781
LM75A Digital Temperature Sensor and Thermal Watchdog with Two-Wire Interface (Rev. O)
http://www.ti.com/lit/gpn/lm75a
Wide-Range Power-Supply Controllers (Rev. G)
http://www.ti.com/lit/gpn/tl499a
Designing Switching Voltage Regulators With the TL499A
http://www.ti.com/lit/pdf/slva141
24AA128/24LC128/24FC128 Data Sheet (06/30/2010)
http://ww1.microchip.com/downloads/en/DeviceDoc/21191s.pdf
31