Hola muy buenos días colegas,
Estoy realizando un contador con un microcontrolador 18F25K50 el cual se activa al enviar un pulso a la entrada C0; este programa también realiza un envío de trama vía RS232 a un ordenador en el cual lo comunico a un programa de LABVIEW, este programa manda un caracter tipo string "G" cada 250ms y el microncontrolador una vez que recibe mediante el comando GETC() ese carácter envía una trama que contiene fecha y hora obtenida del ds1307 y el contador; el aumento del contador se realiza cada segundo.
El problema que se tiene es que el contador se retrasa cada que envía un trama incompleta y eso hace que el contador se retrase segundos; tengo duda si es mi programa de labview o si es el código en mi microcontrolador.
Saludos colegas.
...
Saludos amigos y colegas
Estoy realizando un contador con un microcontrolador 18F25K50 el cual se activa al enviar un pulso a la entrada C0; este programa también realiza un envío de trama vía RS232 a un ordenador en el cual lo comunico a un programa de LABVIEW, este programa manda un caracter tipo string "G" cada 250ms y el microncontrolador una vez que recibe mediante el comando GETC() ese carácter envía una trama que contiene fecha y hora obtenida del ds1307 y el contador; el aumento del contador se realiza cada segundo.
El problema que se tiene es que el contador se retrasa cada que envía un trama incompleta y eso hace que el contador se retrase segundos; tengo duda si es mi programa de labview o si es el código en mi microcontrolador.
Saludos colegas.
Código:
#include <18F25K50.h>
#fuses NOIESO,NOFCMEN,NOBROWNOUT,NOPUT,NOPBADEN,NOMCLR
#use delay (INTERNAL=10,000,000)
#define RTC_SDA PIN_B0
#define RTC_SCL PIN_B1
#include <DS1307.c>
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PC, timeout=250)
#include "stdlib.h"
#include <input.c>
#include "limits.h"
#rom int 0xf00000={1,2,3,4}
void main()
{
int css=0, cmm=0, chh=0, cdd=0, cmeses=0;
int x;
BYTE sec, min, hrs, day, month, yr, dow;
ds1307_init();
// ds1307_set_date_time(14,8,17,1,8,53,30); //(day,mth,year,dow,hour,min,sec) // Configuracion de Hora
long long v = read_eeprom( 7 ); //lectura y almacenamiento en variable de la localidad 7 de memoria eeprom(segundos)
long long v1= read_eeprom( 6 ); //lectura y almacenamiento en variable de la localidad 6 de memoria eeprom(minutos)
long long v2= read_eeprom( 5 ); //lectura y almacenamiento en variable de la localidad 5 de memoria eeprom(horas)
long long v3= read_eeprom( 4 ); //lectura y almacenamiento en variable de la localidad 4 de memoria eeprom(dias)
long long v4= read_eeprom( 3 ); //lectura y almacenamiento en variable de la localidad 6 de memoria eeprom(meses)
long long v12= v1*60; //Conversión de minutos a segundos
long long v13= v2*3600; //Conversión de horas a segundos
long long v14= v3*86400; //Conversión de dias a segundos
long long v15= v4*2592000; //Conversión de meses a segundos
long long vt=v+v12+v13+v14+v15;
printf( "%lu %lu %lu %lu %lu %lu ",v, v1, v2, v3, v4, vt);
delay_ms(1000);
long long contador=vt;
while(TRUE)
{
ds1307_get_date(day,month,yr,dow);
ds1307_get_time(hrs,min,sec);
output_low(PIN_A6); //RECEPCIÓN
output_low(PIN_A7);
output_low(PIN_A0);
for (x = 0; x < 3; x ++)
{
if(getc()==\'G\')
{
output_high(PIN_A0);
output_HIGH(PIN_A6); //Envio de Datos
output_HIGH(PIN_A7);
delay_ms(25);
printf("I%Lu %02u%02u%u%02u%02u%02uF %u ",contador,day,month,yr,hrs,min,sec, x); //Trama Almancenando datos
delay_ms(225);
}
}
if(INPUT(PIN_C0)==1) //Optoacoplador
{
contador++;
css++;
if((css+v)<=59) //Segundos
{
write_eeprom(7,css+v);
}
else
{
css=0;
v=0;
cmm++;
}
if((cmm+v1)<=59) //Minutos
{
write_eeprom(6,cmm+v1);
}
else
{
cmm=0;
v1=0;
chh++;
}
if((chh+v2)<=24) //Horas
{
write_eeprom(5,chh+v2);
}
else
{
(chh)=0;
v2=0;
cdd++;
}
if((cdd+v3)<=30) //Dias
{
write_eeprom(4,cdd+v3);
}
else //Meses
{
cdd=0;
v3=0;
cmeses++;
write_eeprom(3,cmeses+v4);
}
}
delay_ms(250);
}
}
Saludos amigos y colegas
Adjuntos
Última edición: