Autor Tema: Problema con el delay (leer al ultimo)  (Leído 2515 veces)

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

Desconectado facu_diaz

  • PIC10
  • *
  • Mensajes: 5
Problema con el delay (leer al ultimo)
« en: 20 de Octubre de 2009, 21:45:32 »
Necesito hacer un programa en PIC C CCS para el pic 16f84 y como recién empiezo con esto no tengo mucha idea al respecto. El programa lo voy a utilizar para hacer andar un robot que tiene dos motores para avanzar y doblar (cuando andan los dos motores, avanza, cuando anda uno, gira).
 El robot tiene 2 sensores, sensor D y sensor I, que están conectados al pic en los pines RA0 y RA1 respectivamente. Lo que quiero hacer es que, dependiendo de la señal que envíen los sensores (0-1) el pic me de una señal de salida. Use como salida los pines RB0 y RB1 del pic. Además necesito que a la señal de salida se mantenga por 7 segundos sin importar las señales que me envíen los sensores durante ese periodo.

En esta tabla de verdad están las salidas y las entradas y los valores de cada una:

  ENTRADAS    /  SALIDAS :-/
 RAO   / RA1   /   RB0 / RB1
   0     /   0     /    1    /   1
   1     /   0     /    0    /   1
   0     /   1     /    1    /   0
   1     /   1     /    0    /   0

Con lo que estuve leyendo hice un programa que se que esta mal pero me imagino que es algo asi:

If (RAO = 0) & (RA1 = 0)
{ RBO = 1
   RB1 = 1 }
delay_ms(700);

If (RAO = 1) & (RA1 = 0)
{ RBO = 0
   RB1 = 1 }
delay_ms(700);

If (RAO = 0) & (RA1 = 1)
{ RBO = 1
   RB1 = 0 }
delay_ms(700);

If (RAO = 1) & (RA1 = 1)
{ RBO = 0
   RB1 = 0 }
delay_ms(700);


Bueno espero que puedan ayudarme y desde ya muchas gracias!   :)
« Última modificación: 24 de Octubre de 2009, 15:28:32 por facu_diaz »

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: ayuda con PIC C CCS
« Respuesta #1 en: 20 de Octubre de 2009, 22:36:58 »
hola facu_diaz  te recomiendo que cambies el titulo de tu post o si no lee las reglas del foro. por que asi nade se va a interesar en lee tu post.

con respecto a lo que mensionas de tu codigo, yo usaria un timer0 para ver cuant otimpo a pasado y si a pasado 7 seg como mensionas y lo activaria mediante un if o algo pero lo que tu estas pidiendo, lo puedes encontrar tras ver un poco los ejemplos del sr vszener. y cuando tengas algo mas menos echo pon el codigo para ver las dudas.
saludos.

a y ve este post del que te ablo a qui sale lo que "pides", bueno es la union de varios programitas pequeños.

http://www.todopic.com.ar/foros/index.php?topic=4530.0

aver bueno te echo una manito:

Código: [Seleccionar]
char flag=0,var=20;   //variables globales

///LLAMADA FUNCION INTERRUPCION
#INT_TIMER0
void interrupcion()
{
   if(flag>var){      //¿ya es 1 segundo?
      var--;         //SI -> decremento var...
      if(var<18)
         var=20;      //...ajuste fino de 1s
      flag=0;         //reset flag para contar 1s

           if(i>6){                     //¿se ha mostrado digito 7?
            i=0; //SI -> restaura valor indice(para mostrar digito 0)
      }else{         //(*) NO -> incrementa i
         i++;}
      }
   set_timer0(61);      //reset TMR0
   flag++;            //incremento variable flag
}

void main(void)
{
   lcd_init();         //inicializa lcd   
   enable_interrupts(INT_TIMER0);            //interrupcion TIMER0 activada
   setup_counters(RTCC_INTERNAL,RTCC_DIV_256);   //configuracion interrupcion TMR0
   set_timer0(61);                        //carga TMR0
   enable_interrupts(GLOBAL);               //activadas interrupciones

//has lo que quieras aqui pero recuerda que la variable i es un contador de 7 segundos
//que vuelve a cero si i>6;

}

espero que te sea util.
saludos :mrgreen:

Desconectado facu_diaz

  • PIC10
  • *
  • Mensajes: 5
Re: ayuda con PIC C CCS
« Respuesta #2 en: 21 de Octubre de 2009, 19:03:03 »
gracias japifer_22  por la ayuda aunque hice un programa con lo que estuve leyendo pero lo pruevo en el proteus y no me anda.
Este es el programa no se si sabras lo que esta mal

#include <16f84a.h>            //pic a utilizar         
#fuses XTWDT,,NONOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use standard_io(B)
#use standard_io(A)


