Autor Tema: ejecutar dos instrucciones al mismo tiempo  (Leído 16306 veces)

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

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #30 en: 15 de Septiembre de 2006, 13:20:44 »
gracias por el consejo maunix y se que estas en lo correcto con tu consejo, pero se que no me va a frustrar el que no me funcione. A mi edad (44) ya no se lleva eso, y por otro lado estoy aprendiendo cosas que no se aprenden leyendo programas sino escribiendolos.
Quisiera saber tu opinion sobre el concepto del programa, esto es, mientras un pin reciba un 1 logico este se puede medir en tiempos y a cada cierto tiempo le correspondera ejecutar una instruccion.
En el codigo que escribi en este mismo hilo hay fallos, por ejemplo creo que al final de cada etiqueta tendria que llevar un GOTO INICIO tampoco se si el tiempo para cada silaba (300ms) esta bien pero como la prueba del programa no la voy a hacer hasta finales de este mes o principios del siguiente no me corre mucha prisa
gracias por anticipado tapi8

Me gustaría echarte una mano, al menos en la parte del movimiento del robot o de ejecutar varias instrucciones "como si fuese al mismo tiempo". 

Te propongo que tu problema se resuelva por partes, es decir, primero logres que el robot se mueva fiablemente y luego vemos como se mete lo del reconocimiento de voz ( si se puede.. claro está).

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #31 en: 15 de Septiembre de 2006, 16:28:08 »
 
aqui mando un programa con alguna posibilidad (no muchas por lo que parece) de funcionar



LIST     P=16F84A
include  <16f84a>
   _conf_CP_OFF&_XT_OSC&_WDT_OFF_PWRT_ON&_LVP_OFF&_BODEN_OFF
   
pdel o   equ      0x0c
pdel 1   equ      0x0d

      ORG      0x0
      goto   inicio
      ORG      0x5
inicio
      bsf      STATUS,RP0
      movlw   0B00001
      movwf   TRISA
      movlw   0B00000000
      movwf   TRISB
      bcf      STATUS,RP0
      clrf   PORTA
      clrf   PORTB
IZQUIERDA
      btfss   PORTA,0
      goto   IZQUIERDA
      CALL   DELAY
      btfsc   POTRA,0
      goto   ATRAS
      bsf      PORTB,0
       goto   IZQUIERDA
ATRAS
      CALL   DELAY
      btfsc   PORTA,0
      goto   ADELANTE
      movlw   0x00C
      movwf   PORTB
      goto   IZQUIERDA
ADELANTE
      CALL   DELAY
      btfsc   PORTA,0
      goto   DERECHA
      movlw   0x03
      movwf   PORTB
      goto   IZQUIERDA
DERECHA
      CALL   DELAY
      btfsc   PORTA,0
      BSF      PORTB,1
DELAY
      movlw   156
      movwf   pdel0
Ploop1   movlw   213
      movwf   pdel1
Ploop2   clrwdt
pdel1L1   goto   pdel2L2
pdel2L2
      decfsz   pdel1,1
      goto   Ploop2
      decfsz   pdel0,1
      goto   Ploop1
pdelL3   GOTO   PDELl4
pdelL4   clrwdt
      return
      
      END

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #32 en: 15 de Septiembre de 2006, 17:00:27 »
tapi8, el tema puntual es que quisiera comprender bien que pretendes hacer con ese software. a eso apuntaba mi pregunta en el post anterior.

Creo que el paso de partida es ese. 
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #33 en: 16 de Septiembre de 2006, 06:34:33 »
perdona maunix ni siquiera habia leido tu antarior post, este lo hice en el mplab que te pedi un dia atras y me cuesta trabajo manejarlo, de hecho ya no fui capaz de simularlo, tampoco le puse comentarios pero es muy parecido( con alguna correccion y algo menos extenso )que otro que esta un poco mas atras en este mismo hilo.
Lo unico que pretendo es ir midiendo cuanto tiempo entra señal por RA0, de 200 en 200ms que es lo que en un principio deberia durar una silaba(esto no lo se ni se como lo voy a calcular) pero algo se nos ocurrira. A partir de que sea una silaba dos o tres se iran activando los motores que estan conectados en el puerto B.
Con respecto a hacer andar el robot creo que sera casi imposible es de estos de coleccion que parece que no funcionan casi nunca y en el mio ademas vino algun circuito medio roto y otros me los rompieron unos crios jugando con el, no trae esquemas, y el microfono que trae no valdria para esto por ser muy malo.
Este programa lo quiero probar en una protoboard con unos simples leds simulando el movimiento de los motores, un microfono algo bueno y un LM567 que lei por este mismo foro que es un discriminador de frecuencias(de esto no tengo ni idea asi que espero algun asesoramiento)
gracias por anticipado y sobre a ti Maunix por la lata que estoy dando.
Un saludo tapi8

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #34 en: 20 de Septiembre de 2006, 08:24:38 »
tapi8 según veo en tu código, tu primero sensas la presencia de señal en un pin y luego activas el motor X milisegundos

A priori, sin simular tu software, debiera funcionar. 

Según entiendo quieres medir si la señal está presente por 200mseg, por 400mseg, por 600mseg? ¿es eso?

Si es así, yo no metería un bucle de tiempo, yo que tú programaría un timer para que encienda su flag cada 10mseg.  Contaría cada ese tiempo si hay presencia de señal en el pin donde sensas sonido.  Cada vez que sensas señal incrementas la cuenta de una variable , cuando no hay señal vas al bucle de decisión de qué dirección tomar.

Si la variable llega a 20, entonces han pasado 200mseg.  Si la variable llega a 40 han pasado 400mseg.

En ese bucle verificas el valor si es <= 20, <= 40, <= 60 .  En función de eso decides a qué dirección se moverá el motor.  Luego haces la variable del contador 0 y vuelves a contar.

Saludos


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #35 en: 21 de Septiembre de 2006, 10:50:47 »
bueno Maunix gracias por contestar y FELICIDADES porque creo que estas de cumpleaños o vas a estar.
si tu crees que va a funcionar me sien to mas aliviado. Estas en lo cierto con lo de ir sensando el tiempo de 200 en 200ms creo que tambien en lo de la variable, e ir cogiendolos de 10en 10 o a lo mejormas nolo se pero creo que es una gran idea porque discimanaria mejor unas palabreas de otras y creo que esto sera muy importante me pondre a trabajar en esto, a ver por dondeempiezo, algo se me ocurrira.

Maunix si esto funciona seremos los padres del "PEOR PROGRAMA DERECONOCIMIENTO DEVOZ DELAHISTORIA DE LOS PICs" a que mola?
un saludo tapi8

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #36 en: 21 de Septiembre de 2006, 15:52:33 »
bueno Maunix gracias por contestar y FELICIDADES porque creo que estas de cumpleaños o vas a estar.
si tu crees que va a funcionar me sien to mas aliviado. Estas en lo cierto con lo de ir sensando el tiempo de 200 en 200ms creo que tambien en lo de la variable, e ir cogiendolos de 10en 10 o a lo mejormas nolo se pero creo que es una gran idea porque discimanaria mejor unas palabreas de otras y creo que esto sera muy importante me pondre a trabajar en esto, a ver por dondeempiezo, algo se me ocurrira.

Maunix si esto funciona seremos los padres del "PEOR PROGRAMA DERECONOCIMIENTO DEVOZ DELAHISTORIA DE LOS PICs" a que mola?
un saludo tapi8

Jeje, yo digo que va a funcionar la rutina de medición de ancho de pulsos, no dije que funcione el reconocimiento de voz!!!   :mrgreen: :mrgreen: :mrgreen:

Creo que para animarme o aventurarme a un tema así me debería poner a estudiar muy en profundo el tema.  Haciendo simples pruebas con mi guitarra de las señales generadas por un simple tono (y sus armónicos) realmente me ha asustado así que me parece que meterse en un tema así no es tan simple como parece.

Ni hablar cuando la persona te cambia de tono de voz jeje.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #37 en: 25 de Septiembre de 2006, 13:44:49 »
bueno Maunix estoy empezando a hacer el programa como me has dicho tu, empece a mirar como funciona el TMR0 y vaya follon, asi que te voy a hacer unas preguntas.
1ª/ para configurar el OPTION REGISTER lo hago como con ptrp registro cualquiera?
         
         movlw      aqui pongo los bits a configurar
         movwf      option reg
2ª/ para calcular el tiempo de 10ms use la formula

        T=CI*TMR0*DF
       
Donde T=10ms, CI=1MH, df=i/256 le puse la maxima division y para esto si lo hice bien me da para el TMR0=3.90625 que aproximare a 4.este es el valor a meter en el TMR0?
3ª/ cuando se me desborde el TMR0 para saberlo tengo que hacer un btfss en el TOIF del regitro INTCON? este registro tambien lo tendre que estudiar

Mira si no funciona por lo menos voy a aprender un monton que falta me hace
un saludo tapi8



Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #38 en: 25 de Septiembre de 2006, 14:59:01 »
bueno Maunix estoy empezando a hacer el programa como me has dicho tu, empece a mirar como funciona el TMR0 y vaya follon, asi que te voy a hacer unas preguntas.
1ª/ para configurar el OPTION REGISTER lo hago como con ptrp registro cualquiera?
         
         movlw      aqui pongo los bits a configurar
         movwf      option reg
2ª/ para calcular el tiempo de 10ms use la formula

        T=CI*TMR0*DF
       
Donde T=10ms, CI=1MH, df=i/256 le puse la maxima division y para esto si lo hice bien me da para el TMR0=3.90625 que aproximare a 4.este es el valor a meter en el TMR0?
3ª/ cuando se me desborde el TMR0 para saberlo tengo que hacer un btfss en el TOIF del regitro INTCON? este registro tambien lo tendre que estudiar

Mira si no funciona por lo menos voy a aprender un monton que falta me hace
un saludo tapi8




1) Sí, así es, es un registro como cualquier otro. 

2)

Si usas un XTAL de 4MHz, tu ciclo de instrucción será de 1useg.

Usando el prescaler en 1:256, y sabiendo que el máximo valor que puede tomar el TMR0 es 255 (por ser de 8 bits) el cálculo sería

Tmax = 256 * 256 * 1u[seg]  = 65535 useg = 65.635 mseg.

Ahora bíen para hacer al reves, para saber 'cuantos pasos' del timer deberán pasar para que hayan transcurrido 10mseg (10000 microsegundos) hacemos lo siguiente.

Tdeseado = 256 * TMR0 * 1u[seg]

TMR0 =10000 u[seg] / (256 * 1u[seg]) =  39,0625 --> tomamos 39

Como el TMR0 es un timer cuyo flag se activa por rebasamiento, para que el flag se encienda cada 10mseg, deberemos cargar en el 256-39 = 217. 

Al llegar a 256 el TMR0 se hace 0 pero enciende su flag.


3) Sí, tal cual, verificas que se ponga encendido el FLAG.  Luego haces 0 el flago,  incrementas la cuenta de tu variables, vuelves a cargar el TMR0. 





Por último si quieres mayor precisión para medir los 10mseg, puedes usar un prescaler más chico 1:32 por ejemplo con lo cual ganarás en precisión, de todas formas no creo que sea tan crítico para tu aplicación.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #39 en: 26 de Septiembre de 2006, 09:35:32 »
bueno gracias de nuevo aunque voy a dejar de dartelas porque me estas metiendo en unos follones jeje. Una pregunta solo (de momento) que se me olvido ayer. Para trabajar con el TMR0 tengo que cambiar la entrada RA0 por RA4 no?

un saludo tapi8

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #40 en: 26 de Septiembre de 2006, 10:17:47 »
bueno gracias de nuevo aunque voy a dejar de dartelas porque me estas metiendo en unos follones jeje. Una pregunta solo (de momento) que se me olvido ayer.
jeje, y bueno, así irás conociendo poco a poco muchas formas de hacer lo mismo , algunas son más eficientes que otras.  Ya podrás sacar tus propias conclusiones.

Para trabajar con el TMR0 tengo que cambiar la entrada RA0 por RA4 no?

Si lo usas como 'timer' con base de tiempo en el cristal interno no te hace falta, si lo quieres usar como contador o timer con base de tiempo externa, debes tener libre el pin que está asignado a él.

En tu caso creo lo mejor es usarlo como timer con base de tiempo el cristal interno.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #41 en: 26 de Septiembre de 2006, 13:44:51 »
te refieres a tomarlo sin ser ese el tiempo que en realidad entra señal por el pon y hacer comparaciones cada vez que se produzca la interrupcion? creo que te entiendo,
otra cosa estoy mirando el registro intcon para configurarlo. Tengo que poner a 1 TOIE y tambien GIE? o solo TOIE?.Como creo que solo hay que poner 1 0 2 bits a 1 lo puedo hacer con un BSF en vez de configurarlo entero como el options.
Un comentario sobre otro tema no se si para ti o para el moderador.Buscando estos dias entre los ejemplos que hay en este subforo no vi ninguno sobre robotica yo tengo unos pocos de un curso de el robot que monte, estan comprobados, o eso dice, si os parece interesante los puedo ir subiendo

salu2 tapi8

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #42 en: 26 de Septiembre de 2006, 15:02:17 »
te refieres a tomarlo sin ser ese el tiempo que en realidad entra señal por el pon y hacer comparaciones cada vez que se produzca la interrupcion? creo que te entiendo,

Asi es, si sigue activo el pin incrementas la cuenta.  Cuando está desactivado te fijas qué valor acumuló y de ahí sabras cuantos mseg transcurrieron.

otra cosa estoy mirando el registro intcon para configurarlo. Tengo que poner a 1 TOIE y tambien GIE? o solo TOIE?.Como creo que solo hay que poner 1 0 2 bits a 1 lo puedo hacer con un BSF en vez de configurarlo entero como el options.

Ambos.  El GIE es una máscara general que habilitará o deshabilitará TODAS las interrupciones de una sola vez, pero no habilitará las interrupciones que no estén específicamente habilitadas. 

Me explico:

Si GIE = 1,  T0IE = 0  : no hay interrupción posible de ejecutarse

Si GIE = 1,  T0IE = 1  : ocurrirá una interrupción si se activa el flag T0IF.

Si GIE = 0,  T0IE = 1  : no habrá interrupción por más que esté activo el flag T0IF.


Un comentario sobre otro tema no se si para ti o para el moderador.
Buscando estos dias entre los ejemplos que hay en este subforo no vi ninguno sobre robotica yo tengo unos pocos de un curso de el robot que monte, estan comprobados, o eso dice, si os parece interesante los puedo ir subiendo

Fijate en la sección de proyectos, creo que hay algo de información interesante.  Y si quieres aportar tu información puedes abrir un nuevo hilo.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #43 en: 23 de Enero de 2007, 07:00:26 »
       bunas a todos de nuevo.


    he estado un poco liado esta temporada y ahora que tengo mas tiempo voy a ver si acabo esto que empece hace ya algun tiempo he estado repasando el hilo y como me dice Maunix se como se hace pero no tengo un ejemplo practico en el que basarme pero habra que discurrir un poco.
    me he comprado un microfono que me han garatizado que tiene calidad suficiente para el experimento.
 

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ejecutar dos instrucciones al mismo tiempo
« Respuesta #44 en: 23 de Enero de 2007, 14:51:09 »
Bueno tapi8 , cuéntanos como sigues avanzando y si puedo te seguiré dando una mano.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)