Menú
Foros
Nuevos mensajes
Buscar en foros
Novedades
Nuevos mensajes
Nuevos recursos
Última actividad
Recursos
Últimas revisiones
Buscar recursos
Acceder
Registrarse
Novedades
Buscar
Buscar
Buscar sólo en títulos
De:
Nuevos mensajes
Buscar en foros
Menú
Acceder
Registrarse
Install the app
Instalar
Foros
Diseño digital
Interfaces y Programación
Midiendo Temperatura con max6675 y pic16f887 pulsos desincronizados
JavaScript está desactivado. Para una mejor experiencia, por favor, activa JavaScript en el navegador antes de continuar.
Estás usando un navegador obsoleto. No se pueden mostrar este u otros sitios web correctamente.
Se debe actualizar o usar un
navegador alternativo
.
Responder al tema
Mensaje
[QUOTE="marmoleda, post: 1261884, member: 39064"] Buenas estoy realizando un medidor de temperatura con max6675 la lectura es correcta en cuanto a medicion se refiere el tema es la sincronizacion de los datos en la simulacion no se nota ya que subo cada 0.25grados pero no logro sincronizar los valores en pantalla probe con el timer1 para aumentarle la velocidad. Noté que cuando aumento la temperatura en la termocupla de manera brusca los valores llegan no sincronizados habra alguna manera de detectar cambios de temperatura y de manera automatica, aumente la velocidad de timer quedando sincronizadas este es el codigo [CODE]#INCLUDE <16F887.H> //PIC utilizado #DEVICE ADC = 10 #INCLUDE <MATH.H> //Libreria con funciones matematicas #FUSES NOWDT //No Watch Dog Timer #FUSES XT // #FUSES NOPUT //No Power Up Timer #FUSES PROTECT //Code not protected from reading #FUSES NOBROWNOUT //No brownout reset #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used FOR I/O #FUSES CPD //No EE protection #use delay(clock=4000000) #use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, parity=n, bits=8, stop=1) #bit Chip_Select=0x07.0 //RC0=Chip_Select //#bit Chip_Select_Direccion=0x87.0 //TRISA.0=Chip_Select_Direccion int16 Data; short EstadoTKP; //estado de la Termocuple, abierto o cerrado float temp; int t[9]=0,0,0,0,0,0,0,0,0; #define t1 t[0] #define t2 t[1] #define t3 t[2] #define t_seg t[3] #define t_sog t[4] #define t_log t[5] #define t_deseado1 t[6] #define t_deseado2 t[7] #define t_deseado3 t[8] #INT_TIMER1 void TIMER1_isr(void) { t1++; // Contador para funcion pulsadores t2++; // Contador para lectura de termocupla t3++; if(t1==1){ // Si la interrupcion se activo 154 veces t_seg++; // paso 1 segundo t1=0; // Reinicio el contador } if(t2==1){ // Si la interrupcion se activo 154 veces t_sog++; // paso 1 segundo t2=0; // Reinicio el contador } if(t3==1){ // Si la interrupcion se activo 154 veces t_log++; // paso 1 segundo t3=0; // Reinicio el contador } } void InitMain() { setup_adc_ports(sAN0 | sAN1 | sAN2); setup_adc(ADC_CLOCK_DIV_8); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); // modo de trabajo setup_timer_2(T2_DISABLED,0,1); enable_interrupts(int_TIMER1); enable_interrupts(GLOBAL); //Habilita interrupciones t_deseado1=3; // Establezco el timer en 3. Chip_Select=1; //Deshabilito el SPI en el DAC mediante RC0, Pulso de seleccion de esclavo en alto //Chip_Select_Direccion=0; //Pin RC0 como salida set_tris_c(0x10); setup_spi(SPI_MASTER|SPI_L_TO_H | SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); //th>=100ns,tl>=100ns, Tp=10MHz/4=0.4us=200ns } void ADC_Input() { if(t_seg>=t_deseado1){ char DataHigh, DataLow; Chip_Select=0; delay_us(20); //Recibe el byte mas significativo y menos significativo DataHigh=spi_read(0); DataLow=spi_read(0); Chip_Select=1; Data=make16(DataHigh,DataLow); Data=Data>>2; EstadoTKP=Data & 0x01; Data=Data>>1; temp=Data*0.25; //12bits, resolucion 0.25°C printf("Temp: %f \r\n",temp); //muestro la temperatura actual por uart t1=0; //Contadores de timer timer1_t1 a 0. t_seg=0; } } void main() { InitMain(); while(TRUE) { ADC_Input(); } }[/CODE] adjunto los archivos simulacion en proteus y codigo con pic c compiler [/QUOTE]
Verificación
Responder
Foros
Diseño digital
Interfaces y Programación
Midiendo Temperatura con max6675 y pic16f887 pulsos desincronizados
Arriba