Autor Tema: Contador de pulsos  (Leído 3252 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado efe87

  • PIC10
  • *
  • Mensajes: 6
Contador de pulsos
« en: 22 de Mayo de 2006, 21:08:00 »
Hola! soy un amigo de Granada(España) y necesito vuestra ayuda...he buscado información en el foro, pero tras unas cuantas horas bastante largas, no he encontrado nada que me sirviera o que por lo menos yo supiera aplicar. Estudio 1º de Desarrollo de Productos Electrónicos y en la asignatura de Lógica nos han mandado mediante el pic16f84, controlar la velocidad de un motor que se incremente en un 10% por cada pulsación de un sólo interruptor y que al llegar al 100% de la velocidad la siguiente pulsación volviera a cero (volver al principio). Por favor es urgente, soy principiante en esto pero en realidad no os pido ayuda porque ya este sea mi último recurso, sino porque me encanta la programación y es una de mis metas en un futuro y en realidad me gustaria hacerme de amigos que también les guste, por eso les dejo mi correo por si quieren contactar conmigo por el msn...soy principiante y me encantaría aprender mucho más.
Saludos..!!
Atentamente: Emilio

efe87@hotmail.com  :P
CuAnDo No PuEdAs CuMpLiR tUs SuEñOs, PiEnSa QuE sIeMpRe PuEdEs CrEaR uN pRoGrAmA QuE lOs SiMuLe ;)

Desconectado Arbolito

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 893
Re: Contador de pulsos
« Respuesta #1 en: 22 de Mayo de 2006, 22:13:55 »
Hola efe87 ¿en que lenguaje sabes programar?
Existo, aunque pienses que no pienso

Desconectado efe87

  • PIC10
  • *
  • Mensajes: 6
Re: Contador de pulsos
« Respuesta #2 en: 24 de Mayo de 2006, 17:32:22 »
Hola juanacho, se (si se puede decir k se) programar en MPLAB...Si puedes ayudarme porfavor dimelo o indicame de alguien que sepa programar en MPLAB, porque este proyecto me está volviendo loco con lo sencillo que seguro que es.
CuAnDo No PuEdAs CuMpLiR tUs SuEñOs, PiEnSa QuE sIeMpRe PuEdEs CrEaR uN pRoGrAmA QuE lOs SiMuLe ;)

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Contador de pulsos
« Respuesta #3 en: 24 de Mayo de 2006, 17:48:44 »
Hola creo que deberias de intentar de cambiar de proyecto ye que ese es demaciado complicado para un pricipiante con poco manejo del .asm, trata de cambiarlo y si no es posible yo te podria pasar una codigo que elguna ves realice para el control de un motor, pero no es tal como tu lo pindes.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado JavisusII

  • PIC12
  • **
  • Mensajes: 79
Re: Contador de pulsos
« Respuesta #4 en: 24 de Mayo de 2006, 18:06:17 »
Je je je, pues sí efe87 la verdad es que todo es fácil cuando se sabe.
Sólo quería comentarte un par de cosas:
  - Piensa que la mayoría de expertos de este foro seguramente son capazes de resolver tu problema en menos de
    unos  minutos, pero creo que es más importante que tu aprendas a resolverlo.
 - Debes plantearte el problema de forma más minuciosa:
          - ¿Qué tipo de motor es?
          - Potencias, intensidades, etc.
          - Debes diseñar tu circuito hardware.
          - Debes elegir un cristal a tu micro,etc...
        
- A la hora de programar lo podrás hacer en ensamblador o lenguaje C .
- Seguramente controlaras tu motor mediante una salida PWM que tendrás que programar tu mismo mediante soft.
- Debes leerte todos los manuales y datasheets que el fabricante orqueste en su web (Microchip)  
- Mira problemas resueltos en este foro, te darán ideas de programación.
- Pero si buscas una solución directa, entonces necesitas una persona que trabaje por tí, y eso amigo mio vale dinero.
- Expon tus avances, dudas, progresos..., creo que así, captarás más la sensibilidad que todos los genios tienen. :lol:
 
      
Xavi (Barcelona)

Desconectado MSK

  • PIC12
  • **
  • Mensajes: 53
Re: Contador de pulsos
« Respuesta #5 en: 24 de Mayo de 2006, 20:35:02 »
Hola don Emilio, para manejar el motor ( dc supongo) podes usar un transistor conectado a una red r2r al portb, el portb lo tenes que "clrf" antes de incrementarlo +25  a cada pulsacion de algun pin de entrada, acordate testear el pin del pulsador con retardos... es una idea nada mas

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Contador de pulsos
« Respuesta #6 en: 24 de Mayo de 2006, 20:40:03 »
La forma mas facil de controlar el motor es mediante PWM. Pero te recuerdo que los trabajos que se envian a los alumnos son para que adquieran destrezas que solo se adquieren con la practica, por lo que nosotros te podemos ayudar en las dudas pero tu tienes que realizar el trabajo. Por cierto si sabes "C", que en ese ciclo se da, el programa se hace en dos patadas.

Saludos.
« Última modificación: 24 de Mayo de 2006, 20:41:56 por jfh900 »
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado efe87

  • PIC10
  • *
  • Mensajes: 6
Re: Contador de pulsos
« Respuesta #7 en: 24 de Mayo de 2006, 20:53:34 »
Bueno chicos gracias a todos, por mostrarme vuestra ayuda. Al final despues de tanto tiempo intentándolo he conseguido algo pero no es exactamente lo que yo quería aun así soy feliz, porque se que lo he hecho yo mediante mi esfuerzo, mis medios y mis ganas de aprender programación, porque os diré que nadie de la clase lo ha hecho porque dicen que eso es imposible y NI SI QUIERA LO HAN INTENTADO!! bueno os voy a pasar el código en .asm para que lo miren y también adjunto una imagen del circuito en proteus por si les sirve para alguna vez... Como ya les digo no me funciona a la perfección pero bueno, algo es algo.
UN ENORME SALUDO A TODOS ..y bueno aunque ya no me sirva para aprobar la asignatura pero me gustaria que si lo consiguen realizar me avisen, lo mismo haré yo si lo consigo solucionar. Si no pues ahí se queda, como un reto para la humanidad jejejej :P
Atentamente: efe87 ;)

;******************************************************
;Control de velocidad de motor
;Selección de la velocidad, mediante un pulsador de tal manera que
;cada vez que se pulse, se incremente su velocidad en un 10%
;Autor: Emilio Molina/Curso:1ºDPA/Centro: IES VIRGEN DE LAS NIEVES
;******************************************************
      list   p=16f84      ;Tipo de procesador
      include   "P16f84.INC"   ;Definiciones de registros internos
   TABLA_SALTO   equ   0x0a
      org   0x00      ;Vector de Reset
      goto   Inicio
      org   0x04
      goto   Rutina_interrupción   
      


;Temporizaciones
   retardo_100us
   bcf      INTCON,T0IF
   movlw   .253
   movwf   TMR0
Volver1
   btfss   INTCON,T0IF
   goto   Volver1
   return
      
   retardo_200us
   bcf      INTCON,T0IF
   movlw   .250
   movwf   TMR0
Volver2
   btfss   INTCON,T0IF
   goto   Volver2
   return
   
   retardo_300us
   bcf      INTCON,T0IF
   movlw   .246
   movwf   TMR0
Volver3
   btfss   INTCON,T0IF
   goto   Volver3
   return
   
   
   retardo_400us   
   bcf      INTCON,T0IF
   movlw   .243
   movwf   TMR0
Volver4
   btfss   INTCON,T0IF
   goto   Volver4
   return
   
   
   retardo_500us
   bcf      INTCON,T0IF
   movlw   .240
   movwf   TMR0
Volver5
   btfss   INTCON,T0IF
   goto   Volver5
   return
   
   
   retardo_600us
   bcf      INTCON,T0IF
   movlw   .237
   movwf   TMR0
Volver6
   btfss   INTCON,T0IF
   goto   Volver6
   return
   
   
   retardo_700us
   bcf      INTCON,T0IF
   movlw   .234
   movwf   TMR0
