Autor Tema: ayuda  (Leído 1837 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fran-aristi

  • PIC10
  • *
  • Mensajes: 1
ayuda
« en: 19 de Noviembre de 2017, 22:16:16 »
buena noche estoy haciendo un sumo el cual funciona muy bien pero tengo un pequeño problema programe por medio de un case para las funciones adelante, atrás, izquierda, derecha y otro para que envíe una señal que activa un arma todos están programados en cada caso dentro de un ciclo FOR para que se active durante 254 ciclos eso da nos cuantos segundos esto funciona muy bien el problema ocurre si oprimo cualquiera de los botones de forma repetida es como si el pic no alcanzara a procesar toda esta información y se bloquea tengo desconectar la fuente y volverlo a iniciar, agradezco quien me de una opción de poder solucionar este inconveniente gracias NOTA: es mi primer programa CCS C compiler

inicialmente lo tenia comunicándose entre dos PIC 18f4550 uno transmite y el otro solo recibe instrucciones no transmite
el problema es programación pero no se como solucionarlo. gracias

este el código que mencione

estos son los fusibles en un archivo .h

#include <18F4550.h>
#fuses HSPLL,NOWDT,NOLVP,PLL5,CPUDIV1,NOMCLR
#device ADC=10
#use delay(crystal=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORTCOM)
//#include <stdio.h>
#include <lcd.c>
#include <kbd_lib.c>  //D:\embebidos7\temporizador\

//int t=0;
//int com=0;
int dr,b;
char teclado;


esta es la programación en un archivo .c

#include <micro1RS232.h>
#define use_portd_lcd true
#int_RDA

void main()
{
   /*set_tris_A(0x00);
   output_A(0);*/
   
   port_b_pullups(true); // deshabilita las resistencias de proteccion del puerto b; habilita el puerto B para los datos del teclado matricial
   lcd_init();
   //for (m=1;m<=100;m++){
   lcd_gotoxy(1,1); //salta a la siguiente linea
   lcd_putc("iniciando...");
   delay_ms(200);
   lcd_putc("\f");
   lcd_putc("digite un numero");
   

   //delay_ms(100);
   
   //enable_interrupts(int_RDA);
   enable_interrupts(GLOBAL);

while(true){
   teclado=kbd_getc();
   if (teclado)
      { 
         lcd_putc("\f");
         lcd_putc(teclado);
         //printf(lcd_putc,"\f enviando %c",teclado);
      }
      if(kbhit()){
                   //fputc(dr,PORTCOM2); 
                   dr=fgetc();
                   lcd_putc(dr);
                   
                   if(dr)
                   {
                      lcd_putc(dr);
                   }
                   
              switch(dr)
              {
                 case '2':
                    for(b=0;b<=254;b++){
                         output_high(pin_A0); output_low(pin_A1); //llanta delantera izquierda hacia adelante
                         output_high(pin_A3); output_low(pin_A2); //llanta delantera derecha hacia adelante
                         output_high(pin_C1); output_low(pin_C2); //llanta trasera izquierda hacia adelante
                         output_high(pin_A4); output_low(pin_A5); // llanta trasera derecha hacia adelante
                         //output_high(pin_c0);  output_low(pin_c1);
                         lcd_putc('\f');
                         lcd_gotoxy(1,1);
                         lcd_putc("adelante"); //configuracion adelante RA0 motor1, RC1 motor 2, RC4 motor 3, RA4 motor 4
                         dr=' ';
                         if(b==254){
                             output_low(pin_A1); output_low(pin_A0); //llanta delantera izquierda apagada
                             output_low(pin_A3); output_low(pin_A2); //llanta delantera derecha apagada
                             output_low(pin_C2); output_low(pin_C1); //llanta trasera izquierda apagada
                             output_low(pin_A4); output_low(pin_A5); //llanta trasera derecha apagada
                             }
                    }
                 break;
                 
                 case '8':
                    for(b=0;b<=254;b++){
                         output_high(pin_A1); output_low(pin_A0); //llanta delantera izquierda hacia atras
                         output_high(pin_A2); output_low(pin_A3); //llanta delantera derecha hacia atras
                         output_high(pin_C2); output_low(pin_C1); //llanta trasera izquierda hacia atras
                         output_high(pin_A5); output_low(pin_A4); // llanta trasera derecha hacia atras
                         lcd_putc('\f'); 
                         lcd_putc("atras"); //configuracion atras RA1 motor1, RC2 motor 2, RC5 motor 3, RA5 motor 4
                         dr=' ';
                         if(b==254){
                             output_low(pin_A1); output_low(pin_A0); //llanta delantera izquierda apagada
                             output_low(pin_A3); output_low(pin_A2); //llanta delantera derecha apagada
                             output_low(pin_C2); output_low(pin_C1); //llanta trasera izquierda apagada
                             output_low(pin_A4); output_low(pin_A5); //llanta trasera derecha apagada
                             }
                    }
                 break;
                 
                 case '4':
                    for(b=0;b<=150;b++){
                          output_high(pin_A1); output_low(pin_A0); //llanta delantera izquierda hacia atras
                          output_high(pin_A3); output_low(pin_A2); //llanta delantera derecha hacia adelante
                          output_high(pin_C2); output_low(pin_C1); //llanta trasera izquierda hacia atras
                          output_high(pin_A4); output_low(pin_A5); //llanta trasera derecha hacia adelante
                          lcd_putc('\f'); 
                          lcd_putc("rotacion izquierda");//configuracion izquierda RA1 motor1, RC2 motor 2, RC4 motor 3, RA4 motor 4
                          dr=' ';
                          if(b==150){
                             output_low(pin_A1); output_low(pin_A0); //llanta delantera izquierda apagada
                             output_low(pin_A3); output_low(pin_A2); //llanta delantera derecha apagada
                             output_low(pin_C2); output_low(pin_C1); //llanta trasera izquierda apagada
                             output_low(pin_A4); output_low(pin_A5); //llanta trasera derecha apagada
                             }
                    }
                 break;
                 
                 case '5':
                   for(b=0;b<=254;b++){
                         /*output_low(pin_A1); output_low(pin_A0); //llanta delantera izquierda apagada
                         output_low(pin_A3); output_low(pin_A2); //llanta delantera derecha apagada
                         output_low(pin_C2); output_low(pin_C1); //llanta trasera izquierda apagada
                         output_low(pin_A4); output_low(pin_A5); //llanta trasera derecha apagada*/
                         output_high(pin_c0); //llanta trasera derecha apagada
                         lcd_putc('\f');   
                         lcd_putc(" ARMA ");
                         dr=' ';
                         if(b==254){
                             output_low(pin_C0); // apagar el arma despues de 254 ciclos
                             }
                    }
                 break; 
                 
                  case '6':
                           
                     for(b=0;b<=150;b++){
                     lcd_putc("rotacion derecha"); //configuracion izquierda RA0 motor1, RC1 motor 2, RC5 motor 3, RA5 motor 4
                            output_high(pin_A0); output_low(pin_A1); //llanta delantera izquierda hacia adelante
                            output_high(pin_A2); output_low(pin_A3); //llanta delantera derecha hacia atras
                            output_high(pin_C1); output_low(pin_C2); //llanta trasera izquierda hacia adelante
                            output_high(pin_A5); output_low(pin_A4); //llanta trasera derecha hacia atras                     
                            lcd_putc('\f');
                            if(b==150){
                             output_low(pin_A1); output_low(pin_A0); //llanta delantera izquierda apagada
                             output_low(pin_A3); output_low(pin_A2); //llanta delantera derecha apagada
                             output_low(pin_C2); output_low(pin_C1); //llanta trasera izquierda apagada
                             output_low(pin_A4); output_low(pin_A5); //llanta trasera derecha apagada
                             }
                     }
                 break;
         }
      }
     
      /**/
                 
      //TODO: User Code
   }
}
« Última modificación: 19 de Noviembre de 2017, 22:32:38 por fran-aristi »

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re:ayuda
« Respuesta #1 en: 20 de Noviembre de 2017, 09:18:08 »
No alcanzo a ver si el teclado lo manejas por interrupciones, si es así asegúrate de deshabilitarlas hasta que se haya ejecutado una instrucción completa y luego vuelves a un punto del programa en el que espera una nueva llegada de presión de una tecla.

El punto de que conectas dos pic deberias usar en el esclavo algo así como un eco, es decir que retorne al master alguna señal de que está listo para nueva información.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.


 

anything