Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

06/11/2010 #41

Avatar de axelrose

buen dia foreros, gracias por ver mi mensaje.
soy novato en pic c compiler y quisiera saber que fuses utilizo o configuro inicialmente para el pic18f4550
este es el codigo. no funciona
#include <18F4550.h> //Libreria del pic a usar aqui se pondra el pic que se usara de aqui que
#fuses HS,NOWDT,NOPROTECT,NOLVP //tipo de cristal externo high speed, perro guardian off, sin proteccion etc..

#use delay(clock=20m) //Cristal de 20 Mhz leer

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) //declaro esta libreria ya que usaremos mas adelante la comunicacion serial del pic
void main(){ //En esta parte sera la declaracion de variables configuracion de puertos y configuracionde mas cosas como timers, ADC, pwm, entre otras cosas.

set_tris_B(0x00);


while(1){

output_high(pin_b0);
delay_ms(100);
output_low(pin_b0);
delay_ms(100);

}
}
si alguien pudiera ayudarme.. a configurar el oscilador externo a 20mhz, y sin bootloader, por el momento uso el pickit2. el problema que tengo es a la hora de montarlo en la proto, donde el pin b0 enciende, cuando coloco el pin1 del micro a vcc con una resistencia. pero no efectua el parpadeo.
gracias por la colaboracion.
25/02/2011 #42


axelrose dijo: Ver Mensaje
buen dia foreros, gracias por ver mi mensaje.
soy novato en pic c compiler y quisiera saber que fuses utilizo o configuro inicialmente para el pic18f4550
este es el codigo. no funciona


si alguien pudiera ayudarme.. a configurar el oscilador externo a 20mhz, y sin bootloader, por el momento uso el pickit2. el problema que tengo es a la hora de montarlo en la proto, donde el pin b0 enciende, cuando coloco el pin1 del micro a vcc con una resistencia. pero no efectua el parpadeo.
gracias por la colaboracion.
#include <18FXXXX.h> //Libreria del pic a usar aqui se pondra el pic que se usara de aqui que dependera la configuracion de los puertos y de los bytes

#fuses HS,NOWDT,NOPROTECT,NOLVP //tipo de cristal externo high speed, perro guardian off, sin proteccion etc..

#use delay(clock=20000000) // usalo de esta manera y dime a ver que pasa

inyelber dijo: Ver Mensaje
me puedes hehar una mano con un ascensor que estoy haciendo?
Tu dime en que puedo ayudar, perdón por contestar mucho después he estado muy ocupado con la chamba...
16/03/2011 #43


puerto TX
hola necesito ayuda, ya estoy desesperado. veran pues necesito enviar una señal por el TX del pic 16f877a a un transmisor y para que reconosca el transmisor estas diferentes señales deebn ser en codigo ASCII, y yo le estoy metiendo al pic señales hexadecimales.

pueden ayudarme con la programacion para esta actividad. estare a la espera de su ayuda.
gracias
17/03/2011 #44

Avatar de albermillan69

principiante1 dijo: Ver Mensaje
hola necesito ayuda, ya estoy desesperado. veran pues necesito enviar una señal por el TX del pic 16f877a a un transmisor y para que reconosca el transmisor estas diferentes señales deebn ser en codigo ASCII, y yo le estoy metiendo al pic señales hexadecimales.

pueden ayudarme con la programacion para esta actividad. estare a la espera de su ayuda.
gracias
un transmisor RF?? usas CCS?? coloca tu codigo!!!
18/03/2011 #45


Efectivamente es un transmisor RF, MaxStream 9XStream, 900 MHz 9600 baud.
Y pues si estoy utilizando el CCS C con ayuda del ISIS 7 (o PROTEUS) y en la terminal virtual del TX supuestamente me debe mostras el caracter del codigo ASCII correspondiente.

En cuanto al codigo; como veras soy principiante en esto y solo estoy realizando pequeñas pruebas. Una de ellas es la siguiente.


#include<16f877a.h>
#include <stdio.h>
#fuses xt,nowdt,noprotect,noput,nowrt,nolvp,nobrownout,no cpd
#use delay(clock=4000000)
#use rs232 (baud=9600,XMIT=PIN_C6,RCV=PIN_C7,BITS=8,PARITY=N)
#use fast_io(b)
#use fast_io(d)
#byte portb=0x06
#byte portd=0x08


void main(void)
{
set_tris_d(0b00000000);
set_tris_b(0b11111111);

while (true)
{
if (portb==0x01)
{
putchar(0x03);
}
else
{
putchar(0x00);
}
}

}




pues veras la idea es que si yo le introdusco al pic una señal correspondiente del 1 al 130, este me muestre en la terminal TX el valor correpondiente en codigo ASCII, es decir que el programa funcione algo asi como un selector para enviar el codigo ASCII. Estuve investigando y una forma de poder hacer este selector me parece que es con la funcion "case" pero aun no se como implementarla, o tal vez no eh intentado porque en mi codigo no me muestra el valor correspondiente en codigo ASCII.

Ojala me puedas ayudar saludos.
20/03/2011 #46

Avatar de albermillan69

principiante1 dijo: Ver Mensaje
Efectivamente es un transmisor RF, MaxStream 9XStream, 900 MHz 9600 baud.
Y pues si estoy utilizando el CCS C con ayuda del ISIS 7 (o PROTEUS) y en la terminal virtual del TX supuestamente me debe mostras el caracter del codigo ASCII correspondiente.

En cuanto al codigo; como veras soy principiante en esto y solo estoy realizando pequeñas pruebas. Una de ellas es la siguiente.


#include<16f877a.h>
#include <stdio.h>
#fuses xt,nowdt,noprotect,noput,nowrt,nolvp,nobrownout,no cpd
#use delay(clock=4000000)
#use rs232 (baud=9600,XMIT=PIN_C6,RCV=PIN_C7,BITS=8,PARITY=N)
#use fast_io(b)
#use fast_io(d)
#byte portb=0x06
#byte portd=0x08


void main(void)
{
set_tris_d(0b00000000);
set_tris_b(0b11111111);

while (true)
{
if (portb==0x01)
{
putchar(0x03);
}
else
{
putchar(0x00);
}
}

}




pues veras la idea es que si yo le introdusco al pic una señal correspondiente del 1 al 130, este me muestre en la terminal TX el valor correpondiente en codigo ASCII, es decir que el programa funcione algo asi como un selector para enviar el codigo ASCII. Estuve investigando y una forma de poder hacer este selector me parece que es con la funcion "case" pero aun no se como implementarla, o tal vez no eh intentado porque en mi codigo no me muestra el valor correspondiente en codigo ASCII.

Ojala me puedas ayudar saludos.
Utiliza el printf a ver q tal!!
31/03/2011 #47


El funcion printf es lo que mejor se ajusta en tu caso
09/04/2011 #48

Avatar de albermillan69

AYUDA: TENGO UNA DUDA

Estoy usando un cristal de 20MHz, resulta q para usar el USB tengo q hacer unos ajustes y cambiar el PLL resulta q al modificar el PLL queda trabajando a 48MHz internamente!!

Mi pregunta es: a la hora de configurar los timer uso 20MHz o 48MHz??

Este es el encabezado de mi programa:

#include <18F4550.h>
#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV, PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)
11/04/2011 #49


Que tal, saludos.
Estoy iniciando en el asunto de los pics, al darle en pic wizard para iniciar
un nuevo proyecto despuÉs de elegir donde guardar el trabajo, me despkliega una ventana
donde tengo que habilitar ciertas caracterÍsticas, decidÍ trabajar con el pic 18f452,
perono se quÉ habilitar, podrÍa alguien ayudarme con esto??
13/04/2011 #50

Avatar de electro0x7c1

albermillan69 dijo: Ver Mensaje
AYUDA: TENGO UNA DUDA

Estoy usando un cristal de 20MHz, resulta q para usar el USB tengo q hacer unos ajustes y cambiar el PLL resulta q al modificar el PLL queda trabajando a 48MHz internamente!!

Mi pregunta es: a la hora de configurar los timer uso 20MHz o 48MHz??

Este es el encabezado de mi programa:

#include <18F4550.h>
#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV, PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)
Saludos, este pic tiene un pll interno que eleva la frecuencia hasta 48MHz, son estos 48MHz los que "entran" al CPU, es decir es la velocidad del micro, los timer trabajan con la velocidad del micro asi que se usa 48000000. De hecho la directiva:
#use delay(clock=48000000)
indica la velocidad del CPU del PIC, no la del crystal, y es el valor que el compilador usa para las funciones de delay y rs232.

Saludos.
13/04/2011 #51

Avatar de albermillan69

electro0x7c1 dijo: Ver Mensaje
Saludos, este pic tiene un pll interno que eleva la frecuencia hasta 48MHz, son estos 48MHz los que "entran" al CPU, es decir es la velocidad del micro, los timer trabajan con la velocidad del micro asi que se usa 48000000. De hecho la directiva:
#use delay(clock=48000000)
indica la velocidad del CPU del PIC, no la del crystal, y es el valor que el compilador usa para las funciones de delay y rs232.

Saludos.
Gracias por tu ayuda y respuesta precisa!!!
13/04/2011 #52

Avatar de electro0x7c1

LEDZEPP dijo: Ver Mensaje
Que tal, saludos.
Estoy iniciando en el asunto de los pics, al darle en pic wizard para iniciar
un nuevo proyecto despuÉs de elegir donde guardar el trabajo, me despkliega una ventana
donde tengo que habilitar ciertas caracterÍsticas, decidÍ trabajar con el pic 18f452,
perono se quÉ habilitar, podrÍa alguien ayudarme con esto??
saludos, yo te recomendaria que no uses el wizard si estas empezando porque talvez te pierdas, asi que mejor usar la configuracion que el autor de este foro usa:

Código:
#include <18F452.h>                                     //Libreria del pic a usar aqui se pondra el pic que se usara de aqui que        dependera la configuracion de los puertos y de los bytes

#fuses HS,NOWDT,NOPROTECT,NOLVP         //tipo de cristal externo high speed, perro guardian off, sin proteccion etc..

#use delay(clock=20000000)                       //Cristal de 20 Mhz leer datasheet para conexión de capacitores se puede usar difereentes cristales ver datasheet una vez mas
Para esto simplemente cuando abras PIC C le das en el boton inicio (el boton circular arriba a a la izquierda) y CLOSE ALL (cerrar todo) para cerrar algun archivo que que hayas compilado antes y que te pueda causar problemas, esto solo por seguridad.

Luego le das en NEW Y SOURCE FILE, sale la ventana en blanco ahi escribes tu codigo como lo describe el autor del foro omitiendo las lines del bootloader si no lo usas (que supongo que no) y ya.

saludos
14/04/2011 #53


muchas gracias, fue de mucha ayuda, ahora ya estoy con los programas
podrian ayudarme con el código para monitorear la temperatura de dos distintas incubadoras
que deben estar entre 2 y 8 °C pero alpasar los 8°C y despues de pasar 15 min. que suene una alarma, ya logré que se muestre la temperatura de las 2 inc. en un lcd, pero me quedé atorado ahí, otra cosa, el pic 18f452 puede trabajar mucho tempo corrido,como por ejemplo, 72 horas seguidas?
14/04/2011 #54

Avatar de electro0x7c1