///PROGRAMA
void main(void)
{
   set_tris_b(0x00);            //portb como salida
   set_tris_a(0xff);            //porta como entrada
   disable_interrupts(GLOBAL);      //activadas interrupciones

   while(true)
{

if(input(pin_a2)==0 && input(pin_a3)==0)
  {                           
  output_high(pin_b1);
  output_high(pin_b3);
  delay_ms(3000);     
  }
if(input(pin_a2)==0 && input(pin_a3)==1)
  {                           
  output_high(pin_b1);
  output_low(pin_b3);
  delay_ms(3000);     
  }
if(input(pin_a2)==1 && input(pin_a3)==0)
  {                           
  output_low(pin_b1);
  output_high(pin_b3);
  delay_ms(3000);     
  }
if(input(pin_a2)==0 && input(pin_a3)==1)
  {                           
  output_high(pin_b1);
  output_low(pin_b3);
  delay_ms(3000);     
  }
if(input(pin_a2)==1 && input(pin_a3)==1)
  {                           
  output_low(pin_b1);
  output_low(pin_b3);
  delay_ms(3000);     
  }
 

}
}


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ayuda con PIC C CCS
« Respuesta #3 en: 21 de Octubre de 2009, 21:20:17 »
Así debería de funcionar  :? Lo único que cambie fue colocar solo la demora al final.

Código: C
  1. #include <16f84a.h>            //pic a utilizar          
  2. #fuses XT,WDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
  3. #use delay (clock=4000000)         //Fosc=4Mhz
  4.  
  5.  
  6. ///PROGRAMA
  7. void main(void)
  8. {
  9.    disable_interrupts(GLOBAL);      //desactiva interrupciones
  10.  
  11.    while(true){
  12.  
  13. if(input(pin_a2)==0 && input(pin_a3)==0){                            
  14.   output_high(pin_b1);
  15.   output_high(pin_b3);
  16. }
  17. if(input(pin_a2)==0 && input(pin_a3)==1){                            
  18.   output_high(pin_b1);
  19.   output_low(pin_b3);
  20. }
  21. if(input(pin_a2)==1 && input(pin_a3)==0){                            
  22.   output_low(pin_b1);
  23.   output_high(pin_b3);
  24. }
  25. if(input(pin_a2)==0 && input(pin_a3)==1){                            
  26.   output_high(pin_b1);
  27.   output_low(pin_b3);
  28. }
  29. if(input(pin_a2)==1 && input(pin_a3)==1)
  30.   {                            
  31.   output_low(pin_b1);
  32.   output_low(pin_b3);
  33. }
  34.     delay_ms(3000);  
  35.  
  36. }
  37. }


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado facu_diaz

  • PIC10
  • *
  • Mensajes: 5
Re: ayuda con programa para el pic 16f84a de un robot
« Respuesta #4 en: 22 de Octubre de 2009, 18:55:51 »
sigue sin funcionar  :( puede ser problema del proteus? yo probe otro programa que copie del foro en el proteus y anduvo, que puede ser?  :?

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: ayuda con programa para el pic 16f84a de un robot
« Respuesta #5 en: 22 de Octubre de 2009, 20:34:19 »
q es exactamente lo q no te funciona...yo copie el programa ..me dio un error de compilacion con el NOLVP...lo borré..compile..y simule y funciona bien.......otra cosa no deben ser solo 4 posibilidades en las combinaciones de a3 y a2
saludos
« Última modificación: 22 de Octubre de 2009, 20:45:51 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado facu_diaz

  • PIC10
  • *
  • Mensajes: 5
Re: ayuda con programa para el pic 16f84a de un robot
« Respuesta #6 en: 23 de Octubre de 2009, 15:09:33 »
hola jhozate,  lo que pasa es que se activa una sola salida (la ultima que ponga antes del delay)
output_high(pin_b1);
  output_high(pin_b3); //en este caso se activa solo RB3
  delay_ms(3000); 

output_high(pin_b3);
  output_high(pin_b1); //en este caso se activa solo RB1
  delay_ms(3000); 

Necesito que se activen las 2 salidas a la vez.

y si pongo asi se activa una primera y despues la otra

 output_high(pin_b3);
 delay_ms(3000);
  output_high(pin_b1); //en este caso se activa solo RB1
  delay_ms(3000);

Espero puedan ayudarme  :)

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: ayuda con programa para el pic 16f84a de un robot
« Respuesta #7 en: 23 de Octubre de 2009, 21:18:44 »
 :? ...no se si te entendi bien pero ..pero pss entonces utiliza output_b(0b0000X0X)  supongo q asi se activan a la vez
saludos
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado facu_diaz

  • PIC10
  • *
  • Mensajes: 5
Re: ayuda con programa para el pic 16f84a de un robot
« Respuesta #8 en: 24 de Octubre de 2009, 14:22:42 »
gracias jhozate ahora lo unico que me falta es que se prendan por un tiempo y se apaguen por un tiempo,  yo hice esto que lo saque de un programa que prende y apaga un led por un tiempo determinado pero no me funciona, no se que estoy haciendo mal:

    if(input(pin_a2)==0 && input(pin_a3)==0){
     
      output_b(0b0001010);
      delay_ms(3000);
      output_b(0b0000000);
      delay_ms(3000);

 De esta forma el programa solo hace hasta el primer delay y a lo que sigue no lo hace


 

anything