Autor Tema: CAontador de impulso y 3 7-SEG  (Leído 4214 veces)

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

Desconectado Ergon

  • PIC10
  • *
  • Mensajes: 18
CAontador de impulso y 3 7-SEG
« en: 09 de Mayo de 2009, 11:10:53 »
Muy buenas, tengo un pequeño problema y necesito que me enfoqueis un poco a la hora de crear un codigo.

A ver. Consite en simular un velocimetro.Con un generador de impulsos,mediante un PIC16F84A representar los 3 deigitos en 3 7-SEG.

El programa debera contar los impulson en el TIMERdurante un periodo de tiempo (1s) q multimplicado por la logitud del neumatico dara la velocidad en m/s. Pasado a km/h, debera representarse en los 3 7-SEG....

Como lo veis?? es factible de hacerse? utilizare Proteus ISIS para el montaje y simulacion del corcuito

Pido ayuda para que me enfoqueis un poco por donde deberia empezar ha realizar el codigo.

Muchas gracias de antemano y decir q gracias al foro se aprende un huevo !!!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: CAontador de impulso y 3 7-SEG
« Respuesta #1 en: 09 de Mayo de 2009, 12:57:13 »
Es importante para nosotros saber en que lenguaje vas a programar...  :wink:
No contesto mensajes privados, las consultas en el foro

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: CAontador de impulso y 3 7-SEG
« Respuesta #2 en: 09 de Mayo de 2009, 13:10:16 »
Hola.

1. Definir el lenguaje de programacion  :mrgreen:

Si es factible, ese metodo lo usan los medidores de velocidad que ponen aca en los buses de servicio publico para que no sobrepasen una velocidad limite.
El papel lo aguanta todo

Desconectado Ergon

  • PIC10
  • *
  • Mensajes: 18
Re: CAontador de impulso y 3 7-SEG
« Respuesta #3 en: 10 de Mayo de 2009, 17:59:38 »
a ver, soy bastante novato en esto.... yo programo en idioma.... ahora mismo no se cual es el idioma xD

Lo que si q os puedo decir es que seria algo asi:

temp       equ           0x70
              movlw       0x10
               movwf      temp

me podeis hechar un cable?

gracias

Desconectado Ergon

  • PIC10
  • *
  • Mensajes: 18
Re: CAontador de impulso y 3 7-SEG
« Respuesta #4 en: 11 de Mayo de 2009, 19:03:40 »
visto el exito... voy a esplicar algo mas detenidamente xD

a ver, yo kiero contar los impulsos que le llegan la patilla RA4 en un tiempo determinado (1s). Imaginames que han sido 20. Esos impulsos, simulando que vienen de un velocimetro, querra decir que un motor de 4tiempos habra dado 10 vueltas. Si el neumatico tiene una longitud de 1,73347m se q la velocidad es de 17'335m/s. Entonces multiplicaria esa velocidad por 3'6 nos da una velocidad de 62'4km/h. Eso es lo que querria representar en 3 7-SEG

me podeis ayudar ahora un pokillo en como lo haria en un pic?

gracias !!!!!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: CAontador de impulso y 3 7-SEG
« Respuesta #5 en: 11 de Mayo de 2009, 22:13:20 »
Ok.

Pues veo que piensas hacerlo con ASM. Lastimosamente yo programo en C. Pero suky si lo hace en ASM .... ya te ha de contestar. Lo que quieres hacer si se puede hacer en un PIC.

Saludos
El papel lo aguanta todo

Desconectado Ergon

  • PIC10
  • *
  • Mensajes: 18
Re: CAontador de impulso y 3 7-SEG
« Respuesta #6 en: 12 de Mayo de 2009, 16:13:17 »
muchas gracias, al guien puede darme luz en este tunel??

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: CAontador de impulso y 3 7-SEG
« Respuesta #7 en: 13 de Mayo de 2009, 00:34:48 »
Bueno, para ir calentando motores creo que tienes que darte una vueltita por este tutorial así te das una idea de que se trata el lenguaje y hasta por ahí se te ocurre como diseñarlo... Y nos cuentas las dudas.
No contesto mensajes privados, las consultas en el foro

