TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: liminix en 20 de Julio de 2006, 23:48:50

Título: problem secuenciales
Publicado por: liminix en 20 de Julio de 2006, 23:48:50
hola  amix ,  bueno  mi  problema  esta  en  que quisiera  modificar  la  frecuencia  en  que  prenden  los   leds
pero  no  me  sale   es cuando   pulso  no  me   sale  escala  que  necesito,  es  para  hacer  un  juego  de  luces


trisa=1
trisb=0
j var byte
led1 var portb.0
led2 var portb.1
inicio:

if porta.2=0 then
j=j+100
endif
if J=1000 then
J=100
endif

high led1
pause j
low led1
pause  j


high led2
pause j
low led2
pause j
goto inicio

  aver  si  me  dan  un  sajiros mis  estimados amigos
Título: Re: problem secuenciales
Publicado por: LordLafebre en 21 de Julio de 2006, 00:13:35
Hola:

El problema que veo es que declaras J como variabl de tipo byte, que es solo de 0 a 255 valores, declarala de tipo word, con eso consigues valores de 0 a 65535. tambien prueba inicializando j con algun valor, por ejemplo j=1 o el valor que creas conveniente segun tu necesidad.

Suerte.
Título: Re: problem secuenciales
Publicado por: liminix en 28 de Julio de 2006, 12:15:05
hola  hice lo  que  me recomendantes pero no  me  controlan  bien cuando  pulso, quisiera saber  si  se  puede  modificar  el  programa  para  hacer  que  funcione
Título: Re: problem secuenciales
Publicado por: LordLafebre en 28 de Julio de 2006, 12:53:55
Hola:

Como quieres que se vayan encendiendo los leds, cuál es la idea?
Título: Re: problem secuenciales
Publicado por: liminix en 01 de Agosto de 2006, 23:15:59
hola   doc  bueno  primero  son  los  saludos hola, mi  problem  es que quiero  que  me  modifiquen  los  tiempos que  estan  encendidos osea  la  velocidad que  parpadean
con  los  pulsadores
gracias tio, por  tu  ayuda
Título: Re: problem secuenciales
Publicado por: LordLafebre en 02 de Agosto de 2006, 00:15:29
Hola:

No enciendas individualmente los leds asi:

high led1
pause j
low led1
pause  j


high led2
pause j
low led2
pause j
goto inicio

como veras habra porblemas, ya que al utilizar pause se genera un bucle y el pic no hara nada, ademas siendo j la variable para el retardo enconces no veo o no tengo claro que quieres hacer, lo que consegiurias con eso es que primero se encienda el un led y luego el otro, y vayan parpadeando indibidualmente, si los quieres hacer parpadear simultaneamente asigna al puerto el valor para que se encienda el port b0 y b1, si lo que quieres hacer es que los leds se enciendan a diferentes frecuencias, eso ya es otra cosa.
Título: Re: problem secuenciales
Publicado por: aitopes en 02 de Agosto de 2006, 08:29:08
Hola!
Podes ahorrar un "poquito" de la memoria disponible si en lugar de
Citar
if porta.2=0 then
j=j+100
endif
if J=1000 then
J=100
endif

Haces:
--------------------------
if porta.2=0 then
j=j+1
endif
if J=10 then
J=1
endif
--------------------------

Hace exactamente lo mismo desde el punto de vista logico del programa, y con una variable Byte te alcanza. En este caso es una pavada, por que ahorraras un par de bytes de memoria y unos microsegundos de ejecucion (suponiendo que lleve mas tiempo sumar word que byte), pero si el programa es mas grande, esos pocos bytes ahorrados pueden ser la diferencia entre que entre o no en la memoria del PIC... :mrgreen:


Título: Re: problem secuenciales
Publicado por: liminix en 04 de Agosto de 2006, 19:52:10
Hola:

No enciendas individualmente los leds asi:

high led1
pause j
low led1
pause  j


high led2
pause j
low led2
pause j
goto inicio

como veras habra porblemas, ya que al utilizar pause se genera un bucle y el pic no hara nada, ademas siendo j la variable para el retardo enconces no veo o no tengo claro que quieres hacer, lo que consegiurias con eso es que primero se encienda el un led y luego el otro, y vayan parpadeando indibidualmente, si los quieres hacer parpadear simultaneamente asigna al puerto el valor para que se encienda el port b0 y b1, si lo que quieres hacer es que los leds se enciendan a diferentes frecuencias, eso ya es otra cosa.

hola  lo  que  quiero  hacer   unos  secuenciales pero , porder   regular  la  intermitencia  del  encendido osea  que  enciendan  uno  detras  de  orto  pero   quisiera  poder  regula  la  frecuencia  del  encendido
Título: Re: problem secuenciales
Publicado por: aitopes en 05 de Agosto de 2006, 21:06:48
Hola Liminix!

Segun veo en tu listado, lo que determina la "frecuencia" de encendido, o mejor dicho, el tiempo que transcurre entre que uno se enciende, se apaga y pasa al siguiente es el valor de la variable J. Con valores mas grandes, tiempos mayores, y viceversa.

Viendo tu listado original, quizas deberias poner los dos "bloques" que encienden y apagan lso leds dentro del bucle que modifica el valor de J....igualmente, no tengo muy claro que es lo que quieres hacer.....salvo lo de que 
Citar
que  enciendan  uno  detras  de  orto
....ja ja ja!

No te enojes, es un chiste nomas.

Título: Re: problem secuenciales
Publicado por: liminix en 26 de Septiembre de 2006, 12:47:53
Hola:

No enciendas individualmente los leds asi:

high led1
pause j
low led1
pause  j


high led2
pause j
low led2
pause j
goto inicio

como veras habra porblemas, ya que al utilizar pause se genera un bucle y el pic no hara nada, ademas siendo j la variable para el retardo enconces no veo o no tengo claro que quieres hacer, lo que consegiurias con eso es que primero se encienda el un led y luego el otro, y vayan parpadeando indibidualmente, si los quieres hacer parpadear simultaneamente asigna al puerto el valor para que se encienda el port b0 y b1, si lo que quieres hacer es que los leds se enciendan a diferentes frecuencias, eso ya es otra cosa.

hola  lo  que  quiero  hacer   unos  secuenciales pero , porder   regular  la  intermitencia  del  encendido osea  que  enciendan  uno  detras  de  orto  pero   quisiera  poder  regula  la  frecuencia  del  encendido
Título: Re: problem secuenciales
Publicado por: navaismo en 26 de Septiembre de 2006, 14:16:39
Segun entiendo quieres variar la velocidad de encendido de los leds. mira aqui te dejo un ejemplo espero te sirva o sea parecido a lo que busques

Código: ASM
  1. '****************************************************************
  2. '*  Name    : CORRIDO.PBP                                       *
  3. '*  Author  : Max Eduardo Reyes Vera Juarez                     *
  4. '*  Notice  : Copyright (c) 2006 Protegido Por  leyes de Autor  *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 26/09/2006                                        *
  7. '*  Version : 1.0                                               *
  8. '*  Notes   :                                                   *
  9. '*          :                                                   *
  10. '****************************************************************
  11.  
  12. TRISA = 3
  13.  
  14. MAS   VAR PORTA.0
  15. MENOS VAR PORTA.1
  16.  
  17. C VAR BYTE
  18. I VAR WORD
  19.  
  20. I = 1000
  21.  
  22. INICIO:
  23.  
  24.   IF MAS=1 OR MENOS =1 THEN CTRL
  25.  
  26.  FOR C = 0 TO 7
  27.   HIGH C
  28.   PAUSE I
  29.   LOW C
  30.   PAUSE I
  31.   IF MAS=1 OR MENOS =1 THEN CTRL
  32.  NEXT C
  33. GOTO INICIO  
  34.  
  35.  
  36.  CTRL:
  37.  IF MAS = 1 THEN
  38.   PAUSE 50
  39.    IF MAS = 1 THEN   ' REDUCIR VELOCIDAD
  40.    I = I + 200
  41.   ENDIF
  42. ENDIF
  43.  
  44. IF MENOS = 1 THEN
  45.  PAUSE 50
  46.   IF MENOS = 1 THEN   ' AUMENTAR VELOCIDAD
  47.     I = I - 200
  48.    ENDIF
  49.  ENDIF
  50.      
  51.  IF I >= 1600 THEN        ' LIMITE MINIMO DE VELOCIDAD 1.6 S
  52.  I = 200
  53. ENDIF
  54.  
  55. IF i < 200 THEN          ' LIMITE MAXIMO DE VELOCIDAD 200 mS
  56.   i = 1600
  57.  ENDIF
  58. GOTO INICIO


(http://img238.imageshack.us/img238/3083/corridovk4.jpg)

porfin encontre un geshi que se lea bien
Título: Re: problem secuenciales
Publicado por: liminix en 20 de Octubre de 2006, 19:39:23
hola  lo he  probado,no  resulta quisiera  que  me des  una  explicacion  del  programa para  ver  en  que  le  corrigo  para  que  me  resulte
es  cuando  le  mido  el   voltaje  en  las  entradas se  chupa osea se  va a  cero  voltios  sin  presionar debe  ser alguna  falla seguro
Título: Re: problem secuenciales
Publicado por: KALLITOS en 20 de Octubre de 2006, 20:23:02
Hola muchach@s...

Creo que lo que nuestro amigo solicita se puede resumir en PWM y creo que pbp no maneja bien varios  PWM al mismo tiempo pero creo que si alguien sabe de programacion en C podia traducir lo que se comenta en los suientes hilos....

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

Seria estupendo si en PBP se podria hacer algo como se puede hacer en C.......habra que practicar mucho mas...

Suerte..


Salu2
Título: Re: problem secuenciales
Publicado por: navaismo en 20 de Octubre de 2006, 22:32:56
mmm no creo que sea un PWM. Y con respecto al programa si funciona yo lo probe y fisicamente lo que hace es simplemente prender no a uno todos los puertos del PORTB y puedes aumentar o disminuir la velocidad del encendido con limites de 1.6 Segundos y 200mS, por default empieza con 1 segundo, checa que lo conectes con el cristal de 4mhz y una resistencia de 10K en mclr a vdd
Título: Re: problem secuenciales
Publicado por: liminix en 26 de Octubre de 2006, 23:16:09
lo  voy  revisar  como dices  amigo,pero  que  pasaria  si  en  ves de  que esperen un  1logico sea  un cero tendria  que  modificar solo  la  parte donde estan  los  IF NO?
MAS=0
MENOS=0
HE ESTADO REVISANDO TU PROGRAMA Y  NO  ENTIENDO ,COMO HACE ENCERDER LOS LEDS  DEL  PORTB,ME PODRIAS DAR  UNA PEQUENA EXPLICACION GRACIAS POR APOYO AMIX
HA VERDA UNA PREGUNTITA QUE PROGRAMA USAS  PARA POSTEAR  LOS  CIRCUITOS
Título: Re: problem secuenciales
Publicado por: navaismo en 27 de Octubre de 2006, 00:17:29
Si efectivamente si quieres usar un 0 solo debes cambiar en todos los IF's el 1 por el 0.

La parte donde se prenden los Puertos del PORTB es esta:

Código: [Seleccionar]
FOR C = 0 TO 7
  HIGH C
  PAUSE I
  LOW C
  PAUSE I
  IF MAS=1 OR MENOS =1 THEN CTRL
 NEXT C

Ahora en pedacitos:

En esa parte del codigo lo que se hace es una cuenta de 0 a 7 usando la variable C como almacenamiento, en total seran 8 cuentas, que corresponden a los 8 bits del puerto B (RB0.....RB7)
Código: [Seleccionar]
FOR C = 0 TO 7

En esta parte se usa el comando HIGH, el cual pone en estado alto (o 1) el pin correspondiente ( sintaxis HIGH PIN, el pin es puesto como salida automaticamente), en este caso pones HIGH C y C corresponde a un valor entre 0 y 7; lo cual hara que si C vale 0 pondra en estado alto el pin 0 del PORTB (RB0). -Por default al colocar solo un numero 0..1 ..2..7, el compilador  asume que se trata del puerto B de cualquier PIC para usar cualquier otro puerto deberas poner PORTA.X o PORTX.X o bien el alias del PIN).

El tiempo que dura en estado alto esta dado por la linea PAUSE (sintaxis Pause tiempo en mS) y el tiempo esta dado por el valor de la variable I
Código: [Seleccionar]
  HIGH C
  PAUSE I

Seguidamente el Valor de C es puesto en estado bajo o 0 con la intruccion LOW (sintaxis LOW PIN), en este caso pin es el valor de C y el tiempo de duracion esta dado por la variable I
Código: [Seleccionar]
  LOW C
  PAUSE I

Esos dos pedazos lo que hacen es prender y apagar un mismo pin durante el tiempo que posea la variable I

Esta parte lo que hace es verificar si se incremento o decremento el tiempo de PAUSE
Código: [Seleccionar]
IF MAS=1 OR MENOS =1 THEN CTRL

Y por ultimo cerramos el ciclo y lo incrementamos con el cierre de la Instruccion FOR..Next, C se incrementara de uno en uno a menos que definamos los pasos, es decir,  Si C valia 0 ahora valdra 1 y esto se repetira hasta que C valga 7, cuando C sea igual a 7 el programa continuara con la siguiente linea de codigo que esta despues del NExt
Código: [Seleccionar]
NEXT C



Y para subir las imagenes de los circuitos, uso la tecnica heredada por Lord:

1.- Capturas la imagen de tu circuito
2.- La guardas con la extension que quieras
3.- la Subes a www.imageshack.us
4.- Copias el  link que dice Direct link to image (despues de que se adjunte)
5.- En tu respuesta añades el siguiente codigo:
Código: [Seleccionar]
[img] la direccion que copiaste [/img]

y listo se veran todas las imagenes que quieras
Título: Re: problem secuenciales
Publicado por: liminix en 09 de Noviembre de 2006, 13:06:23
hola amigo te preguntaba por el programa que usas para editar tus circuitos por el wormech que tengo no tiene  al pic en su librerias
Título: Re: problem secuenciales
Publicado por: navaismo en 09 de Noviembre de 2006, 15:20:21
es el PROTEUS
Título: Re: problem secuenciales
Publicado por: liminix en 21 de Noviembre de 2006, 23:24:22
hola amigo descarge la version demo de internet ,  no se no habra un manual donde me puede leer para aprender ha manejarlo
Título: Re: problem secuenciales
Publicado por: navaismo en 22 de Noviembre de 2006, 02:46:44
en el foro de simuladores existen muchos post de como usarlo, o bien rapidamente puedes ver las miniguias de MKB y ver como se usa muy superficialmente