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
Download

Medição de Temperatura com DS1820