Un saludo de paz y bien para todos!
Estoy tratando de hacer un registrador de datos (con pic18F4550 en PIC C ccs) para que cumpla las siguientes funciones y se vea en una pantalla LCD16x4:
FECHA: (MOSTRAR LA FECHA ACTUAL, con DS1307)
HORA: (MOSTRAR LA HORA ACTUAL, con DS1307)
TEMPERATURA: (Muestra la temperatura con un sensor LM35)
CRONÓMETRO: (Hice un reloj, esto es para que pueda ver el tiempo que va desde que quiero iniciar el registro de datos, no puedo poner un pulsador que solo me reinicie este cronómetro, ayudenme por favor :C )
Luego, con un boton redirigir la pantalla a los registros que quiero, por cada 5 minutos, mostrar la hora y la temperatura capturadas en ese instante y a su vez guardarlas en una memoria externa USB.
Solo he podido hacer hasta el cronómetro y he estado tratando de buscar información de cómo hacer el registro de datos por el intervalo de tiempo(5 minutos) guarde dicha información. Hace más de 4 años que no programo y me está costando adecuarme a todo, informo que mi código no está del todo bueno, espero puedan guiarme y/o darme alguna sugerencia, de ante mano muchas gracias
Adjunto: Código de avance y simulación en proteus
- Natalia.
Estoy tratando de hacer un registrador de datos (con pic18F4550 en PIC C ccs) para que cumpla las siguientes funciones y se vea en una pantalla LCD16x4:
FECHA: (MOSTRAR LA FECHA ACTUAL, con DS1307)
HORA: (MOSTRAR LA HORA ACTUAL, con DS1307)
TEMPERATURA: (Muestra la temperatura con un sensor LM35)
CRONÓMETRO: (Hice un reloj, esto es para que pueda ver el tiempo que va desde que quiero iniciar el registro de datos, no puedo poner un pulsador que solo me reinicie este cronómetro, ayudenme por favor :C )
Luego, con un boton redirigir la pantalla a los registros que quiero, por cada 5 minutos, mostrar la hora y la temperatura capturadas en ese instante y a su vez guardarlas en una memoria externa USB.
Solo he podido hacer hasta el cronómetro y he estado tratando de buscar información de cómo hacer el registro de datos por el intervalo de tiempo(5 minutos) guarde dicha información. Hace más de 4 años que no programo y me está costando adecuarme a todo, informo que mi código no está del todo bueno, espero puedan guiarme y/o darme alguna sugerencia, de ante mano muchas gracias
Adjunto: Código de avance y simulación en proteus
- Natalia.
CSS:
#include <18f4550.h>
#device adc=10 // Usa resolución de 10 bits
#use delay(clock=4M) // Cristal a utilizar
#fuses HS,NOWDT,NOPROTECT,NOMCLR,INTRC_IO
#define LCD_RS_PIN PIN_D0
#define LCD_RW_PIN PIN_D1
#define LCD_ENABLE_PIN PIN_D2
#define LCD_DATA4 PIN_D3
#define LCD_DATA5 PIN_D4
#define LCD_DATA6 PIN_D5
#define LCD_DATA7 PIN_D6
#include <lcd.c>
#use standard_io (A)
#use standard_io(B)
#use standard_io (C)
#use standard_io(D)
#use standard_io(E)
#include <ds1307.c>
#include <stdio.h>
#include <stdlib.h>
//#use i2c(master, sda=RTC_SDA, scl=RTC_SCL)
void main (void)
{
float temper,medicion;
int hour,min,sec;
int day,mth,year,dow;
int h1=0,m1=0,s1=0; // para el cronometro.
lcd_init(); // Inicia LCD
// PRIMERA LECTURA
lcd_gotoxy(4,1); //linea 1 FASEEL SAC
lcd_putc("FASEEL SAC");
lcd_gotoxy(4,2); //linea 2 REGISTRADOR
lcd_putc("REGISTRADOR");
lcd_gotoxy(24,1); //linea 3 DE
lcd_putc("DE");
lcd_gotoxy(23,2); //linea 4 DATOS
lcd_putc("DATOS"); // Saca texto
delay_ms(1000);
lcd_putc("\f"); // Limpia pantalla
//set_tris_b(0x00); //puerto B como salida B7
//disable_interrupts(GLOBAL); //todas interrupciones desactivadas
// HORA
lcd_gotoxy(1,1); //linea 1 FECHA:
lcd_putc("FECHA: ");
lcd_gotoxy(1,2); //linea 2 HORA:
lcd_putc("HORA : ");
// TEMPERATURA
lcd_gotoxy(17,1); //linea 3 TEMP:
lcd_putc("TEMP : ");
lcd_gotoxy(30,1); //linea 3 °C
lcd_putc((char)223); //PARA °
lcd_putc("C");
// TIEMPO DE SERVICIO
lcd_gotoxy(17,2);
lcd_putc("T.SERV:");
while (1)
{
//LEER HORA
ds1307_get_date(day,mth,year,dow);
ds1307_get_time(hour,min,sec);
lcd_gotoxy(7,1); // LINEA 1 DIA-MES-AÑO
printf(lcd_putc," %02u-%02u-%02u",day,mth,year);
lcd_gotoxy(8,2); //linea 2 HR-MIN-SEG
printf(lcd_putc,"%02u:%02u:%02u",hour,min,sec);
// LEER TEMPERATURA
lcd_gotoxy(24,1); // LINEA 3 TEMP°C EJM: 23.14 °C
setup_adc (adc_clock_internal);
setup_adc_ports (AN0_analog);
set_adc_channel (0); // Elige canal a medir RA0
delay_us (10);
medicion=read_adc (); // Hace conversión AD
setup_adc (adc_off); // Apaga ADC
temper=medicion*(0.4887585); // Pasa binario a °C
printf(lcd_putc,"%02.2f",temper); // LEE 2 DIGITOS XX.XX °C
delay_ms (100);
// RELOJ de servicio EN 0 LINEA 4
// no sé como poner un pulsador que reinicie solo este reloj :(
lcd_gotoxy(25,2);
printf(lcd_putc,"%02u:%02u:%02u",h1,m1,s1);
s1++;
delay_ms(100);
if(s1==60){ //cantidad de veces que cuenta la variable
s1=00; //comiensa desde 00a contar
m1++; //termina los segundos y salta a los minutos
}
if(m1==60){ //cantidad de veces que cuenta la variable
m1=00; //comienza desde 00 a contar
h1++; //salta a las horas
}
if(h1==24){ // cantidad de veces que la variable contara
h1=00; // comienza desde 00
s1++;
}
/* // CASOS PARA CADA 5 MIN no tengo una idea centrada de como hacerlo :(
switch (true)
{
case 1: (s1=5);
lcd_putc("\f");
lcd_gotoxy(17,1); //linea 3 TEMP:
printf(lcd_putc,"%02u:%02u:%02u",hour,min,sec);
lcd_gotoxy(17,2);
printf(lcd_putc,"%02.2f oC",temper);
delay_ms (1000);
break;
}
*/
}
}
Adjuntos
Última edición: