En este ejercicio, debemos leer la temperatura mediante un TC77 utilizando la comunicación SPI y un PIC18F4550. Se mostrará la temperatura en un lcd.
Antes de nada debemos estudiar el funcionamiento del TC77, para ello vamos al datasheet.
Una vez tengamos las cosas mas claras es hora de pasar a programar el pic, con el Pic c Compiler, como hasta ahora.
//////////////////////////////////////////////////////////////////////////////
// AUTOR: Diego Lavín Fernández Abril-2011 //
//////////////////////////////////////////////////////////////////////////////
// PROGRAMA: LEER TEMPERATURA DE UN TC77 VERSIÓN:
// DISPOSITIVO: PIC18F4550 COMPILADOR: CCS vs4.93
// Entorno IDE: SIMULADOR: Proteus 7.7 sp2
// TARJETA DE APLICACIÓN: DEBUGGER:
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//Leer temperatura desde tc77 //
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// CABECERA //////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
#include <18F4550.h>
#fuses INTHS //oscilador interno
#use delay(internal=8Mhz)
#include
//////////////////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES ////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
long int a,b;
int th,tl;
//////////////////////////////////////////////////////////////////////////////
// FUNCIONES /////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// PRINCIPAL /////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
void main(void)
{
setup_spi(spi_master | spi_l_to_h | spi_clk_div_16); //configurar spi como maestro
lcd_init(); //iniciar lcd
lcd_gotoxy(1,1); //cursor lcd a posicion 1,1
lcd_putc("Temperatura:"); //escribe en lcd
for (;;)
{
a=0;
b=0;
output_low(pin_a0); //habilito cs
th=spi_read(0x00); //leo valor de th
if(bit_test(th,6)){a=a+128.0;}
if(bit_test(th,5)){a=a+64.0;}
if(bit_test(th,4)){a=a+32.0;}
if(bit_test(th,3)){a=a+16.0;}
if(bit_test(th,2)){a=a+8.0;}
if(bit_test(th,1)){a=a+4.0;}
if(bit_test(th,0)){a=a+2.0;}
tl=spi_read(0x00);
if(bit_test(tl,7)){a=a+1.0;}
if(bit_test(tl,6)){b=b+500;}
if(bit_test(tl,5)){b=b+250;}
if(bit_test(tl,4)){b=b+125;}
output_high(pin_a0);
delay_ms(100);
lcd_gotoxy(1,2);
if(bit_test(th,7))
{
a=511-(a+256);
printf(lcd_putc,"-%lu",a);
b=1000-b;
}
else{
printf(lcd_putc,"%lu",a);
}
printf(lcd_putc,".%lu ",b);
}
}
// AUTOR: Diego Lavín Fernández Abril-2011 //
//////////////////////////////////////////////////////////////////////////////
// PROGRAMA: LEER TEMPERATURA DE UN TC77 VERSIÓN:
// DISPOSITIVO: PIC18F4550 COMPILADOR: CCS vs4.93
// Entorno IDE: SIMULADOR: Proteus 7.7 sp2
// TARJETA DE APLICACIÓN: DEBUGGER:
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//Leer temperatura desde tc77 //
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// CABECERA //////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
#include <18F4550.h>
#fuses INTHS //oscilador interno
#use delay(internal=8Mhz)
#include
//////////////////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES ////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
long int a,b;
int th,tl;
//////////////////////////////////////////////////////////////////////////////
// FUNCIONES /////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// PRINCIPAL /////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
void main(void)
{
setup_spi(spi_master | spi_l_to_h | spi_clk_div_16); //configurar spi como maestro
lcd_init(); //iniciar lcd
lcd_gotoxy(1,1); //cursor lcd a posicion 1,1
lcd_putc("Temperatura:"); //escribe en lcd
for (;;)
{
a=0;
b=0;
output_low(pin_a0); //habilito cs
th=spi_read(0x00); //leo valor de th
if(bit_test(th,6)){a=a+128.0;}
if(bit_test(th,5)){a=a+64.0;}
if(bit_test(th,4)){a=a+32.0;}
if(bit_test(th,3)){a=a+16.0;}
if(bit_test(th,2)){a=a+8.0;}
if(bit_test(th,1)){a=a+4.0;}
if(bit_test(th,0)){a=a+2.0;}
tl=spi_read(0x00);
if(bit_test(tl,7)){a=a+1.0;}
if(bit_test(tl,6)){b=b+500;}
if(bit_test(tl,5)){b=b+250;}
if(bit_test(tl,4)){b=b+125;}
output_high(pin_a0);
delay_ms(100);
lcd_gotoxy(1,2);
if(bit_test(th,7))
{
a=511-(a+256);
printf(lcd_putc,"-%lu",a);
b=1000-b;
}
else{
printf(lcd_putc,"%lu",a);
}
printf(lcd_putc,".%lu ",b);
}
}
Cuando finalicemos, hay que montar el circuito en Proteus y comprobar que la temperatura que marca el TC77 es igual a la que se nos muestra por el lcd (milésimas arriba o abajo, ya que cuanto más preciso lo querramos, mas largo se hace el programa).
También hay que comprobar que en el SPI debugger esté actuando correctamente y que envíe los datos que debe enviar.
Cuando comprobemos que todo está bien, vamos al Ares y creamos nuestra placa:
Vista en 3d:
Para descargar los archivos: AQUI
0 comentarios:
Publicar un comentario