Medição de Temperatura com DS1820 Medição de Temperatura com DS1820 Objectivo: Projectar um termómetro, usando o sensor 1-wire DS1820 num PSoC. Material Necessário: Placa de desenvolvimento EasyPSoC4 da Mikroelektronica, sensor Dallas DS18B20 e LCD 2x16 (estes dois dispositivos são incluídos com EasyPSoC4). Pré-Requisitos: O utilizador deverá saber programar em C e ter noções básicas sobre PSoCs, nomeadamante sobre o chip CY8C27643 da Cypress. O software PSoC Designer deverá estar já instalado no PC, com a opção do software de programação em C da Imagecraft, escolhido como padrão (que pode ser utilizado gratuitamente por um período de 45 dias). Montagem do Circuito: Na placa EasyPSoC4 (que inclui como padrão o PSoC DIL CY8C27643 da Cypress), montar o display LCD 2x16 e o sensor de temperatura DS1820 ( ambos incluídos com o kit). Assegurar que o display GLCD não esteja montado na placa EasyPSoC4. Fig. 1 Diagrama de circuito de DS1820 montado na placa EasyPSoC4. 1 Medição de Temperatura com DS1820 NOTA: O interruptor 1 no SW3 deverá ser colocado na posição ON (e o 2 OFF), como nesta aplicação será utilizada a porta P0-2 do PSoC para ligar o sensor DS1820). Fig 2: Diagrama do circuito com ligações do sensor de temperatura e do LCD 2x16 Experiência: 1 – Instalação do módulo 1-wire O módulo 1-wire, no caso de já não estar instalado no software PSoC Express, está disponível no site da Cypress em: http://www.psocdeveloper.com/uploads/media/OneWire_v1.3.3.zip Colocar a pasta OneWireSW do zip em C:\Programas\Cypress MicroSystems\PSoC Designer\Data\Stdum, e depois executar o software Cypress Express. Fechar qualquer projecto aberto. Executar Refresh Manifest que se encontra no menú Tools, para que o módulo fique disponível. 2 – Projecto a) Iniciar novo projecto no PSoC Designer, dando-lhe um nome, como por exemplo DS1820. O software perguntará se se quer criar um novo directório, ao qual responder-se-á premindo Sim. Na janela seguinte escolhe-se C, premindo depois o botão Concluir. 2 Medição de Temperatura com DS1820 b) No PSoC Designer escolher LCD, que se encontra dentro de Misc Digital do módulo User Module Selection, premindo duas vezes sobre o ícone de LCD. A seguir escolher OneWireSW que se encontrará dentro de Digital Misc do módulo User Module Selection, premindo duas vezes sobre o ícone OneWireSW. c) Selected User Modules deverá ficar com os ícones, como se vê a seguir: d) Primir a seguir o botão (Interconnect View) para se poder configurar as ligações no PSoC. Para OneWireSW fazem-se as seguintes selecções: Para LCD fazem-se as seguintes selecções: No Gobal Resources alterar o relógio para 12_MHz (Sys_Clk/2), deixando os parâmetros restantes como aparecem automáticamente: 3 Medição de Temperatura com DS1820 e) A seguir, primir no botão gerará as aplicações. (Generate Application). O PSoC Designer f) Agora, primir no botão (Application Editor), e dentro de pasta ds1820 files e a sub-pasta Source files, abrir o ficheiro main.c e escrever o seguinte código, substituindo o croquit que é gerado automáticamente: //---------------------------------------------------------------------------// C main line // Medição de temperatura com DS1820 // Autor: Tayeb Habib – Aliatron email: [email protected] // Código adaptado de http://narong.engr.tu.ac.th/microlab/doc //---------------------------------------------------------------------------#include <m8c.h> #include "PSoCAPI.h" #include <stdlib.h> // especificação de constantes e macros // Definições de API PSoC para todos Módulos char TextBuff[5]; unsigned char TLSB, TMSB, TempI; int TempP; void main() { LCD_1_Start(); LCD_1_Position(0,0); LCD_1_PrCString("1-Wire & DS18B20"); OneWireSW_1_Start(); while(1) { OneWireSW_1_Reset(); OneWireSW_1_WriteByte(0xCC); OneWireSW_1_WriteByte(0x44); //inicializa pino 1-Wire //reset de 1-Wire //comando skip ROM //comando de conversão //temperatura OneWireSW_1_Delay10mTimes(90); //espera 900ms para //conversão OneWireSW_1_Reset(); OneWireSW_1_WriteByte(0xCC); OneWireSW_1_WriteByte(0xBE); //reset de 1-Wire //comando skip ROM //comando de leitura de //Scratch Pad TLSB = OneWireSW_1_ReadByte(); //lêr dados LSB TMSB = OneWireSW_1_ReadByte(); //lêr dados MSB 4 Medição de Temperatura com DS1820 TempI = (TLSB >> 1) & 0x7F; TempI = TempI | (TMSB & 0x80); TempP = TLSB & 0x01; itoa(TextBuff,TempI,10); LCD_1_Position(1,0); LCD_1_PrCString("Temp = "); LCD_1_PrString(TextBuff); //temperatura em forma de //inteiros //ponto binário de //temperatura //converter dados para //ASCII //ajuste de posição de LCD //escrever dados no LCD TempP = TempP * 5; //converter para ponto //decimal itoa(TextBuff,TempP,10); LCD_1_PrCString("."); LCD_1_PrString(TextBuff); LCD_1_PrCString(" C "); //mostrar ponto decimal } g) Finalmente primir no botão (Build). O resultado poderá ser visto na janela Build da parte inferior de PSoC Designer, e que será: Starting MAKE... creating project.mk lib/lcd_1.asm lib/onewiresw_1.asm lib/psocconfig.asm lib/psocconfigtbl.asm ./boot.asm ./main.c Linking.. ROM 13% full. 2088 bytes used (does not include absolute areas). RAM 8% full. 23 bytes used (does not include stack usage). ds1820 - 0 error(s) 0 warning(s) 15:37:06 h) O ficheiro ds1820.hex será gerado, o qual pode agora ser utilizado para programar o PSoC da placa EasyPSoC4. Quando programado o hex, o display LCD 2x16 mostrará a temperatura actual, a qual pode ser alterada, tocando com um dedo no sensor DS1820. 5 Medição de Temperatura com DS1820 Considerações Finais: Montar um buzzer e adicionar à aplicação de modo que o PSoC toque um tom, cada vez que este efectue uma leitura de temperatura no sensor DS1820. Bibliografia: http://www.aliatron.com/loja/catalog/advanced_search_result.php?keywords =pSOC&search_in_description=1 http://www.cypress.com/products/index.jsp?fid=24&rpn=CY8C27643 http://www.psocdeveloper.com/uploads/media/OneWire_v1.3.3.zip www.engricardofranco.kit.net/scapitulo-1.pdf www.engricardofranco.kit.net/scapitulo-2.pdf www.engricardofranco.kit.net/scapitulo-3.pdf http://narong.engr.tu.ac.th/microlab/doc 6