Volver7
   btfss   INTCON,T0IF
   goto   Volver7
   return
   
   retardo_800us
   bcf      INTCON,T0IF
   movlw   .231
   movwf   TMR0
Volver8
   btfss   INTCON,T0IF
   goto   Volver8
   return
   
   
   retardo_900us
   bcf      INTCON,T0IF
   movlw   .228
   movwf   TMR0
Volver9
   btfss   INTCON,T0IF
   goto   Volver9
   return
   
   
   retardo_1ms
   bcf      INTCON,T0IF
   movlw   .225
   movwf   TMR0
Volver10
   btfss   INTCON,T0IF
   goto   Volver10
   return

   


Inicio      
      bsf   STATUS,RP0
      clrf   TRISA
      movlw   b'0000001'
      movwf   TRISB
      movlw   b'00000100'
      movwf   OPTION_REG
      bcf   STATUS,RP0
      clrf   PORTB
      movlw   b'00000001'
      movwf   PORTB
      clrf   INTCON
      bsf   INTCON,3
      bsf   INTCON,INTE
      bsf   INTCON,GIE
      
Dato_TABLA_SALTO
bsf   TABLA_SALTO,1

Espera
   clrwdt
   goto Espera


Rutina_interrupción;INTERRUPCIÓN
bcf      INTCON,INTF
goto   Incrementar_TABLA



Incrementar_TABLA;INCREMENTA
incf   TABLA_SALTO,1
movf   TABLA_SALTO,W
goto   Tabla

Tabla
addwf   PCL,F
call   Velocidad_0
call   Velocidad_1
call   Velocidad_2
call   Velocidad_3
call   Velocidad_4
call   Velocidad_5
call   Velocidad_6
call   Velocidad_7
call   Velocidad_8
call   Velocidad_9
call   Velocidad_10



   
;Velocidades
Velocidad_0;CT_0%
   movwf   TABLA_SALTO
   bcf      PORTB,7
   bsf      INTCON,GIE
   goto   Velocidad_0
Velocidad_1;CT_10%
   movwf   TABLA_SALTO
   bsf      PORTB,7
   call   retardo_100us
   bcf      PORTB,7
   call   retardo_900us
   bsf      INTCON,GIE
   goto   Velocidad_1
Velocidad_2;CT_20%
   movwf   TABLA_SALTO
   bsf      PORTB,7
   call   retardo_200us
   bcf      PORTB,7
   call   retardo_800us
   bsf      INTCON,GIE
   goto   Velocidad_2
Velocidad_3;CT_30%
   movwf   TABLA_SALTO
   bsf      PORTB,7
   call   retardo_300us
   bcf      PORTB,7
   call   retardo_700us
   bSf      INTCON,GIE
   goto   Velocidad_3
Velocidad_4;CT_40%
   bsf      PORTB,7
   call   retardo_400us
   bcf      PORTB,7
   call   retardo_600us
   movwf   TABLA_SALTO
   bSf      INTCON,GIE
   goto   Velocidad_4
Velocidad_5;CT_50%
   bsf      PORTB,7
   call   retardo_500us
   bcf      PORTB,7
   call   retardo_500us
   movwf   TABLA_SALTO
   bsf      INTCON,GIE
   goto   Velocidad_5
Velocidad_6;CT_60%
   bsf      PORTB,7
   call   retardo_600us
   bcf      PORTB,7
   call   retardo_400us
   movwf   TABLA_SALTO
   bsf      INTCON,GIE
   goto   Velocidad_6
Velocidad_7;CT_70%
   bsf      PORTB,7
   call   retardo_700us
   bcf      PORTB,7
   call   retardo_300us
   movwf   TABLA_SALTO
   bsf      INTCON,GIE
   goto   Velocidad_7
Velocidad_8;CT_80%
   bsf      PORTB,7
   call   retardo_800us
   bcf      PORTB,7
   call   retardo_200us
   movwf   TABLA_SALTO
   bsf      INTCON,GIE
   goto   Velocidad_8
Velocidad_9;CT_90%
   bsf      PORTB,7
   call   retardo_900us
   bcf      PORTB,7
   call   retardo_100us
   movwf   TABLA_SALTO
   bsf      INTCON,GIE
   goto   Velocidad_9
Velocidad_10;CT_100%
   bsf      PORTB,7
   clrf   TABLA_SALTO
   bsf      INTCON,GIE
   goto   Velocidad_10
   end
CuAnDo No PuEdAs CuMpLiR tUs SuEñOs, PiEnSa QuE sIeMpRe PuEdEs CrEaR uN pRoGrAmA QuE lOs SiMuLe ;)

Desconectado Arbolito

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 893
Re: Contador de pulsos
« Respuesta #8 en: 24 de Mayo de 2006, 21:11:48 »
que bueno efe que lo ayas podido resolver(al menos en parte)
bueno solo decir que como te dicen mas arriba si lo realizas en C es mucho mas cencilo.
un saludo y mejor suerte para la proxima
Existo, aunque pienses que no pienso

Desconectado MSK

  • PIC12
  • **
  • Mensajes: 53
Re: Contador de pulsos
« Respuesta #9 en: 25 de Mayo de 2006, 03:59:14 »
 Hola Emilio fijate que los CALL no tienen retorno, te esta faltando RETFIE y RETURN la secuencia pwm hacela afuera de la rutina de interrupcion.

Desconectado efe87

  • PIC10
  • *
  • Mensajes: 6
Re: Contador de pulsos
« Respuesta #10 en: 25 de Mayo de 2006, 05:28:40 »
Hola MSK, he probado a poner los return, pero si vuelven, seguiria aumentando la velocidad solo, y no tendria sentido y si pongo retfie no llega a aumentar la velocidad, simplemente atiende a la primera pulsacion pero nada mas. en cuanto  PWM nose exactamente lo que es he escuchado hablar mucho sobre eso pero si puedieras especificarme un poco mas en cuanto a como se programa y que utilización tiene, te lo agradeceria mucho ;)
CuAnDo No PuEdAs CuMpLiR tUs SuEñOs, PiEnSa QuE sIeMpRe PuEdEs CrEaR uN pRoGrAmA QuE lOs SiMuLe ;)

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Contador de pulsos
« Respuesta #11 en: 25 de Mayo de 2006, 05:33:18 »
El PWM significa modulacion por ancho de impuso y lo que hace el micro es generar una onda cuadrada de semiperiodo variable, como la energia entregada al motor es proporcional al area de la curva si el semiperiodo de la curva la ocupa toda la energia será máxima y si no ocupa nada la energia sera cero, luego podremos regular la velocidad del motor. Si el semiperiodo de la señal cuadrada es positivo y negativo, podremos ademas de controlar la velocidad parar el motor y hacer un cambio de sentido de giro.

Un saludo.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado MSK

  • PIC12
  • **
  • Mensajes: 53
Re: Contador de pulsos
« Respuesta #12 en: 25 de Mayo de 2006, 15:18:21 »
Hola te modifique algo el programa ahora tiene dos tablas una en la int. y otra afuera en el loop del pwm, trata de simularlo para saber si funciona y me contas

                (SIEMPRE SALVA EL W Y EL STATUS)
Rutina_interrupción          ;INTERRUPCIÓN
  bcf      INTCON,INTF

  movf   TABLA_SALTO,W
  call   Tabla
  movwf  velocidad
  incf      TABLA_SALTO,F
movlw   .11
subwf   TABLA_SALTO,F   ; FIJATE SI ES 11 CERO CONT.
 BTFSC  STATUS,Z
 clrf   TABLA_SALTO
  retfie

Tabla
 addwf   PCL,F
 retlw .0
 retlw .1
 retlw .2
 retlw .3
   "
   "
  "

( esto es un loop despues de "espera" )
               
velocidad
 movf   velocidad,W
 addwf   PCL,F
 goto     Velocidad_0
 goto    Velocidad_1
 goto    Velocidad_2
 "
 "
 " 

;Velocidades

Velocidad_0            ;CT_0%
 
   bcf      PORTB,7
   goto   Velocidad

Velocidad_1             ;CT_10%         ESTO ES PWM

   bsf      PORTB,7
   call   retardo_100us
   bcf      PORTB,7
   call   retardo_900us
   goto   Velocidad

 "
 "
 "


 

anything