Autor Tema: Programa en C con opciones  (Leído 2463 veces)

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

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Programa en C con opciones
« en: 02 de Abril de 2004, 11:58:00 »
Hola a Todos

Me llamo Jaime y pues soy un novato en esto de la programacion de pics en C, hasta ahora he hecho algunos programitas sencillos para irme adentrando poco a poco en esta onda. Pero ahora necesito que me echen la mano, estoy haciendo un programa para controlar un motor a pasos, y de manera general lo quiero controlar con tres botones, uno para giro a la izquierda, otro para giro a la derecha otro para detener. Al iniciar el programa quiero que espere a que yo oprima un boton para que comience a girar, y cuando oprima el boton de deterner pues que se detenga en la secuencia que iba.  Entonces si yo oprimo alguno de los botones de giro, necesito que el motor empiece a girar pero en a partir de la secuencia en la que se detuvo, ya sea a la izquierda o a la derecha.  Lo he intentado por medio de interrupciones por cambio en el puerto B pero no se que estoy haciendo que no me sale lo que necesito.  Aqui esta el codigo que hice para que me digan que ando haciendo mal, de antemano muchas gracias y saludos desde Mexico.

#include <16f874A.h>
#fuses HS, NOPROTECT, NOWDT, NOPUT, NOBROWNOUT, NOLVP, NOCPD, WRT
#use delay(clock=20000000)
#byte PORTB=0x06
#BIT RBIF=0xB.0

#define DELAY 1000
#define SWEEP 4
#define NUMSTEPS 4

     int tecla = 0;
     char step[] = {5, 9, 10, 6};
     char stepPos = 0;

#int_RB
void interrupt()
    {   
     int current;
     static int last=0xF0;   
     output_high(PIN_C1);  
     current=PORTB;
     if (!(bit_test(current,5))&&(bit_test(last,5))) {tecla=2;}
     if (!(bit_test(current,6))&&(bit_test(last,6))) {tecla=0;}
     if (!(bit_test(current,7))&&(bit_test(last,7))) {tecla=1;}     
     delay_ms(50);   
     last=current;  
    }

void iniciar()
    {
     RBIF=0;
     enable_interrupts(int_RB);
     enable_interrupts(global);
    }

void espera()
    {
     tecla=0;               
     while(tecla==0);
    }
       
void pulseMotor()
    { aqui mando las salidas con un retardo
     ............    }

void stepMotorForw()    
    { mando la secuencia hacia adelante
     ...............    }
 
void stepMotorBack()
    { mando la secuencia al reves
       ......}
   
main()
   {
    char i;
    set_tris_d(0x00);
    iniciar();
    while (TRUE)
    {
     do
       {
        espera();
       }
     while ((tecla!=2)&&(tecla!=1));       
     if (tecla==1)
       {
        for(i=0; i < SWEEP; i++)
              {
               output_low(PIN_C1);  
               pulseMotor();
               stepMotorForw();
              }
       }
     if (tecla==2)
       {
        for(i=0; i < SWEEP; i++)
              {
               output_low(PIN_C1);  
               stepMotorBack();
               pulseMotor();
              }
       }
    }
   }
 
Se aceptan sugerencias y correcciones, gracias.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Programa en C con opciones
« Respuesta #1 en: 10 de Abril de 2004, 06:46:00 »
Creo que lo has complicado en exceso, hay que buscar soluciones sencillas, cortas y fáciles de entender. Je, je eso no siempre es fácil, verdad.

No te preocupes dejo la solución en ejemplos para simular.

Un saludo

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
RE: Programa en C con opciones
« Respuesta #2 en: 12 de Abril de 2004, 10:59:00 »
Pues de que me la complico, pues creo que tienes toda la razon, y es que como soy nuevo en esto, pues todavia no conozco todas las funciones.  De todos modos muchas gracias por tu ayuda, y cuando ya logre algo mejor lo subo para que lo cheques, de antemano gracias Pocher.


 

anything