HOLA BUENAS TARDES... SOY NUEVO EN ESTE FORO Y LES KIERO SU PEDIR AYUDA PARA AYUDARME A RESOLVER ESTE DILEMA EL CUAL SE TRATA DE MEDIR TIEMPO Y PULSOS DE IDA Y REGRESO (TIMEPO Y PULSOS QUE HIZO DEL S1 AL S2 Y S2 AL S3 ETC,,, Y DE REGRSO DEL S5 AL S4 ETC..)DE TRASLADO DE UN OBJETO, POR EL CUAL SE VAN A MEDIR POR 5 SENSORES OPTEC QUE SE ACTIVAN EN BAJO, Y EL PROBLEMA ES QUE SOLO MIDE DE IDA Y LOS MUESTRA EN LCD Y EN LABVIEW PERO CUANDO LO KIERO MEDIR DE REGRESO NO SE PUEDE Y YA CHEQUE EL PROGRAMA Y ESTA BIEN TANTO DE IDA COMO DE REGRESO PERO NO SE PORQUE NO MIDE.... ESPERO QUE ME PUEDAN AYUDAR EN ALGO, SE LOS AGRADECERE MUCHO...LES PROPORCIONO MI CORREO ELECTRONICO PARA QUE ME PUEDAN CONTACTAR MAS FACILMENTE::: marioni_19caz@hotmail.com
SOLO CUENTA TIEMPO Y PULSOS DE IDA...
#include <18f4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,PLL5,CPUDIV1,USBDIV,VREGEN,NOPBADEN,NODEBUG,PUT
#use delay (clock = 48000000)
#include <C:\Users\Equipo\Desktop\flex_lcd.c>
//C:\Users\Equipo\Desktop\flex_lcd.c>
//C:\Program Files\PICC\Drivers\lcd.c>
#include <usb_cdc.h>
#use fast_io(d)
#use fast_io(B)
#byte portb=0xF81
#byte portd=0xF83
#byte trisb=0xF93
#byte trisd=0xF95
int1 s1; //sensor1
int1 s2; //sensor2
int1 s3;//sensor3
int1 s4; //sensor4
int1 s5;//sensor5
int1 M2=0; //bandera de movimiento del objeto
int1 B1=0; //inicio de secuencia
int1 B2=0; //fin de secuencia
int1 f12=0; //enclavamiento para T12 y # de pulsos para RB0
int1 f23=0;//enclavamiento para T23 y # de pulsos para RB0
int1 f34=0;//enclavamiento para T34 y # de pulsos para RB0
int1 f45=0;//enclavamiento para T45 y # de pulsos para RB0
int1 f54=0;//enclavamiento para T54 y # de pulsos para RB0
int1 f43=0; //enclavamiento para T43 y # de pulsos para RB0
int1 f32=0; //enclavamiento para T32 y # de pulsos para RB0
int1 f21=0;//enclavamiento para T21 y # de pulsos para RB0
int16 p12=0; //almacena el # de pulsos de RB0 cuando f12=1
int16 p23=0;//almacena el # de pulsos de RB0 cuando f23=1
int16 p34=0;//almacena el # de pulsos de RB0 cuando f34=1
int16 p45=0;//almacena el # de pulsos de RB0 cuando f45=1
int16 p54=0;//almacena el # de pulsos de RB0 cuando f54=1
int16 p43=0;//almacena el # de pulsos de RB0 cuando f43=1
int16 p32=0;//almacena el # de pulsos de RB0 cuando f32=1
int16 p21=0;//almacena el # de pulsos de RB0 cuando f21=1
int16 rebote=0;
int16 p15=0; //pulsos de ida totales P12+p23+p34+p45
int16 p51=0; //pulsos de regreso totales p54+p43+p32+p21
INT16 pt=0; //pulsos totales p15+p51
int32 T12=0;//alamcena el # de desboradamientos del TMR1 cuando f12=1
int32 T23=0;//alamcena el # de desboradamientos del TMR1 cuando f23=1
int32 T34=0; //alamcena el # de desboradamientos del TMR1 cuando f34=1
int32 T45=0;//alamcena el # de desboradamientos del TMR1 cuando f45=1
int32 T54=0; //alamcena el # de desboradamientos del TMR1 cuando f54=1
int32 T43=0; //alamcena el # de desboradamientos del TMR1 cuando f43=1
int32 T32=0;//alamcena el # de desboradamientos del TMR1 cuando f32=1
int32 T21=0;//alamcena el # de desboradamientos del TMR1 cuando f21=1
float TTMR1=0.00002116; //tiempo que dura cada interrupcion
float Time12=0; //tiempo transcurrido en T12
float Time23=0; //tiempo transcurrido en T23
float Time34=0; //tiempo transcurrido en T34
float Time45=0; //tiempo transcurrido en T45
float Time54=0; //tiempo transcurrido en T54
float Time43=0; //tiempo transcurrido en T43
float Time32=0; //tiempo transcurrido en T32
float Time21=0; //tiempo transcurrido en T21
#INT_TIMER1 //interrupcion de timer1
void TIMER1_isr ()
{
setup_timer_1(T1_DISABLED);
set_timer1(65336);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
s1=bit_test(portb,7); //asigna el valor del pin rb7 a s1
s2=bit_test(portb,6);//asigna el valor del pin rb7 a s2
s3=bit_test(portb,5);//asigna el valor del pin rb7 a s3
s4=bit_test(portb,4);//asigna el valor del pin rb7 a s4
s5=bit_test(portb,3);//asigna el valor del pin rb7 a s5
if (s1==0&&B1==0)
{
B1=1;
}
if (s1==1&&B1==1)
{
M2=0;
B1=0;
B2=0;
p12=0;
p23=0;
p34=0;
p45=0;
p54=0;
p43=0;
p32=0;
p21=0;
p15=0;
p51=0;
pt=0;
rebote=0;
T12=0;
T23=0;
T34=0;
T45=0;
T54=0;
T43=0;
T32=0;
T21=0;
f12=1;
}
if (s2==0&&f12==1)
{
f12=0;
f23=1;
}
if (s3==0&&f23==1)
{
f23=0;
f34=1;
}
if (s4==0&&f34==1)
{
f34=0;
f45=1;
}
if (s5==0&&f45==1)
{
s5=1;
rebote++;
f45=0;
M2=1;
}
if (s5==1&&M2==1)
{
if (rebote>6000)
{
M2=0;
f54=1;
}
}
if (s4==0&&f54==1)
{
f54=0;
f43=1;
}
if (s3==0&&f43==1)
{
f43=0;
f32=1;
}
if (s2==0&&f32==1)
{
f32=0;
f21=1;
}
if (s1==0&&f21==1)
{
f21=0;
B2=1;
}
if (f12==1)
{
T12++; //incrementos de desbordamientos en tmr1
}
if (f23==1)
{
T23++;//incrementos de desbordamientos en tmr1
}
if (f34==1)
{
T34++; //incrementos de desbordamientos en tmr1
}
if (f45==1)
{
T45++;//incrementos de desbordamientos en tmr1
}
if (f54==1)
{
T54++;//incrementos de desbordamientos en tmr1
}
if (f43==1)
{
T43++;//incrementos de desbordamientos en tmr1
}
if (f32==1)
{
T32++;//incrementos de desbordamientos en tmr1
}
if (f21==1)
{
T21++;//incrementos de desbordamientos en tmr1
}
}
#INT_EXT
void EXT_ISR ()
{
if (f12==1)
{
p12++;//incremento de pulsos de flanco de bajada para rb0
}
if (f23==1)
{
p23++;//incremento de pulsos de flanco de bajada para rb0
}
if (f34==1)
{
p34++;//incremento de pulsos de flanco de bajada para rb0
}
if (f45==1)
{
p45++;//incremento de pulsos de flanco de bajada para rb0
}
if (f54==1)
{
p54++;//incremento de pulsos de flanco de bajada para rb0
}
if (f43==1)
{
p43++;//incremento de pulsos de flanco de bajada para rb0
}
if (f32==1)
{
p32++;//incremento de pulsos de flanco de bajada para rb0
}
if (f21==1)
{
p21++;//incremento de pulsos de flanco de bajada para rb0
}
}
void main ()
{
usb_cdc_init(); // Configuramos al puerto virtual.
usb_init(); // Inicializamos el stack USB.
set_tris_d(0x00);
set_tris_B(0xFF);
lcd_init();
set_timer1(65336);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
enable_interrupts(INT_TIMER1);
port_b_pullups(TRUE);
enable_interrupts(int_ext);
ext_int_edge(H_TO_L);
enable_interrupts(GLOBAL);
while(TRUE)
{
usb_task();
if (usb_enumerated()){ // Espera a que el dispositivo sea enumerado por el host.
if (f12==1)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"Pulsos12=%ld",p12);
delay_ms(500);
}
if (f12==0){
Time12=T12*TTMR1;
printf(usb_cdc_putc_fast," 1-2= %ld",p12);
printf(usb_cdc_putc_fast,"*");
printf(usb_cdc_putc_fast," 1-2= %4.5f",Time12);
lcd_gotoxy(1,1);
printf(lcd_putc,"PULSOS12=%ld",p12);
lcd_gotoxy(1,2);
printf(lcd_putc,"TIEMPO12=%4.5f",Time12);
delay_ms(1000);
}
if (f23==1)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"Pulsos23=%ld",p23);
delay_ms(500);
}
if (f23==0)
{
Time23=T23*TTMR1;
printf(usb_cdc_putc_fast," 2-3= %ld",p23);
printf(usb_cdc_putc_fast,"*");
printf(usb_cdc_putc_fast," 2-3= %4.5f",Time23);
lcd_gotoxy(1,1);
printf(lcd_putc,"PULSOS23=%ld",p23);
lcd_gotoxy(1,2);
printf(lcd_putc,"TIEMPO23=%4.5f",Time23);
delay_ms(1000);
}
if (f34==1)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"Pulsos34=%ld",p34);
delay_ms(500);
}
if (f34==0){
Time34=T34*TTMR1;
printf(usb_cdc_putc_fast," 3-4= %ld",p34);
printf(usb_cdc_putc_fast,"*");
printf(usb_cdc_putc_fast," 3-4= %4.5f",Time34);
lcd_gotoxy(1,1);
printf(lcd_putc,"PULSOS34=%ld",p34);
lcd_gotoxy(1,2);
printf(lcd_putc,"TIEMPO34=%4.5f",Time34);
delay_ms(1000);
}
if (f45==1){
lcd_gotoxy(1,2);
printf(lcd_putc,"Pulsos45=%ld",p45);
delay_ms(500);
}
if (f45==0){
Time45=T45*TTMR1;
p15=p12+p23+p34+p45;
printf(usb_cdc_putc_fast," 4-5= %ld",p45);
printf(usb_cdc_putc_fast,"*");
printf(usb_cdc_putc_fast," 4-5= %4.5f",Time45);
lcd_gotoxy(1,1);
printf(lcd_putc,"PULSOS45=%ld",p45);
lcd_gotoxy(1,2);
printf(lcd_putc,"TIEMPO45=%4.5f",Time45);
delay_ms(1000);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fPulsos1-5=%ld",p15);
delay_ms(1000);
}
if(f54==1){
lcd_gotoxy(1,2);
printf(lcd_putc,"Pulsos54=%ld",p54);
delay_ms(500);
}
if (f54==0){
Time54=T54*TTMR1;
printf(usb_cdc_putc_fast," 5-4= %ld",p54);
printf(usb_cdc_putc_fast,"*");
printf(usb_cdc_putc_fast," 5-4= %4.5f",Time54);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fPULSOS54=%ld",p54);
lcd_gotoxy(1,2);
printf(lcd_putc,"TIEMPO54=%4.5f",Time54);
delay_ms(1000);
}
if(f43==1){
lcd_gotoxy(1,2);
printf(lcd_putc,"Pulsos43=%ld",p43);
delay_ms(500);
}
if (f43==0){
Time43=T43*TTMR1;
printf(usb_cdc_putc_fast," 4-3= %ld",p43);
printf(usb_cdc_putc_fast,"*");
printf(usb_cdc_putc_fast," 4-3= %4.5f",Time43);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fPULSOS43=%ld",p43);
lcd_gotoxy(1,2);
printf(lcd_putc,"TIEMPO43=%4.5f",Time43);
delay_ms(1000);
}
if (f32==1){
lcd_gotoxy(1,2);
printf(lcd_putc,"Pulsos32=%ld",p32);
delay_ms(500);
}
if (f32==0){
Time32=T32*TTMR1;
printf(usb_cdc_putc_fast," 3-2= %ld",p32);
printf(usb_cdc_putc_fast,"*");
printf(usb_cdc_putc_fast," 3-2= %4.5f",Time32);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fPULSOS32=%ld",p32);
lcd_gotoxy(1,2);
printf(lcd_putc,"TIEMPO32=%4.5f",Time32);
delay_ms(1000);
}
if (f21==1){
lcd_gotoxy(1,2);
printf(lcd_putc,"Pulsos21=%ld",p21);
delay_ms(500);
}
if (f21==0){
Time21=T21*TTMR1;
p51=p54+p43+p32+p21;
printf(usb_cdc_putc_fast," 2-1= %ld",p21);
printf(usb_cdc_putc_fast,"*");
printf(usb_cdc_putc_fast," 2-1= %4.5f",Time21);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fPULSOS21=%ld",p21);
lcd_gotoxy(1,2);
printf(lcd_putc,"TIEMPO21=%4.5f",Time21);
delay_ms(1000);
lcd_gotoxy(1,1);
printf(lcd_putc,"\fPulsos5-1=%ld",p51);
delay_ms(1000);
pt=p15+p51;
printf(usb_cdc_putc_fast,"*");
printf(usb_cdc_putc_fast," Totales= %ld",pt);
lcd_gotoxy(1,1);
printf(lcd_putc," PULSOS T. ");
lcd_gotoxy(1,2);
printf(lcd_putc," =%ld",pt);
delay_ms(1000);
}
}
}
}