LEDZEPP dijo: Ver Mensaje
muchas gracias, fue de mucha ayuda, ahora ya estoy con los programas
podrian ayudarme con el código para monitorear la temperatura de dos distintas incubadoras
que deben estar entre 2 y 8 °C pero alpasar los 8°C y despues de pasar 15 min. que suene una alarma, ya logré que se muestre la temperatura de las 2 inc. en un lcd, pero me quedé atorado ahí, otra cosa, el pic 18f452 puede trabajar mucho tempo corrido,como por ejemplo, 72 horas seguidas?
Si puede trabajar 72 hrs seguidas y mucho mas, me parece que un tiempo indefinido. respecto a tu programa estaria bien que lo subas para que la comunidad te pueda ayudar mejor.

por lo pronto yo puedo sugerir utilizar un timer, por ejemplo el timer1 para contar tiempos de 1 segundo y habilitar las interrupciones por desborde del timer, asi en cada desborde preguntas por el estado de las temperaturas, si alguna a superado 8°C de permiso a incrementar un contador (que se incrementara cada desborde) y preguntar si el contador ha llegado a 60*15=900seg en cuyo caso activas la alarma.

imagino que si la temperatura baja de 8°C se resetearia el contador para iniciar desde cero la proxima vez que suba de 8°C.

saludos
14/04/2011 #55


Este es el código de los termómetros que llevo hasta el momento, como mencione estoy empezando,
no sé como usar timers,bueno estoy en eso, investigando, a lo mejor hasta el código que muestro
tiene cosas que no deberían ir, pero sí me funcionó la simulación en proteus, ojalá me puedan ayudar con el código, por que es un trabajo que me pidieron con urgencia, yo estoy investigando por mi cuenta, pero como ven es poco lo que llevo, si sigo así me tardaré mucho, espero me puedan ayudar, yo sigo investigando

Código:
#include "C:\Users\G\Documents\Docs GFT\TRABAJOS\term.h"


#define LCD_TYPE 2
#include <lcd.c>
double   val,SEN,val2,SEN2;
void main()
{
   lcd_init();



   setup_adc_ports(AN0_AN1_AN3);
   setup_adc(ADC_CLOCK_DIV_64);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab

   // TODO: USER CODE!!
   
   
   
   lcd_gotoxy(2,1);
   printf(lcd_putc,"REFRI1:");
   lcd_gotoxy(2,2);
   printf(lcd_putc,"REFRI2:");
 while(true)
 {
   set_adc_channel(0);
   delay_us(10);
   
   
   val=read_adc();                              //LEE EL VALOR DEL SENSOR1
   SEN=val*0.003925*100;                        // LO CONVIERTE A DECIMAL
   lcd_gotoxy(9,1);                                   // Y LO MUESTRA EN EL LCD
   printf(lcd_putc,"  %2.1f'C",SEN);
   
   set_adc_channel(1);
   delay_us(10);
   
  
   val2=read_adc();                              //LEE EL VALOR DEL SENSOR2
   SEN2=val2*0.003925*100;                    // LO CONVIERTE A DECIMAL
   lcd_gotoxy(9,2);                                  // Y LO MUESTRA EN LCD
   printf(lcd_putc,"  %2.1f'C",SEN2);
   
 }
}
14/04/2011 #56

Avatar de electro0x7c1

LEDZEPP dijo: Ver Mensaje
Este es el código de los termómetros que llevo hasta el momento, como mencione estoy empezando,
no sé como usar timers,bueno estoy en eso, investigando, a lo mejor hasta el código que muestro
tiene cosas que no deberían ir, pero sí me funcionó la simulación en proteus, ojalá me puedan ayudar con el código, por que es un trabajo que me pidieron con urgencia, yo estoy investigando por mi cuenta, pero como ven es poco lo que llevo, si sigo así me tardaré mucho, espero me puedan ayudar, yo sigo investigando


#include "C:\Users\G\Documents\Docs GFT\TRABAJOS\term.h"


#define LCD_TYPE 2
#include <lcd.c>
double val,SEN,val2,SEN2;
void main()
{
lcd_init();



setup_adc_ports(AN0_AN1_AN3);
setup_adc(ADC_CLOCK_DIV_64);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab

// TODO: USER CODE!!



lcd_gotoxy(2,1);
printf(lcd_putc,"REFRI1:");
lcd_gotoxy(2,2);
printf(lcd_putc,"REFRI2:");
while(true)
{
set_adc_channel(0);
delay_us(10);


val=read_adc(); //LEE EL VALOR DEL SENSOR1
SEN=val*0.003925*100; // LO CONVIERTE A DECIMAL
lcd_gotoxy(9,1); // Y LO MUESTRA EN EL LCD
printf(lcd_putc," %2.1f'C",SEN);

set_adc_channel(1);
delay_us(10);


val2=read_adc(); //LEE EL VALOR DEL SENSOR2
SEN2=val2*0.003925*100; // LO CONVIERTE A DECIMAL
lcd_gotoxy(9,2); // Y LO MUESTRA EN LCD
printf(lcd_putc," %2.1f'C",SEN2);

}
}
Que tal, pues entonces te sugeriria que si no sabes usar timers e interrupciones entonces lo hagas mediante un simple delay de 1 segundo, es decir cada segundo se actualizan las lecturas de los sensores y se pregunta por si alguna a superado 8 grados en cuyo caso da permiso a incrementar un contador de segundos, si este contador llega a 900 (15min) pues se activa la alarma.

Te dejo un codigo basado en el tuyo, activa la alarma y eso pero solo exploro un sensor el otro no, ya te daras una idea (espero).


Código:
//#include "C:\Users\G\Documents\Docs GFT\TRABAJOS\term.h"
#include <18F452.h>                                     //Libreria del pic a usar aqui se pondra el pic que se usara de aqui que        dependera la configuracion de los puertos y de los bytes

#fuses HS,NOWDT,NOPROTECT,NOLVP         //tipo de cristal externo high speed, perro guardian off, sin proteccion etc..

#use delay(clock=20000000)

//#define LCD_TYPE 2
#include <flex_lcd.c>
double val,SEN,val2,SEN2;

int16 segundos=0;
int1  permiso=0;
#define alarma PIN_B0

void main()
{
lcd_init();



setup_adc_ports(AN0_AN1_AN3);
setup_adc(ADC_CLOCK_DIV_64);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab

// TODO: USER CODE!!



lcd_gotoxy(2,1);
printf(lcd_putc,"ReFRI1:");
lcd_gotoxy(2,2);
printf(lcd_putc,"REFRI2:");

while(true)
{
set_adc_channel(0);
delay_us(10);


val=read_adc(); //LEE EL VALOR DEL SENSOR1
SEN=val*0.3925; // LO CONVIERTE A DECIMAL
lcd_gotoxy(9,1); // Y LO MUESTRA EN EL LCD
printf(lcd_putc," %2.1fC",SEN);

set_adc_channel(1);
delay_us(10);


val2=read_adc(); //LEE EL VALOR DEL SENSOR2
SEN2=val2*0.3925; // LO CONVIERTE A DECIMAL
lcd_gotoxy(9,2); // Y LO MUESTRA EN LCD
printf(lcd_putc," %2.1fC",SEN2);

delay_ms(1000);  // simple retardo de 1 segundo sin usar timer ni interrupciones

if(SEN>8){        // si SEN supera 8 grados da permiso para incrementar
   permiso=1;        // el contador de segundos
   }
else{
   permiso=0;           // si es menor o igual que 8grados quita permiso y resetea
   segundos=0;          // la cuenta de segundos
   output_low(alarma);  // y apaga la alarma si es que ya hubiera sido activada
   }

if(permiso==1){         // si hay permiso 
   segundos++;          // se incrementa el contador de segundos y 
   if(segundos==5){     // se pregunta si ha llegado a X segundos (en este caso 5 para no esperarme tanto, en tu caso seria 900)
   output_high(alarma); // si segundos ha llegado a 5 encender alarma
   }
}

} //cierra loop infinito
} //cierra main
saludos
15/04/2011 #57


Gracias en verdad me fue de mucha ayuda, ahora tengo otro problema, necesito que se active la misma alarma para un nivel inferior que en este caso sería de -1°C , igualmente pasado después de un tiempo, ya tengo una idea de como hacerle, lo que no sé es como sería para que me de temperaturas negativas el adc, ya sé que la configuración del lm35 lleva dos diodos para que me de un nivel negativo pero no sé como hacerle con eso, esa línea negativa del lm35 va a otro canal del adc?, y como lo pongo en el código?, o simplemente pongo el rango de -°1<temp<8 y ya ? o que onda?
15/04/2011 #58

Avatar de electro0x7c1

LEDZEPP dijo: Ver Mensaje
Gracias en verdad me fue de mucha ayuda, ahora tengo otro problema, necesito que se active la misma alarma para un nivel inferior que en este caso sería de -1°C , igualmente pasado después de un tiempo, ya tengo una idea de como hacerle, lo que no sé es como sería para que me de temperaturas negativas el adc, ya sé que la configuración del lm35 lleva dos diodos para que me de un nivel negativo pero no sé como hacerle con eso, esa línea negativa del lm35 va a otro canal del adc?, y como lo pongo en el código?, o simplemente pongo el rango de -°1<temp<8 y ya ? o que onda?
Saludos, bueno, primero que nada hay que ver que onda con varios puntos importantes cuando trabajamos con el ADC, primero, veo que hiciste una conversion del ADC a 100, osea que cuando lees 255 corresponde el 100, eso esta bien pero en este caso talvez no, yo lo recomendaria de esta forma:

El sensor lm35 te da 10mV por grado, asi que podemos ajustar el voltaje de referencia alto (del PIC) a 2.56V, asi la resolucion del ADC sera de

2.56V/256=10mV por bit

Si te fijas de esta forma la resolucion del ADC es la misma que la del sensor, asi la lectura es directa, si la lectura del ADC da 25 entonces son 25° sin mas problema.

Para mover el voltaje de referencia hay que indicarlo con la funcion setup_adc_ports(modo); el modo lo puedes checar en el archivo de cabecera .h buscas las constantes que acepta esta funcion, quedaria algo asi:
setup_adc_ports(AN0_AN1_AN2_AN4_VSS_VREF);
Vref es la pata A3 y ahi colocamos un pot que ajuste el voltaje a 2.56V

Luego, para medir temperaturas negativas con el LM35 como dices, hay que leer ambas salidas la que dice + y la que dice -, por ninguna sale voltaje negativo sino que la diferencia entre estas es la temperatura, por ejemplo si el sensor saca por la salida "positiva" 0.02V y por la salida "negativa" 0.52V la diferencia es de -0.50 osea -50°.

saludos

pd talvez al rato suba algun codigo de ejemplo

Bueno, este es el codigo de las dos incubadoras, le quite lo que sobraba y lo deje un poco mas ordenado, enciende la alarma cuando esta fuera del rango (-1° a 8°) y nuevamente solo con uno de los sensores, espero te sirva de ejemplo:


Código:
#include <18F452.h>                     //Libreria del pic a usar aqui se pondra el pic que se usara de aqui que        dependera la configuracion de los puertos y de los bytes
#fuses HS,NOWDT,NOPROTECT,NOLVP         //tipo de cristal externo high speed, perro guardian off, sin proteccion etc..
#use delay(clock=20000000)

#include <flex_lcd.c>

double SEN,SEN2;
int16 segundos=0;

#define alarma PIN_B0
//Canales analogicos donde se conectan los sensores
#define sensor1_pos 0   //pin A0
#define sensor1_neg 1   //pin A1
#define sensor2_pos 2   //pin A2
#define sensor2_neg 4   //pin A5


