Autor Tema: PRBLEMAS CON CICLOS  (Leído 3220 veces)

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

Desconectado yuhe

  • PIC12
  • **
  • Mensajes: 76
PRBLEMAS CON CICLOS
« en: 14 de Mayo de 2008, 11:52:20 »
Hola amigos  acudo de nuevo a ustedes porque tengo un pequeño problema, les cuento. intento hacer que cuando pase un numero de ciclos me pase a la siguiente instruccion pero no lo logro y no se donde cometo el fallo .
hay les dejo el programita( es para controlar un servo  que me haga dos movimientos ) muchas gracias amigos.

  cmcon=7
   @ DEVICE INTRC_OSC
   @ device MCLR_OFF
   
     
   J VAR BYTE
 
   
  PAUSE 2000
 
  FOR J = 1 TO 274 STEP 1
  J = J + 1
  PULSOUT PORTA.1,150
  PULSOUT PORTA.0,150
  PAUSEUS 20
   NEXT J
 
 
  PAUSE 2000
 
  FOR  J = 1 TO 230  STEP 1
  J = J +1
  PULSOUT  PORTA.0,150
  PAUSEUS 20
  NEXT J
   
 
  END

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: PRBLEMAS CON CICLOS
« Respuesta #1 en: 14 de Mayo de 2008, 14:09:17 »
Yuhe, veo dos cosillas raras en tu programa.

1. Si J es de tipo Byte ¿puede llegar alguna vez a valer 274 como solicitas en el primer bucle? ¿no sería su máximo 255?

2. ¿Para qué pones el j=j+1 dentro de cada bucle?

Desconectado yuhe

  • PIC12
  • **
  • Mensajes: 76
Re: PRBLEMAS CON CICLOS
« Respuesta #2 en: 14 de Mayo de 2008, 14:26:35 »
Gracias por tu rapida respuesta Navaismo  pero sigo teniendo el mismo problema no logro que un servo me este en una posicion y cuando pase por ejemplo 4 segundos se situe en otra  :(

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: PRBLEMAS CON CICLOS
« Respuesta #3 en: 14 de Mayo de 2008, 15:01:42 »
A sorry por error de dedo elimine la respuesta pero ve la de JFmateos tiene mucha razon convierte j en word.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PRBLEMAS CON CICLOS
« Respuesta #4 en: 14 de Mayo de 2008, 17:22:13 »
Prueba de esta otra forma:

Código: QBasic/QuickBASIC
  1. DIM servo_1 AS Byte  'tendra la posicion del servo 1 en uSeg.
  2. DIM servo_2 AS Byte  'tendra la posicion del servo 2 en uSeg.
  3. DIM tiempo AS Word  '_base patron para poder medir tiempo sin
  4. '_____________________interferir en el programa, se incrementa cada 20mseg.
  5. DIM flag AS Bit  'cada 4 Seg. cambia de estado
  6. DIM periodo AS Word  'periodo de la señal de 50hz
  7. main:
  8.         IF flag = 0 THEN  'esto se ejecuta 4 Segundos y 4 de pausa
  9.                 servo_1 = 150
  10.                 servo_2 = 150
  11.                 ServoOut PORTA.1, servo_1
  12.                 ServoOut PORTA.0, servo_2
  13.         Endif
  14.         IF flag = 1 THEN  'esto se ejecuta 4 Seg y 4 de pausa
  15.                 servo_1 = 200
  16.                 servo_2 = 200
  17.                 ServoOut PORTA.1, servo_1
  18.                 ServoOut PORTA.0, servo_2
  19.         Endif
  20.         periodo = 20000 - (servo_1 + servo_2)  '_se entiende que son servos de 50Hz,
  21. '___________________________________________servo_1 + servo_2 = periodo consumido a On, pasado a useg.
  22.         WaitUs periodo  'periodo a Off, hasta completar los 1/50Hz = 20mSg
  23.         tiempo = tiempo + 1  'tiempo se incrementa cada 20mSeg
  24.         IF tiempo >= 200 THEN  '4 segundos = 4000 mSeg, 4000mSeg / 20 mSeg = 200 = 4 Seg.
  25.                 Toggle flag  'flag cambia de estado cada 4 Seg.
  26.                 tiempo = 0  'inicializa la base de tiempos
  27.         Endif
  28. GOTO main

Nota: Traduce los comandos a tu Basic
« Última modificación: 15 de Mayo de 2008, 17:01:17 por dogflu66 »
Saludos desde Granada, España.

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2062
Re: PRBLEMAS CON CICLOS
« Respuesta #5 en: 14 de Mayo de 2008, 21:16:19 »
Que tal amigos!
yuhe tu programa tiene varios detalles que debes corregir  :shock:  uno es la variable j que declaraste como byte y luego le quieres cargar 274 que como sabes eso no es posible  :mrgreen:

Por lo que debes cambiarla a word  :mrgreen:
Lo otro esta usando la instruccion pauseus 20 esto genera un retardo de 20µseg  :shock: esto es muy poco tiempo debes colocar pause 20 para obtener 20mseg de retardo para que opere correctamente el servo  :-)

Otro detalle, debes predefinir el estado inicial del pin que vas a utilizar cuando utilices la instruccion pulsout, ya que, esta instruccion lo que hace al ejecutarse es cambiar el estado inicial del pin, es decir, si estaba en cero lo pasa a uno y viceversa  :shock:  y ese estado inicial no esta en tu codigo  :mrgreen:
puedes colocar por ejemplo: low porta.o : low porta.1  'configura el pin como salida y lo pone a cero  :mrgreen:


Lo otro que veo es que los servos si estas utilizando dos se van a mover a la posicion central 90 grados y se quedaran alli  :lol:

Creo que con eso resuelves el problema

Saludos           

Desconectado yuhe

  • PIC12
  • **
  • Mensajes: 76
Re: PRBLEMAS CON CICLOS
« Respuesta #6 en: 15 de Mayo de 2008, 10:32:16 »
De nuevo muchas gracias ,da gusto aprender de personas como ustedes gracias amigos :-/