Código en c
Transcript of Código en c
![Page 1: Código en c](https://reader036.fdocuments.co/reader036/viewer/2022072117/55cf9aab550346d033a2d27d/html5/thumbnails/1.jpg)
Código en c
zonadjarn:A ver si me podeis ayudar porque no consiguo que me funcione para dos mediciones. Este es el codigo:
#include <16f876.h>#device ADC=8#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT#use delay(clock=4000000)#use standard_io(b)#use RS232(baud=4800,xmit=PIN_C6,rcv=PIN_C7)#byte port_a = 5 // Identificador asociado al registro de dirección 5#byte port_b = 6 // Identificador asociado al registro de dirección 6#byte port_c = 7 // Identificador asociado al registro de dirección 7#byte port_d = 8 // Identificador asociado al registro de dirección 8
long valor,valor2,desactivaralarma;int8 tempmax=0b11001000;int8 tempmin=0b01010000;int8 lummax=0b11001000;int8 lummin=0b01010000;int alarma;char rec;void toma_adc_temperatura(void){set_adc_channel(0); // Lectura del canal 0delay_ms(1); //para que se estabilicevalor=read_adc(0); //Se guarda en la Variable Valor en valor convertido de Analogico en Digitaldelay_ms(1); //para que se estabilice}
void toma_adc_luminosidad(void){set_adc_channel(01; // Lectura del canal 0delay_ms(1); //para que se estabilicevalor2=read_adc(1); //Se guarda en la Variable Valor en valor convertido de Analogico en Digitaldelay_ms(1); //para que se estabilice
![Page 2: Código en c](https://reader036.fdocuments.co/reader036/viewer/2022072117/55cf9aab550346d033a2d27d/html5/thumbnails/2.jpg)
}
void temperatura_maxima_alcanzada(void){ //Entra en la Funcion cunado se porduce una bajada de la temperatura por debajo del Límite Recomendado.if ((alarma==1) && (desactivaralarma=='n')){ printf("a"); alarma=0; port_c=2;}}void temperatura_minima_alcanzada(void){ //Entra en la Funcion cunado se porduce una bajada de la temperatura por debajo del Límite Recomendado.if ((alarma==1)&&(desactivaralarma=='n')){ printf("b"); alarma=0; port_c=1;}}
void luminosidad_maxima_alcanzada(void){ //Entra en la Funcion cunado se porduce una bajada de la luminosidad por debajo del Límite Recomendado.if ((alarma==1) && (desactivaralarma=='n')){ printf("j"); alarma=0; port_c=2;}}void temperatura_minima_alcanzada(void){ //Entra en la Funcion cunado se porduce una bajada de la luminosidad por debajo del Límite Recomendado.if ((alarma==1)&&(desactivaralarma=='n')){ printf("k"); alarma=0; port_c=1;}}
void main() {printf("c");port_c=0;alarma=1;desactivaralarma='n';
![Page 3: Código en c](https://reader036.fdocuments.co/reader036/viewer/2022072117/55cf9aab550346d033a2d27d/html5/thumbnails/3.jpg)
set_tris_a(0xff);set_tris_b(0x00);set_tris_c (0x00);setup_adc(ADC_CLOCK_INTERNAL); //configura el conversosetup_adc_ports(All_analog); //entrada 0 como analogicado {toma_adc_temperatura();output_b(valor);toma_adc_luminosidad();output_b(valor2);if (valor>tempmax){ temperatura_maxima_alcanzada();}if (valor<tempmin){ temperatura_minima_alcanzada();}if ((valor>tempmin)&&(valor<tempmax)){if (alarma==0){alarma=1;printf("c");port_c=0;}}
if (valor>tempmax){ temperatura_maxima_alcanzada();}if (valor<tempmin){ temperatura_minima_alcanzada();}if ((valor>tempmin)&&(valor<tempmax)){if (alarma==0){alarma=1;printf("c");port_c=0;}}if (valor2>lummax){ luminosidad_maxima_alcanzada();}if (valor2<tempmin){
![Page 4: Código en c](https://reader036.fdocuments.co/reader036/viewer/2022072117/55cf9aab550346d033a2d27d/html5/thumbnails/4.jpg)
luminosidad_minima_alcanzada();}if ((valor2>lummin)&&(valor2<lummax)){if (alarma==0){alarma=1;printf("h");port_c=0;}}}while(true);}
Micro23:Citar
valor=read_adc(0); //Se guarda en la Variable Valor en valor convertido de Analogico en DigitalCitar
valor2=read_adc(1); //Se guarda en la Variable Valor en valor convertido de Analogico en Digital
Cuando utilizas esta funcion no debes pasarle el canal, ponela asi:
valor=read_adc();valor2=read_adc();
antes de llamar a esta funcion debes seleccionar el canal a leer con set_adc_channel(0) y set_adc_channel(1). Fijate que en tu codigo pusiste set_adc_channel(01
Saludos y Suerte
huichoman:Hola Zonadjarn.
Mira voy de salida a la escuela, vi tu post de manera rápida, en cuanto regrese te ayudo.La semana pasada nos dejaron una practica, utilizar el adc para leer un lm35, desplegar la temperatura en dos displays de 7 segmentos y que encendiera un led cuando llegara a cierta temperatura, te paso el código del programa, para que lo
![Page 5: Código en c](https://reader036.fdocuments.co/reader036/viewer/2022072117/55cf9aab550346d033a2d27d/html5/thumbnails/5.jpg)
cheques espero que te sea utili, en cuanto regrese te paso la simulacion. Saludos.
Código:
#include <18F4525.h>#device adc=8#FUSES NOWDT, HS, NOBROWNOUT, NOPUT, NOCPD, NODEBUG, NOWRT, NOWRTD,MCLR, NOLVP#use delay(clock=20000000)#include <stdlib.h>
void main(){ int x=0, temp=0, digito1=0,digito2=0; float vadc=0; byte const display[10] = {0b00111111, //0 0b00000110, //1 0b01011011, //2 0b01001111, //3 0b01100110, //4 0b01101101, //5 0b01111101, //6 0b00000111, //7 0b01111111, //8 0b01100111}; //9
setup_adc(ADC_CLOCK_DIV_32); setup_adc_ports(AN0|VSS_VREF); set_adc_channel(0); output_low(PIN_B0); while(1) { output_d(display[digito1]); delay_us(100);
![Page 6: Código en c](https://reader036.fdocuments.co/reader036/viewer/2022072117/55cf9aab550346d033a2d27d/html5/thumbnails/6.jpg)
output_c(0b00000010); delay_us(100); output_c(0b00000000); vadc=read_adc(); temp=(int) ((vadc * 391) / 1000); digito1=(temp/10); digito2=temp%10; output_d(display[digito2]); delay_us(100); output_c(0b00000001); delay_us(100); output_c(0b00000000); delay_us(100); if(temp>=30) output_high(PIN_B0); else output_low(PIN_B0); }
}
GAMBARIMASU
huichoman:Hola amigo, del codigo anterior, puedes quitar la parte del display de 7 segmentos.Te quedaría algo parecido a esto.
Lo que hace es leer el adc, despues convierte el valor del adc a temperatura en grados centigrados. Despues solo comparas con la temperatura que deseas que se dispare la alarma, en este caso activa un led conectado al B0.
Código:
#include <18F4525.h>
![Page 7: Código en c](https://reader036.fdocuments.co/reader036/viewer/2022072117/55cf9aab550346d033a2d27d/html5/thumbnails/7.jpg)
#device adc=8#FUSES NOWDT, HS, NOBROWNOUT, NOPUT, NOCPD, NODEBUG, NOWRT, NOWRTD,MCLR, NOLVP#use delay(clock=20000000)
void main(){ temp=0; float vadc=0; setup_adc(ADC_CLOCK_DIV_32); setup_adc_ports(AN0|VSS_VREF); set_adc_channel(0); output_low(PIN_B0); while(true) { vadc=read_adc(); temp=(int) ((vadc * 391) / 1000); delay_ms(5) if(temp>=30) output_high(PIN_B0); else output_low(PIN_B0); }}
GAMBARIMASUUUUU :mrgreen:
cyberpablis:Muchachos, no hace falta utilizar la definición preformateada de pines que incluye el CCS para declarar los pines a leer con el ADC.
Se puede usar, por ejemplo, la siguiente instrucción
setup_adc_ports(sAN1 | sAN2 | sAN6 | sAN7 | VSS_VDD);
![Page 8: Código en c](https://reader036.fdocuments.co/reader036/viewer/2022072117/55cf9aab550346d033a2d27d/html5/thumbnails/8.jpg)
En esta instrucción, la combinación de pines involucrados se define a voluntad.