void leer_sen1(void){
set_adc_channel(sensor1_pos); //selecciona el terminal positivo
delay_us(10);                 //del sensor 1
SEN=read_adc();               //y lo lee y guarda en SEN
set_adc_channel(sensor1_neg); //selecciona terminal negativo
delay_us(10);                 //
SEN=SEN-(read_adc());         //lo lee y lo resta de la lectura
                              //del terminal positivo
}                   

void leer_sen2(void){         //lo mesmo pero con el sensor2...
set_adc_channel(sensor2_pos);
delay_us(10);
SEN2=read_adc();
set_adc_channel(sensor2_neg);
delay_us(10);
SEN2=SEN2-(read_adc());
}


void main()
{
lcd_init();
setup_adc_ports(AN0_AN1_AN2_AN4_VSS_VREF);
setup_adc(ADC_CLOCK_DIV_64);

lcd_gotoxy(2,1);
printf(lcd_putc,"REFRI1:");
lcd_gotoxy(2,2);
printf(lcd_putc,"REFRI2:");

while(true)
{
leer_sen1();               // toma la lectura del sensor1 ya sea positiva o negativa
lcd_gotoxy(9,1);           // Y LO MUESTRA EN EL LCD
printf(lcd_putc," %2.1fC",SEN);

leer_sen2();               //toma la lectura del sensor2 ya sea positiva o negativa
lcd_gotoxy(9,2);           // Y LO MUESTRA EN LCD
printf(lcd_putc," %2.1fC",SEN2);

if( (SEN>8) | (SEN<-1) ){  // si SEN supera 8 grados o baja de -1 entonces
   segundos++;             // se incrementa el contador de segundos y 
   if(segundos==5){        // se pregunta si ha llegado a X segundos (en este caso 5 para no esperarme tanto, en tu caso seria 900)
      output_high(alarma); // si segundos ha llegado a 5 encender alarma
      }
   }
else{
   segundos=0;             // resetea la cuenta de segundos
   output_low(alarma);     // y apaga la alarma si es que ya hubiera sido activada
   }

delay_ms(1000);            // simple retardo de 1 segundo sin usar timer ni interrupciones

} //cierra loop infinito
} //cierra main
este es de ejemplo y funciona, seguramente se puede hacer mejor.

Saludos

De una vez dejo la imagen en proteus de como conectar los lm35 y todo, haber si a alguien mas le puede servir:



saludos
25/04/2011 #59


Saludos, y que tal nuevamente

he tenido problemas a la hora de querer simular el programa en proteus
tengo la versiÓn seis y a la hora de darle play me sale una ventana donde dice que tiene errores, dice que los lm35 (u2,u3) no es un modelo especificado o algo asÍ, antes por el mismo problema lo simulaba con resistencias variables, pero ahora que requiero la temperatura negativa necesito forsozamente simularlo con los sensores, pero ahora se me presenta este pequeÑo problema, acontinuaciÓn mando el mensaje que aparece, y la simulacion en proteus, ojalÁ me puedan ayudar.:
Imágenes Adjuntas
Tipo de Archivo: jpg Sin título.jpg (188,2 KB (Kilobytes), 54 visitas)
Tipo de Archivo: jpg PROTEUS.jpg (294,3 KB (Kilobytes), 49 visitas)
26/04/2011 #60

Avatar de electro0x7c1

LEDZEPP dijo: Ver Mensaje
Saludos, y que tal nuevamente

he tenido problemas a la hora de querer simular el programa en proteus
tengo la versiÓn seis y a la hora de darle play me sale una ventana donde dice que tiene errores, dice que los lm35 (u2,u3) no es un modelo especificado o algo asÍ...:
Pues yo creo que tendras que usar una version mas actual de proteus, en mi caso tengo la version 7.6 sp4. Saludos.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.