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: