Post on 12-Jan-2016
description
Martha Mite M.Martha Mite M.Andrés Contreras O.Andrés Contreras O.
MSc. Carlos ValdivieMSc. Carlos Valdiviezozo
““Interfaz gráfica con pantalla LCD táctil para analizar Interfaz gráfica con pantalla LCD táctil para analizar señales de termocuplas tipo K, J, T usando el integrado señales de termocuplas tipo K, J, T usando el integrado
DS2760 de Dallas/Maxim y un microcontrolador”DS2760 de Dallas/Maxim y un microcontrolador”
Objetivos del proyecto:Objetivos del proyecto: El objetivo de nuestro proyecto es El objetivo de nuestro proyecto es
utilizar la interfaz gráfica de una utilizar la interfaz gráfica de una pantalla GLCD táctil para mostrar a pantalla GLCD táctil para mostrar a través de ésta, el comportamiento de través de ésta, el comportamiento de las señales de las termocuplas, las señales de las termocuplas, usando el kit de Termocuplas DS2760.usando el kit de Termocuplas DS2760.
KIT DE TERMOCUPLAS:
DS-2760TERMOCUPLAS K, J, T
MICROCONTROLADORPIC18F4520
INGRESO DE DATOS
GLCD+
PANTALLA TACTIL
MEMORIA SD 1GB
RTC DS3234
DiagramDiagrama de a de
BloquesBloques
KIT DE TERMOCUPLAS:
DS-2760TERMOCUPLAS K, J, T
MICROCONTROLADORPIC18F4520
MODULO DE ADQUISICION Y
SENSORES
INGRESO DE DATOS
GLCD+
PANTALLA TACTIL
1-wire
MEMORIA SD 1GB
RTC DS3234
spi
spi
KIT DE TERMOCUPLAS:
DS-2760TERMOCUPLAS K, J, T
MICROCONTROLADORPIC18F4520
MODULO DE ADQUISICION Y
SENSORES
INGRESO DE DATOS
GLCD+
PANTALLA TACTIL
· Se accede a registros (tablas de termocuplas).
· Calculos matemáticos para la conversión de temperatura.
· ADC, convertir el voltaje AC en señal binaria.
VISUALIZACION DE RESULTADOS
1-wire
MEMORIA SD 1GB
RTC DS3234
KIT DE TERMOCUPLAS:
DS-2760TERMOCUPLAS K, J, T
MICROCONTROLADORPIC18F4520
MODULO DE ADQUISICION Y
SENSORES
INGRESO DE DATOS
GLCD+
PANTALLA TACTIL
· Se accede a registros (tablas de termocuplas).
· Calculos matemáticos para la conversión de temperatura.
· ADC, convertir el voltaje AC en señal binaria.
VISUALIZACION DE RESULTADOS
Protocolo 1-wire
MEMORIA SD 1GB
RTC DS3234
KIT DE TERMOCUPLAS:
DS-2760TERMOCUPLAS K, J, T
MICROCONTROLADORPIC18F4520
MODULO DE ADQUISICION Y
SENSORES
INGRESO DE DATOS
GLCD+
PANTALLA TACTIL
· Se accede a registros (tablas de termocuplas).
· Calculos matemáticos para la conversión de temperatura.
· ADC, convertir el voltaje AC en señal binaria.
VISUALIZACION DE RESULTADOS
1-wire
MEMORIA SD 1GB
RTC DS3234
spi
spi
KIT DE TERMOCUPLAS:
DS-2760TERMOCUPLAS K, J, T
MICROCONTROLADORPIC18F4520
MODULO DE ADQUISICION Y
SENSORES
INGRESO DE DATOS
GLCD+
PANEL TACTIL
· Se accede a registros (tablas de termocuplas).
· Calculos matemáticos para la conversión de temperatura.
· ADC, convertir el voltaje AC en señal binaria.
VISUALIZACION DE RESULTADOS
1-wire
MEMORIA SD 1 GB
RTC DS3234
spi
spi
Descripción del Proyecto:Descripción del Proyecto: El alcance del kit de las termocuplas es El alcance del kit de las termocuplas es
entender el funcionamiento de estas, para entender el funcionamiento de estas, para lograr obtener las temperaturas sensadas en lograr obtener las temperaturas sensadas en los diferentes ambientes que se le presente. los diferentes ambientes que se le presente.
Una vez que se logra la comunicación del Una vez que se logra la comunicación del módulo adquisitivo de datos con el módulo adquisitivo de datos con el microcontrolador se ingresan las tablas de microcontrolador se ingresan las tablas de datos de las temperaturas. Para mostrar el datos de las temperaturas. Para mostrar el resultado que será una gráfica de Temperatura resultado que será una gráfica de Temperatura en función del tiempo.en función del tiempo.
Pantalla GLCD.Pantalla GLCD.Conexión de GLCD táctil a microcontrolador:Conexión de GLCD táctil a microcontrolador:
Kit de termocuplas DS2760, Dallas/Maxim.Kit de termocuplas DS2760, Dallas/Maxim.
Esta compuesto por el Esta compuesto por el
módulo de adquisición de módulo de adquisición de
Datos el chip DS2760 y Datos el chip DS2760 y
las termocuplas K, J, T.las termocuplas K, J, T.
Termocuplas:Termocuplas: Una termocupla es un transductor de temperatura, es Una termocupla es un transductor de temperatura, es
un dispositivo que traduce una magnitud física en una un dispositivo que traduce una magnitud física en una
señal eléctrica.señal eléctrica.
Son sensores de temperatura utilizados a nivel Son sensores de temperatura utilizados a nivel
industrial, y a altas temperaturas.industrial, y a altas temperaturas.
Está compuesta por dos alambres de diferentes Está compuesta por dos alambres de diferentes
metales, que unidos de forma conveniente generarán metales, que unidos de forma conveniente generarán
entre sus extremos libres una diferencia de potencial entre sus extremos libres una diferencia de potencial
proporcional a la diferencia de temperatura entre ellos. proporcional a la diferencia de temperatura entre ellos.
Principio de las Termocuplas “Voltaje de Principio de las Termocuplas “Voltaje de Seebeck”Seebeck”
Tiene este nombre debido a que el Tiene este nombre debido a que el
científico Seebeck realizó el descubrimiento científico Seebeck realizó el descubrimiento
en el año de 1821, este principio dice: “si en el año de 1821, este principio dice: “si
se sueldan 2 metales diferentes, cuyos se sueldan 2 metales diferentes, cuyos
extremosextremos están a distintas temperaturas, están a distintas temperaturas,
aparece una fuerza electromotriz (voltaje de aparece una fuerza electromotriz (voltaje de
Seebeck)”.Seebeck)”.
Los retos de utilizar las termocuplas en el Los retos de utilizar las termocuplas en el
proyecto, consiste en:proyecto, consiste en:
Obtener medición precisa muy baja ( en Obtener medición precisa muy baja ( en
fracciones milivoltios).fracciones milivoltios).
Hallar el voltaje de Salida de termocupla Hallar el voltaje de Salida de termocupla
(Voltaje de Seebeck).(Voltaje de Seebeck).
Realizar la compensación de temperatura de la Realizar la compensación de temperatura de la
punta fría.punta fría.
Tipos de Termocuplas:Tipos de Termocuplas:
Módulo DS2760:Módulo DS2760: Para resolver los retos que trae el uso de termocuplas Para resolver los retos que trae el uso de termocuplas
en la medición de temperatura, se usa el chip DS2760, en la medición de temperatura, se usa el chip DS2760, un módulo sencillo y eficaz, configurado para resolver un módulo sencillo y eficaz, configurado para resolver esos inconvenientes.esos inconvenientes.
El DS2760 es un circuito integrado utilizado para El DS2760 es un circuito integrado utilizado para adquirir los datos y cuenta con una memoria de datos adquirir los datos y cuenta con una memoria de datos no volátil donde se almacenan los datos de la variable no volátil donde se almacenan los datos de la variable sensada.sensada.
Este puede comunicarse como esclavo por medio de Este puede comunicarse como esclavo por medio de la red 1-wire, compatible con software de la red 1-wire, compatible con software de programación del microcontrolador.programación del microcontrolador.
En este caso lo utilizaremos para la obtención de datos En este caso lo utilizaremos para la obtención de datos de temperatura.de temperatura.
Características del módulo:Características del módulo: Interfaz de comunicación con protocolo 1-wire.Interfaz de comunicación con protocolo 1-wire. Módulo contiene un monitor de baterías Li de alta Módulo contiene un monitor de baterías Li de alta
precisión.precisión. Incluye un sensor de temperatura integrado en chip, Incluye un sensor de temperatura integrado en chip,
que mide continuamente la temperatura de la batería.que mide continuamente la temperatura de la batería. Este es usado para calcular la compensación de Este es usado para calcular la compensación de
voltaje según la temperatura en la punta de referencia voltaje según la temperatura en la punta de referencia de termocupla.de termocupla.
Bajo consumo de potencia, 90uA activo – 2uA Bajo consumo de potencia, 90uA activo – 2uA suspensión.suspensión.
• Dallas Semiconductor ha desarrollado una poderosa tecnología Dallas Semiconductor ha desarrollado una poderosa tecnología
llamada 1-Wire, la cual utiliza un solo conductor más su conexión llamada 1-Wire, la cual utiliza un solo conductor más su conexión
a tierra para efectuar las comunicaciones y la transmisión de a tierra para efectuar las comunicaciones y la transmisión de
energía entre un dispositivo maestro y múltiples esclavos. energía entre un dispositivo maestro y múltiples esclavos.
• Una red de dispositivos 1-Wire está conformada por un maestro y Una red de dispositivos 1-Wire está conformada por un maestro y
uno o más esclavos que poseen un único pin de datos de tipo uno o más esclavos que poseen un único pin de datos de tipo
“opendrain”, al que se conecta una resistencia de “Pull Up” “opendrain”, al que se conecta una resistencia de “Pull Up”
anclada a +5VDC (nominal). anclada a +5VDC (nominal).
• El BUS 1-Wire, tiene una comunicación serial asincrónica entre El BUS 1-Wire, tiene una comunicación serial asincrónica entre
un dispositivo maestro y uno o varios dispositivos esclavos.un dispositivo maestro y uno o varios dispositivos esclavos.
Protocolo 1-wire:Protocolo 1-wire:
PIC18F4520:PIC18F4520:
Ejemplo práctico de medición de temperatura Ejemplo práctico de medición de temperatura con termocuplas:con termocuplas:
Tabla de Termocupla J:Tabla de Termocupla J:
Diagrama de flujoDiagrama de flujo
Diagrama Diagrama de flujode flujo
MENUS Tipo K, J, TLee SD,
GRAFICA EJES
TEMPERATURA
Temperatura vs tiempo
LEO DATOS RTC
ALMACENO EN REGISTRO INTERNO
512 bytes
GRAFICO
GRABA EN SD
SI
NO
segundos, minutos, horas, dias, meses, años.
Graba 512 bytes en SD
Grafica temperatura
MUESTREO
CONVERSIONMuestra en pantalla
Fecha/hora
MENUS
fin
LOGO
PRESENTACION
CONEXION
MENU SD
MENU TERMOCUPLAS
TIEMPO DE MUESTREO
TECLA
TECLAVALIDACION
TECLAVALIDACION
TECLAVALIDACION
NO
2S
2S
NO
SI
NO
SI
NO
SI1
1
MENUS Tipo K, J, TLee SD,
GRAFICA EJES
TEMPERATURA
Temperatura vs tiempo
LEO DATOS RTC
ALMACENO EN REGISTRO INTERNO
512 bytes
GRAFICO
GRABA EN SD
SI
NO
segundos, minutos, horas, dias, meses, años.
Graba 512 bytes en SD
Grafica temperatura
MUESTREO
CONVERSIONMuestra en pantalla
Fecha/hora
TEMPERATURA
fin
LEER REGITRO DE CORRIENTE
CALCULO VOTAJE
SEEBECK
LEER REGITRO DE
TEMPERATURA
BUSQUEDA BINARIA
SUMAMOS VOLTAJES
HALLAMOS LA TEMPERATURA
DE LA UNION
TERMO K
BUSQUEDA BINARIA
TERMO J
1
1
TERMO T
FLAG2=1
FLAG2=2
FLAG2=3
MENUS Tipo K, J, TLee SD,
GRAFICA EJES
TEMPERATURA
Temperatura vs tiempo
LEO DATOS RTC
ALMACENO EN REGISTRO INTERNO
512 bytes
GRAFICO
GRABA EN SD
SI
NO
segundos, minutos, horas, dias, meses, años.
Graba 512 bytes en SD
Grafica temperatura
MUESTREO
CONVERSIONMuestra en pantalla
Fecha/hora
MENUS Tipo K, J, TLee SD,
GRAFICA EJES
TEMPERATURA
Temperatura vs tiempo
LEO DATOS RTC
ALMACENO EN REGISTRO INTERNO
512 bytes
GRAFICO
GRABA EN SD
SI
NO
segundos, minutos, horas, dias, meses, años.
Graba 512 bytes en SD
Grafica temperatura
MUESTREO
CONVERSIONMuestra en pantalla
Fecha/hora
Tiempo de muestreo1,3,5 seg
LEER DATOSRTC
fin
SPI1_WRITE (0X00)
SPI1_READ (DUMMY)
HORA,MINUTOS,SEGUNDO,DIA,
MES,AÑO
8 REGISTROS
FUNCIONAMIENTO FUNCIONAMIENTO
DELDEL
PROGRAMAPROGRAMA
ANTECEDENTESANTECEDENTES
COMPILADOR MIKRO C (LENGUAJE C)COMPILADOR MIKRO C (LENGUAJE C)
LIBRERIAS A USAR:LIBRERIAS A USAR:
• ADC : CONVERTIR SEÑALES ANALOGAS EN BINARIASADC : CONVERTIR SEÑALES ANALOGAS EN BINARIAS
• Adc_readAdc_read
• GLCD: FUNCIONES DE GLCDGLCD: FUNCIONES DE GLCD
• Glcd_Image, Glcd_Write_Text, Glcd_Rectangle,Glcd_fillGlcd_Image, Glcd_Write_Text, Glcd_Rectangle,Glcd_fill
• ONE_WIRE :COMUNICACIÓN CON KIT DS2760ONE_WIRE :COMUNICACIÓN CON KIT DS2760
• Ow_ResetOw_Reset , , Ow_Read, Ow_WriteOw_Read, Ow_Write
• EEPROM: GUARDAR DATOS DE TEMPERATURAS EEPROM: GUARDAR DATOS DE TEMPERATURAS
• EEPROM READ; EEPROM WRITEEEPROM READ; EEPROM WRITE
• CONVERSIONS : CONVERSIONES DE TIPOS DE DATOSCONVERSIONS : CONVERSIONES DE TIPOS DE DATOS
• ByteToStr , WordToStrByteToStr , WordToStr
• TIME : PARA GENERAR RETARDOSTIME : PARA GENERAR RETARDOS
• Delay_msDelay_ms
DECLARACION DE VARIABLES, DECLARACION DE VARIABLES, CONSTANTES Y DEFINICION DE CONSTANTES Y DEFINICION DE FUNCIONESFUNCIONES
PROGRAMA PRINCIPALPROGRAMA PRINCIPAL IMPLEMENTACION DE FUNCIONESIMPLEMENTACION DE FUNCIONES
Estructura del ProgramaEstructura del Programa
Declaración de variables y funcionesDeclaración de variables y funciones TABLAS DE CONVERSIÓN DE TERMOCUPLAS K ,J Y TTABLAS DE CONVERSIÓN DE TERMOCUPLAS K ,J Y T
unsigned temp_K,temp_J,temp_T; // VARIABLES TEMPORALESunsigned temp_K,temp_J,temp_T; // VARIABLES TEMPORALES const code unsigned K_table_pos[1024]; // TABLA DE COMPENSACION DE TERMOCUPLA Kconst code unsigned K_table_pos[1024]; // TABLA DE COMPENSACION DE TERMOCUPLA K const code unsigned J_table_pos[1024]; // TABLA DE COMPENSACION DE TERMOCUPLA Jconst code unsigned J_table_pos[1024]; // TABLA DE COMPENSACION DE TERMOCUPLA J const code unsigned T_table_pos[401]; // TABLA DE COMPENSACION DE TERMOCUPLA Tconst code unsigned T_table_pos[401]; // TABLA DE COMPENSACION DE TERMOCUPLA T
VARIABLES GLCDVARIABLES GLCD char GLCD_DataPort at PORTD; // CONFIGURACION PUERTOS PARA GLCDchar GLCD_DataPort at PORTD; // CONFIGURACION PUERTOS PARA GLCD sbit GLCD_CS1 at RB0_bit;sbit GLCD_CS1 at RB0_bit; sbit GLCD_CS2 at RB1_bit;sbit GLCD_CS2 at RB1_bit; sbit GLCD_RS at RB2_bit;sbit GLCD_RS at RB2_bit; sbit GLCD_RW at RB3_bit;sbit GLCD_RW at RB3_bit; sbit GLCD_EN at RB4_bit;sbit GLCD_EN at RB4_bit; sbit GLCD_RST at RB5_bit;sbit GLCD_RST at RB5_bit; sbit GLCD_CS1_Direction at TRISB0_bit;sbit GLCD_CS1_Direction at TRISB0_bit; sbit GLCD_CS2_Direction at TRISB1_bit;sbit GLCD_CS2_Direction at TRISB1_bit; sbit GLCD_RS_Direction at TRISB2_bit;sbit GLCD_RS_Direction at TRISB2_bit; sbit GLCD_RW_Direction at TRISB3_bit;sbit GLCD_RW_Direction at TRISB3_bit; sbit GLCD_EN_Direction at TRISB4_bit;sbit GLCD_EN_Direction at TRISB4_bit; sbit GLCD_RST_Direction at TRISB5_bit;sbit GLCD_RST_Direction at TRISB5_bit;
VARIABLES GLOBALESVARIABLES GLOBALES const code char PRESENTACION [1024]; // IMAGEN DE PRESENTACIONconst code char PRESENTACION [1024]; // IMAGEN DE PRESENTACION
unsigned Y,tmp5;unsigned Y,tmp5; unsigned X,tmp4;unsigned X,tmp4; unsigned short flag; // bandera de seleccion de termocuplaunsigned short flag; // bandera de seleccion de termocupla
Variables Globales (2)Variables Globales (2) unsigned x_coord128,y_coord64; //variables de posicionunsigned x_coord128,y_coord64; //variables de posicion unsigned cjComp,temp, unsigned cjComp,temp,
tCuV,tCuVtemp,tmpCJ,tmpCJtemp,tblHi,tblLo,eePntr,testVal;tCuV,tCuVtemp,tmpCJ,tmpCJtemp,tblHi,tblLo,eePntr,testVal; unsigned short tCuV_H,tCuV_L,sign, unsigned short tCuV_H,tCuV_L,sign,
tmpCJ_H,tmpCJ_L,sign2,tempC,V_Seebeck,T_UniontmpCJ_H,tmpCJ_L,sign2,tempC,V_Seebeck,T_Union ;; int ii,i,error;int ii,i,error; char *Text=“ ";char *Text=“ "; char *Text1=“ ";char *Text1=“ "; unsigned posx,tmpY; // grafico Tvstunsigned posx,tmpY; // grafico Tvst
Definicion de funcionesDefinicion de funciones void Detecion_Tecla(); // detecta el toque del tecladovoid Detecion_Tecla(); // detecta el toque del teclado unsigned short elegir_termo (unsigned x_coord128, unsigned unsigned short elegir_termo (unsigned x_coord128, unsigned
y_coord64);y_coord64); void delay2S(); // Funcion de delay de 2svoid delay2S(); // Funcion de delay de 2s unsigned GetX(); // lee posicion xunsigned GetX(); // lee posicion x unsigned GetY(); // lee posicion yunsigned GetY(); // lee posicion y
void Busqueda_Binaria(); // algoritmo para hallar la temperaturavoid Busqueda_Binaria(); // algoritmo para hallar la temperatura unsigned Voltaje_Seebeck();unsigned Voltaje_Seebeck(); unsigned Temperatura_Union (); // calcula la temperatura de contactounsigned Temperatura_Union (); // calcula la temperatura de contacto void CALCULA_TEMPERATURA(); // calcula la temperatura en gradosvoid CALCULA_TEMPERATURA(); // calcula la temperatura en grados void grafico_k(); grafica T vs tvoid grafico_k(); grafica T vs t
Programa PrincipalPrograma Principal void main() {void main() { OSCCON=0X7E;OSCCON=0X7E; ADCON0 = 0x17;ADCON0 = 0x17; ADCON1 = 0x0C;ADCON1 = 0x0C; TRISA = 0x07; // RA0 i RA1 are analog inputsTRISA = 0x07; // RA0 i RA1 are analog inputs TRISC = 0; // PORTC is outputTRISC = 0; // PORTC is output PORTC = 0;PORTC = 0; Glcd_Init (); //Inicializa GLCDGlcd_Init (); //Inicializa GLCD Glcd_Fill (0x00);Glcd_Fill (0x00); tmp4=0;tmp4=0; tmp5=0;tmp5=0; X=0;X=0; Y=0;Y=0; x_coord128=0;x_coord128=0; y_coord64=0;y_coord64=0; delay_ms(200);delay_ms(200); while (1)while (1) {{ Glcd_Image (truck_bmp);Glcd_Image (truck_bmp); delay_ms(200);delay_ms(200); Detecion_Tecla();Detecion_Tecla(); Glcd_Fill (0x00);Glcd_Fill (0x00); delay_ms(2);delay_ms(2); Glcd_Write_Text("MENU TERMOCUPLAS",20,0,1);Glcd_Write_Text("MENU TERMOCUPLAS",20,0,1); Glcd_Rectangle(20,7,100,18,1) ;Glcd_Rectangle(20,7,100,18,1) ; Glcd_Write_Text("TERMOCUPLA K",22,1,1);Glcd_Write_Text("TERMOCUPLA K",22,1,1); Glcd_Rectangle(20,23,100,34,1) ;Glcd_Rectangle(20,23,100,34,1) ; Glcd_Write_Text("TERMOCUPLA J",32,3,1);Glcd_Write_Text("TERMOCUPLA J",32,3,1); Glcd_Rectangle(20,39,100,50,1) ;Glcd_Rectangle(20,39,100,50,1) ; Glcd_Write_Text("TERMOCUPLA T",32,5,1);Glcd_Write_Text("TERMOCUPLA T",32,5,1); Glcd_Rectangle(30,55,90,64,1) ;Glcd_Rectangle(30,55,90,64,1) ; Glcd_Write_Text("SALIR",35,7,1);Glcd_Write_Text("SALIR",35,7,1); Detecion_Tecla();Detecion_Tecla(); flag= elegir_termo(x_coord128,y_coord64);flag= elegir_termo(x_coord128,y_coord64); Glcd_Write_Text(txt,1,2,0);Glcd_Write_Text(txt,1,2,0); Glcd_Fill (0x00);Glcd_Fill (0x00);
continuacióncontinuación while(1)while(1) {{ Glcd_Fill (0x00);Glcd_Fill (0x00); posx=0;posx=0; ii=0;ii=0; while(1)while(1) {{ CALCULA_TEMPERATURA();CALCULA_TEMPERATURA(); EEPROM_Write(ii,tempC ); // escribe datos en la memoria eepromEEPROM_Write(ii,tempC ); // escribe datos en la memoria eeprom Delay_ms(5);Delay_ms(5); ii++;ii++; if(ii==83)if(ii==83) break;break; }} Detecion_Tecla(); Detecion_Tecla(); ii=0; // selección de localidad de la memoria EEPROMii=0; // selección de localidad de la memoria EEPROM while(1)while(1) {{ tempC=EEPROM_Read(ii); // lee los datos de EEPROMtempC=EEPROM_Read(ii); // lee los datos de EEPROM Delay_ms(2);Delay_ms(2); grafico_k();grafico_k(); ByteToStr(tempC, txt);ByteToStr(tempC, txt); Glcd_Write_Text(txt,1,2,0);Glcd_Write_Text(txt,1,2,0); Delay_ms(10);Delay_ms(10); ii++;ii++; if(ii==83)if(ii==83) break;break; if(posx==83)if(posx==83) { posx=0;{ posx=0; break;break; }} }} Detecion_Tecla(); Detecion_Tecla(); if (i==0)if (i==0) break;break; }} }} }}
Implementación de FuncionesImplementación de Funciones
DETECTA POSICION X Y YDETECTA POSICION X Y Y DETECCION DE TECLADETECCION DE TECLA MENU DE TERMOCUPLASMENU DE TERMOCUPLAS VOLTAJE SEEBECKVOLTAJE SEEBECK ALGORITMO DE BUQUEDA BINARIAALGORITMO DE BUQUEDA BINARIA TEMPERATURA DE UNION FRIATEMPERATURA DE UNION FRIA CALCULA TEMPERATURACALCULA TEMPERATURA GRAFICA T VS tGRAFICA T VS t
Detecta posición X yDetecta posición X y YY // DEVUELVE POSICION EN X (Tmp4)// DEVUELVE POSICION EN X (Tmp4) unsigned GetX ()unsigned GetX () {{ PORTC.B0 = 1;// DRIVEA = 1 (LEFT GND, RIGHT 5V, TOP OFF )PORTC.B0 = 1;// DRIVEA = 1 (LEFT GND, RIGHT 5V, TOP OFF ) PORTC.B1 = 0 ;// DRIVEB = 0 (BOTTOM LEE X )PORTC.B1 = 0 ;// DRIVEB = 0 (BOTTOM LEE X ) Delay_ms(10);Delay_ms(10); X = ADC_Read(1); //' LEE X (BOTTOM)X = ADC_Read(1); //' LEE X (BOTTOM) tmp4 = 128-((X*128)/1024); tmp4 = 128-((X*128)/1024); return tmp4; // VARIABLE GLOBALreturn tmp4; // VARIABLE GLOBAL }}
// DEVUELVE POSICION EN Y (Tmp5)// DEVUELVE POSICION EN Y (Tmp5) unsigned GetY ()unsigned GetY () { { PORTC.B0 = 0 ;// DRIVEA = 0 (LEFT LEE Y , RIGHT OFF , TOP 5V )PORTC.B0 = 0 ;// DRIVEA = 0 (LEFT LEE Y , RIGHT OFF , TOP 5V ) PORTC.B1 = 1 ;//DRIVEB = 1 (BOTTOM GND)PORTC.B1 = 1 ;//DRIVEB = 1 (BOTTOM GND) Delay_ms(10);Delay_ms(10); Y = ADC_Read(2) ;// LEE Y (LEFT)Y = ADC_Read(2) ;// LEE Y (LEFT) tmp5=64-((Y*64)/1024);tmp5=64-((Y*64)/1024); return tmp5;return tmp5; }}
Detección de tecla Detección de tecla Menú de termocuplas Menú de termocuplas
unsigned short elegir_termo (unsigned x_coord128, unsigned y_coord64)unsigned short elegir_termo (unsigned x_coord128, unsigned y_coord64) {{ if(((x_coord128>=28) && (x_coord128<=98)) &&if(((x_coord128>=28) && (x_coord128<=98)) && ((y_coord64>=46) && (y_coord64<=64))) return 1; // si es termocupla K((y_coord64>=46) && (y_coord64<=64))) return 1; // si es termocupla K if(((x_coord128>=28) && (x_coord128<=98)) &&if(((x_coord128>=28) && (x_coord128<=98)) && ((y_coord64>=30) && (y_coord64<=45))) return 2; // si es termocupla J((y_coord64>=30) && (y_coord64<=45))) return 2; // si es termocupla J if(((x_coord128>=28) && (x_coord128<=98)) &&if(((x_coord128>=28) && (x_coord128<=98)) && ((y_coord64>=14) && (y_coord64<=29))) return 3; // si es termocupla t((y_coord64>=14) && (y_coord64<=29))) return 3; // si es termocupla t if(((x_coord128>=28) && (x_coord128<=98)) &&if(((x_coord128>=28) && (x_coord128<=98)) && ((y_coord64>=0 ) && (y_coord64<= 13))) return 4; // si es salir((y_coord64>=0 ) && (y_coord64<= 13))) return 4; // si es salir }} void Detecion_Tecla();void Detecion_Tecla(); {{ whilewhile (1)(1) {{ y_coord64 = GetY();y_coord64 = GetY(); x_coord128 = GetX();x_coord128 = GetX(); if(((x_coord128>=10) && (x_coord128<=80)&& ((y_coord64>=10) && if(((x_coord128>=10) && (x_coord128<=80)&& ((y_coord64>=10) &&
y_coord64<=50))))y_coord64<=50)))) break;break; }} }}
REGISTROS DS2760REGISTROS DS2760
Rutinas de TermocuplaRutinas de Termocupla VOLTAJE SEEBECKVOLTAJE SEEBECK ( (tCuV en microvoltiostCuV en microvoltios)) // LEE EL REGISTRO DE CORRIENTE Y EXTRAE EL VOLTAJE EN BITS// LEE EL REGISTRO DE CORRIENTE Y EXTRAE EL VOLTAJE EN BITS // -- CADA BIT ES 15.625 Uv// -- CADA BIT ES 15.625 Uv unsigned Voltaje_Seebeck()unsigned Voltaje_Seebeck() {{ Ow_Reset(&PORTA,4); // Onewire señal de resetOw_Reset(&PORTA,4); // Onewire señal de reset Ow_Write(&PORTA,4 , 0xCC); // salta netaddressOw_Write(&PORTA,4 , 0xCC); // salta netaddress Ow_Write(&PORTA,4, 0x69); // comando para LEER registrosOw_Write(&PORTA,4, 0x69); // comando para LEER registros Ow_Write(&PORTA,4, 0x0E); // Lee registro de corriente 0x0E y extrae el voltajeOw_Write(&PORTA,4, 0x0E); // Lee registro de corriente 0x0E y extrae el voltaje tCuV_H = Ow_Read(&PORTA,4 ); // lee el primer byte HtCuV_H = Ow_Read(&PORTA,4 ); // lee el primer byte H tCuV_L = Ow_Read(&PORTA,4 ); // lee el segundo byte LtCuV_L = Ow_Read(&PORTA,4 ); // lee el segundo byte L
sign = tCuV_H & 0x80 ; // verifico bit de signosign = tCuV_H & 0x80 ; // verifico bit de signo tCuV = tCuV_L >> 3;tCuV = tCuV_L >> 3; tCuVtemp= tCuV_H;tCuVtemp= tCuV_H; tCuVtemp=tCuVtemp << 5;tCuVtemp=tCuVtemp << 5; tCuV =tCuV + tCuVtemp ; // realizo desplazamientos para registro de 16 bitstCuV =tCuV + tCuVtemp ; // realizo desplazamientos para registro de 16 bits if (sign == 0x80) // si es negativoif (sign == 0x80) // si es negativo tCuV = tCuV | 0XF000 ; // elimina calculos para temperaturas negativas tCuV = tCuV | 0XF000 ; // elimina calculos para temperaturas negativas tCuV = tCuV * 125/8; // x 15.625 uV y guarda en tCuVtCuV = tCuV * 125/8; // x 15.625 uV y guarda en tCuV Return tCuV;Return tCuV; }} Valor maximo de tCuv es 64mV (64000 uV) para 10 bitsValor maximo de tCuv es 64mV (64000 uV) para 10 bits
Temperatura de Unión FríaTemperatura de Unión Fría
// LEE LA TEMPERATURA DE LA UNION FRIA EN LOS CONTACTOS// LEE LA TEMPERATURA DE LA UNION FRIA EN LOS CONTACTOS //-- CADA BIT 0.125 GRADOS C//-- CADA BIT 0.125 GRADOS C // -- RETORNA TEMPCJ EN GRADOS// -- RETORNA TEMPCJ EN GRADOS
unsigned Temperatura_Union (); unsigned Temperatura_Union (); {{ Ow_Reset(&PORTA, 4); // Onewire SEÑAL DE RESETOw_Reset(&PORTA, 4); // Onewire SEÑAL DE RESET Ow_Write(&PORTA,4 , 0xCC); // SALTA NETADDRESSOw_Write(&PORTA,4 , 0xCC); // SALTA NETADDRESS Ow_Write(&PORTA, 4, 0x69); // COMANDO PARA ACCEDER A REGISTROOw_Write(&PORTA, 4, 0x69); // COMANDO PARA ACCEDER A REGISTRO Ow_Write(&PORTA, 4, 0x18); //LEE REGISTRO DE TEMPERATURA 0x18Ow_Write(&PORTA, 4, 0x18); //LEE REGISTRO DE TEMPERATURA 0x18
tmpCJ_H = Ow_Read(&PORTA,4 ); // LEE EL PRIMER BYTE HtmpCJ_H = Ow_Read(&PORTA,4 ); // LEE EL PRIMER BYTE H tmpCJ_L = Ow_Read(&PORTA,4 ); // LEE EL SEGUNDO BYTE LtmpCJ_L = Ow_Read(&PORTA,4 ); // LEE EL SEGUNDO BYTE L
sign2 = tmpCJ_H & 0x80 ; // VERIFICA BIT DE SIGNOsign2 = tmpCJ_H & 0x80 ; // VERIFICA BIT DE SIGNO if (sign2 == 0x80)if (sign2 == 0x80) tmpCJ = 0; // SI ES NEGATIVO tmpCJ = 0; // SI ES NEGATIVO elseelse tmpCJ = tmpCJ_H; // TEMPCJ EN GRADOStmpCJ = tmpCJ_H; // TEMPCJ EN GRADOS RETURN tmpCJ;RETURN tmpCJ; }}
Algoritmo de Búsqueda BinariaAlgoritmo de Búsqueda Binaria void Busqueda_Binaria()void Busqueda_Binaria() {{ // Usamos un algoritmo binario modificado para encontrar temperatura de cjComp// Usamos un algoritmo binario modificado para encontrar temperatura de cjComp // busqueda de la tabla a la inversa// busqueda de la tabla a la inversa tblLo = 0; // valor mas bajo de temperaturatblLo = 0; // valor mas bajo de temperatura tempC = 27; // temp. default del cuartotempC = 27; // temp. default del cuarto
switch (flag)switch (flag) {{ case 1: testVal = K_table_pos[tblHi]; break; // chequeo la max temperaturacase 1: testVal = K_table_pos[tblHi]; break; // chequeo la max temperatura case 2: testVal = J_table_pos[tblHi]; break; // tesval guarda la max temperaturacase 2: testVal = J_table_pos[tblHi]; break; // tesval guarda la max temperatura case 3: testVal = T_table_pos[tblHi]; break;case 3: testVal = T_table_pos[tblHi]; break; }} if (cjComp > testVal)if (cjComp > testVal) error = 1; // fuera del rangoerror = 1; // fuera del rango elseelse while (1)while (1) {{ eePntr = (tblLo + tblHi) / 2 ; // buscamos en el punto medio del arregloeePntr = (tblLo + tblHi) / 2 ; // buscamos en el punto medio del arreglo
switch (flag)switch (flag) {{ case 1: testVal=K_table_pos[eePntr]; break;case 1: testVal=K_table_pos[eePntr]; break; case 2: testVal=J_table_pos[eePntr]; break; // tesval guarda la temp. punto mediocase 2: testVal=J_table_pos[eePntr]; break; // tesval guarda la temp. punto medio case 3: testVal=T_table_pos[eePntr]; break;case 3: testVal=T_table_pos[eePntr]; break; }} if (cjComp == testVal) break; // encontro y sale del lazoif (cjComp == testVal) break; // encontro y sale del lazo if (cjComp < testVal)if (cjComp < testVal) tblHi = eePntr;tblHi = eePntr; elseelse tblLo = eePntr; // busca de la mitad para arribatblLo = eePntr; // busca de la mitad para arriba if ((tblHi - tblLo) < 2)if ((tblHi - tblLo) < 2) { // eePntr guarda valor final de temperatura{ // eePntr guarda valor final de temperatura eePntr = tblLo;eePntr = tblLo; break;break; }} }} tempC = eePntr;tempC = eePntr; }}
Cálculo de la TemperaturaCálculo de la Temperatura void CALCULA_TEMPERATURA()void CALCULA_TEMPERATURA() {{ V_Seebeck= Voltaje_Seebeck();V_Seebeck= Voltaje_Seebeck(); T_Union= Temperatura_Union ();T_Union= Temperatura_Union (); if (flag==1) cjComp = K_table_pos[T_Union];if (flag==1) cjComp = K_table_pos[T_Union]; if (flag==2) cjComp = J_table_pos[ T_Union];if (flag==2) cjComp = J_table_pos[ T_Union]; if (flag==3) cjComp = T_table_pos[T_Union];if (flag==3) cjComp = T_table_pos[T_Union]; // combina cjComp and tCuV// combina cjComp and tCuV if (sign == 0x80)if (sign == 0x80) {{ //TC por debajo de la temp de union fria//TC por debajo de la temp de union fria if ((tCuV) < (cjComp))if ((tCuV) < (cjComp)) {{ cjComp = cjComp - tCuV;cjComp = cjComp - tCuV; }} elseelse cjComp = 0; // limita a 0CcjComp = 0; // limita a 0C }} elseelse // TC esta sobre la temp de union fria// TC esta sobre la temp de union fria cjComp = cjComp + tCuV;cjComp = cjComp + tCuV; switch (flag) switch (flag) {{ case 1: tblHi=1023; break; // Elige el valor del tamaño de la tabla de termocuplas de acuerdo a flagcase 1: tblHi=1023; break; // Elige el valor del tamaño de la tabla de termocuplas de acuerdo a flag case 2: tblHi=1023; break;case 2: tblHi=1023; break; case 3: tblHi=400; break;case 3: tblHi=400; break; }} Busqueda_Binaria();Busqueda_Binaria(); }}
Graficar T vs tGraficar T vs t
void grafico_k()void grafico_k() {{ tmpY = 63-(tempC);tmpY = 63-(tempC); Delay_ms(2);Delay_ms(2); Glcd_Dot(posx, tmpY, 1);Glcd_Dot(posx, tmpY, 1); posx++;posx++; }}
SimulaciónSimulación
RESULTADO DE LA MEDICION DE RESULTADO DE LA MEDICION DE TEMPERATURA CON LA TEMPERATURA CON LA
TERMOCUPLA KTERMOCUPLA K
Conclusiones:Conclusiones: Logramos visualizar los resultados de las muestras de datos de Logramos visualizar los resultados de las muestras de datos de
Temperatura en función del Tiempo en la pantalla GLCD, datos Temperatura en función del Tiempo en la pantalla GLCD, datos que fueron obtenidos con la aplicación de fuentes externas a las que fueron obtenidos con la aplicación de fuentes externas a las termocuplas, en este caso utilizamos una secadora de cabello y termocuplas, en este caso utilizamos una secadora de cabello y un encendedor.un encendedor.
Debido a que la pantalla GLCD, utiliza 3 leds para generar el Debido a que la pantalla GLCD, utiliza 3 leds para generar el fondo de color blanco de la imagen, aumentando el consumo de fondo de color blanco de la imagen, aumentando el consumo de corriente, cuyo valor aproximado es de 50mA. Y la única forma corriente, cuyo valor aproximado es de 50mA. Y la única forma de bajar este consumo es utilizando un solo color y reducir el de bajar este consumo es utilizando un solo color y reducir el nivel del contraste. Pero esto bajaría la calidad de la imagen.nivel del contraste. Pero esto bajaría la calidad de la imagen.
Para obtener y reflejar en pantalla los valores de temperatura, se Para obtener y reflejar en pantalla los valores de temperatura, se necesito una mediana cantidad de memoria FLASH, por lo cual se necesito una mediana cantidad de memoria FLASH, por lo cual se utilizo el utilizo el PIC18F4520PIC18F4520. Suficiente para almacenar las tablas de . Suficiente para almacenar las tablas de datos y valores adecuados que permitirán la conversión de la datos y valores adecuados que permitirán la conversión de la señal en milivoltios que da la termocupla a un valor de señal en milivoltios que da la termocupla a un valor de temperatura en °C.temperatura en °C.
Para calcular el voltaje de Seebeck, tenemos que hacer que el Para calcular el voltaje de Seebeck, tenemos que hacer que el voltaje generado en los contactos entre la placa del DS2760 y las voltaje generado en los contactos entre la placa del DS2760 y las termocuplas sea 0, y esto lo logramos a traves de software, esto termocuplas sea 0, y esto lo logramos a traves de software, esto se realiza luego del llamado de dos subrutinas, la de voltaje de se realiza luego del llamado de dos subrutinas, la de voltaje de Seebeck y la de la temperatura de contacto.Seebeck y la de la temperatura de contacto.
Las termocuplas son muy practicas en aplicaciones industriales Las termocuplas son muy practicas en aplicaciones industriales debido a su robustez mecánica y a la precisión a altas debido a su robustez mecánica y a la precisión a altas temperaturas, así como de rápida respuesta y bajo costo.temperaturas, así como de rápida respuesta y bajo costo.
La subrutina de “búsqueda binaria”, es una de las más La subrutina de “búsqueda binaria”, es una de las más importantes del código, ya que aquí es donde se realizan los importantes del código, ya que aquí es donde se realizan los cálculos importantes para poder buscar en la tabla de cálculos importantes para poder buscar en la tabla de termocuplas el valor de temperatura más cercano al medido y termocuplas el valor de temperatura más cercano al medido y además de llevar el valor que se encuentra en la tabla al valor de además de llevar el valor que se encuentra en la tabla al valor de temperatura decimal que corresponde. Para luego ser mostrada temperatura decimal que corresponde. Para luego ser mostrada por pantalla.por pantalla.
Para tomar muestras de datos reales, se ha considerado la ayuda Para tomar muestras de datos reales, se ha considerado la ayuda del DS3234 que utiliza comunicación SPI, este integrado nos va a del DS3234 que utiliza comunicación SPI, este integrado nos va a servir para mostrar las fechas y hora actuales de los datos de servir para mostrar las fechas y hora actuales de los datos de temperatura que se tomen.temperatura que se tomen.
Se tuvo que considerar una memoria externa SD, debido a que Se tuvo que considerar una memoria externa SD, debido a que no había capacidad en el microcontrolador para almacenar los no había capacidad en el microcontrolador para almacenar los datos de temperatura. Y como se va a mostrar en pantalla la datos de temperatura. Y como se va a mostrar en pantalla la fecha y hora de las muestras de datos, fue necesario considerar fecha y hora de las muestras de datos, fue necesario considerar el uso de esta memoria.el uso de esta memoria.
Recomendaciones:Recomendaciones:• Es muy importante para realizar proyectos como el nuestro, Es muy importante para realizar proyectos como el nuestro,
contar con conocimientos suficientes en microcontroladores y contar con conocimientos suficientes en microcontroladores y
lenguaje de programación MicroCPro (que es el utilizado aquí), ya lenguaje de programación MicroCPro (que es el utilizado aquí), ya
que esto facilitará un mejor desarrollo, configuración e que esto facilitará un mejor desarrollo, configuración e
implementación del proyecto.implementación del proyecto.
• Leer, comprender y analizar de forma detenida las Hojas de Leer, comprender y analizar de forma detenida las Hojas de
Especificaciones Técnicas del microcontrolador PIC18F4520, Especificaciones Técnicas del microcontrolador PIC18F4520,
Pantalla GLCD táctil y el Módulo de Adquisición DS2760. Ya que Pantalla GLCD táctil y el Módulo de Adquisición DS2760. Ya que
un mal entendimiento puede producir conexiones erróneas que un mal entendimiento puede producir conexiones erróneas que
nos harán tomar más del tiempo del necesario para el desarrollo nos harán tomar más del tiempo del necesario para el desarrollo
del proyecto.del proyecto.
• Una vez implementado el Proyecto en el protoboard, ser Una vez implementado el Proyecto en el protoboard, ser
cuidadoso en el traslado de éste, hasta su debida conexión en cuidadoso en el traslado de éste, hasta su debida conexión en
placas.placas.
• Realizar un algoritmo o diagrama de flujo del Código Fuente a Realizar un algoritmo o diagrama de flujo del Código Fuente a
utilizarse en la programación, para hallar así más pronto los utilizarse en la programación, para hallar así más pronto los
errores lógicos con los que se pueda encontrar en la errores lógicos con los que se pueda encontrar en la
implementación del Proyecto, en lo que respecta a la parte de implementación del Proyecto, en lo que respecta a la parte de
Software.Software.
• Hacer un buen analisis antes de elegir el microntrolador y el Hacer un buen analisis antes de elegir el microntrolador y el
lenguaje en el que se va a desarrollar el proyecto, ya que en lenguaje en el que se va a desarrollar el proyecto, ya que en
nuestro caso utilizamos por completo todos los recursos del nuestro caso utilizamos por completo todos los recursos del
integrado y tuvimos que agregar una memoria externaintegrado y tuvimos que agregar una memoria externa..
Muchas graciasMuchas gracias