Desconectado Ergon

  • PIC10
  • *
  • Mensajes: 18
Re: CAontador de impulso y 3 7-SEG
« Respuesta #8 en: 13 de Mayo de 2009, 13:52:48 »
yo en principio tengo hecho un programa para contar y otro para temporizar por serparado pero no se juntarlos y hacer el resto XD

este es el de contar:

;CONTADOR DEL TMR0
;Oscilador de 4Mhz
;


      

      List   p=16f84a
      include "p16f84a.inc"


CONTA1      equ   0x0C
CONTA2      equ   0x0D


;******DIRECCIONES********
      
      org   0x00
      goto   INICIO   
      org   0x04
      goto   int_tmr0
      org   0x05


;******SUBRUTINA********


tempo      clrf   CONTA1      ;pone a cero los contadores
      clrf   CONTA2
BUCLE      decfsz   CONTA1,F   ;decrementa i guarda el valor en el mismo registro, cuando llega a cero salta la instrucción q lo precede
      goto   BUCLE      ;ves a BUCLE
      decfsz   CONTA2,F   ;decrementa i guarda el valor en el mismo registro, cuando llega a cero salta la instrucción q lo precede
      goto   BUCLE      ;ves a BUCLE
      return
      
int_tmr0   movlw   0x99
      movwf   PORTB
      call   tempo
      call   tempo
      call   tempo
      call   tempo
      call   tempo
      bcf   INTCON,T0IF
      retfie   


;******PROGRAMA********


INICIO      bsf   INTCON,GIE
      bsf   INTCON,T0IE
      bsf   STATUS,RP0
      movlw   b'11111'
      movwf   TRISA
      clrf   TRISB   
      movlw   b'11110111'
      movwf   OPTION_REG
      bcf   STATUS,RP0
      clrf   TMR0
CUENTA      movf   TMR0,W
      movwf   PORTB
      goto   CUENTA

      end





y aparte tengo el temporizador:




list      p=PIC16F4A



;+++++++++++++ETIQUETAS+++++++++++++++++++++++

F      equ   1
W      equ   0
PORTA      equ   0x05
PORTB      equ   0x06
TRISA      equ    0x85
TRISB      equ   0X86
STATUS      equ   0x03
RP0      equ   5
OPTION_REG   equ   0x81
TMR0      equ   0x81

;+++++++++++++++DIRECCIONES+++++++++++++++++++
      
      
      org   0x00
      goto   inicio
      org   0x05


;++++++++++++++++PROGRAMA+++++++++++++++++++++

inicio      bsf   STATUS, RP0
      movlw   0x1f      
      movwf   TRISA   
      clrf   TRISB
      movlw   0xf7
      movwf   OPTION_REG
      clrf   TMR0
cuenta      movf   TMR0,W
      movwf   PORTB
      goto   cuenta

      end   

Estos los he usado en programa s que he ido haciendo pero ahora tenia esta idea del velocimetro pero me falta pulirla jajajaaj

Desconectado Ergon

  • PIC10
  • *
  • Mensajes: 18
Re: CAontador de impulso y 3 7-SEG
« Respuesta #9 en: 14 de Mayo de 2009, 18:31:10 »
nadie puede ayudarme??

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: CAontador de impulso y 3 7-SEG
« Respuesta #10 en: 17 de Mayo de 2009, 15:56:07 »
Bueno, me demore un poco pero me el tiempito de pensar como se podría hacer.
La idea seria la siguiente, configurar el timer 0 en modo contador de flanco ascendente 1:1. Con el vamos a contar los pulsos ocurridos en 1 segundo. Si llegan más de 255 puslsos en un segundo hay que agregar una variable que cuente la cantidad de overflow del timer para luego determinar correctamente cuantos pulsos han ocurrido. Si no hay más de 255 pulsos, la interrupción no es necesaria.
Entonces, se resetea los contadores para empezar, se deja pasar un segundo y con los contadores calculamos la cantidad de pulsos ocurridos. Con este valor podrás calcular la velocidad. En rutinas para compartir creo que encontraras las rutinas necesarias para el cálculo. Luego de calcular la velocidad debes pasar ese valor a BCD para enviarlos a los Display de 7 segmentos. Aquí hay un ejemplo de control de varios display de 7 segmentos con el 74LS164 útil en este caso ya que con multiplexion creo que seria más difícil.
Diagrama de flujo de la idea:

Link:


Código base:
Código: C
  1. ; **** Encabezado ****
  2.  list p=16F84A   ; Microcontrolador utilizado.-
  3.  #include P16F84A.inc    ; Definicion de registros SFR.-
  4.  __CONFIG   _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
  5. ;**** Definicion de Variables ****
  6. CBLOCK 0x0C      ; En esta posicion se declaran los registros de usuario (GPR)
  7. STATUS_Temp  ; Registro para guardar temporalmete STATUS
  8. W_Temp   ; Registro para guardar temporalmete W
  9. Overflow        ; Conteo de overflow del TIMER0
  10. ENDC
  11.  
  12. ;**** Inicio del Microcontrolador ****
  13. Reset
  14.      org            0x00
  15.      goto       Inicio          ; Salto a inicio del programa.-
  16. ;**** Vector de Interrupcion ****
  17.      org            0x04
  18.      goto    Inicio_ISR         ; Atiendo Interrupcion.-
  19. ;**** Programa principal ****
  20.      org            0x05
  21. Inicio
  22. ;---- Configuraciones ----
  23.      bsf     STATUS,RP0  ; Banco 1.-
  24.      movlw   0xF8
  25.      movwf   TRISB   ;eeeeesss
  26.      movlw   0xEF
  27.      movwf   OPTION_REG  ; Pull-Up deshabiltado, , Timer0|Ext_l_h, 1:1
  28.      bcf     STATUS,RP0  ; Banco 0.-
  29.      bsf     INTCON,GIE  ; Habilitacion general de interrupciones
  30. Bucle
  31.      clrf    TMR0
  32.      clrf    Overflow
  33.      bcf     INTCON,T0IF ; Limpiamos bandera
  34.      bsf     INTCON,T0IE ; Habilitamos interrupcion por Timer0
  35. ; demora de 1 seg.
  36.      bcf     INTCON,T0IE ; Deshabilitamos interrupcion por Timer0
  37. ; Pulsos = Overflow . 256 + Timer0
  38. ; Se calcula Velocidad
  39. ; Se pasa Velocidad a BCD
  40. ; Se actualiza displays
  41.      goto    Bucle
  42.  
  43.  
  44.  
  45. ;**** Rutina de servicio de Interrupcion ****
  46. Inicio_ISR
  47. ;---- Guardado de registro W y STATUS ----
  48.      movwf   W_Temp  ; Copiamos W a un registro Temporario
  49.      swapf   STATUS,W    ; Invertimos nibles de STATUS
  50.      movwf   STATUS_Temp ; Guardamos STATUS en un registro temporal
  51. ;---- Interrupciones ----
  52.      btfsc   INTCON,T0IF ; Interrupcion por TMR0?
  53.      goto    ISR_TMR0    ; Si, se trata interrupcion
  54. ;.............................
  55. Fin_ISR
  56. ;---- Restauramos los valores de W y STATUS ----
  57.      swapf   STATUS_Temp,W
  58.      movwf   STATUS
  59.      swapf   W_Temp,f
  60.      swapf   W_Temp,W
  61.      retfie
  62. ;.......................
  63. ISR_TMR0
  64. ; Tratamiento de Interrupcion
  65.      incf,1  Overflow
  66.      bcf     INTCON,T0IF ; Limpiamos bandera
  67.      goto    Fin_ISR
  68. ;.......................
  69.      end

Es como se me ocurre a mí que puede hacerse y en el foro hay info como para ir armándolo.

No contesto mensajes privados, las consultas en el foro