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