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.
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
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:
e) A seguir, primir no botão (Generate Application). O PSoC Designer gerará as aplicações.
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: tayeb.habib@aliatron.pt // Código adaptado de http://narong.engr.tu.ac.th/microlab/doc
//--- #include <m8c.h> // especificação de constantes e macros
#include "PSoCAPI.h" // Definições de API PSoC para todos Módulos #include <stdlib.h>
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(); //inicializa pino 1-Wire while(1)
{
OneWireSW_1_Reset(); //reset de 1-Wire OneWireSW_1_WriteByte(0xCC); //comando skip ROM
OneWireSW_1_WriteByte(0x44); //comando de conversão //temperatura
OneWireSW_1_Delay10mTimes(90); //espera 900ms para //conversão
OneWireSW_1_Reset(); //reset de 1-Wire OneWireSW_1_WriteByte(0xCC); //comando skip ROM OneWireSW_1_WriteByte(0xBE); //comando de leitura de //Scratch Pad
TempI = (TLSB >> 1) & 0x7F;
TempI = TempI | (TMSB & 0x80); //temperatura em forma de //inteiros
TempP = TLSB & 0x01; //ponto binário de //temperatura
itoa(TextBuff,TempI,10); //converter dados para
//ASCII
LCD_1_Position(1,0); //ajuste de posição de LCD
LCD_1_PrCString("Temp = "); //escrever dados no LCD
LCD_1_PrString(TextBuff);
TempP = TempP * 5; //converter para ponto
//decimal
itoa(TextBuff,TempP,10); //mostrar ponto decimal
LCD_1_PrCString(".");
LCD_1_PrString(TextBuff);
LCD_1_PrCString(" C "); }
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.
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.