TODOPIC
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
23 de Octubre de 2014, 02:08:12

Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:     Búsqueda Avanzada
350209 Mensajes en 39290 Temas por 41040 Usuarios
Último usuario: omarhec
* Inicio Ayuda Buscar Calendario Ingresar Registrarse
Buscar en TodoPIC
+  TODOPIC
|-+  Microcontroladores PIC
| |-+  Lenguaje Basic para microcontroladores PIC (Moderadores: dogflu66, doppel, jansuini, Marioguillote, aitopes)
| | |-+  Contador ascendente/descendente
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Marcar como favorito Imprimir
Autor Tema: Contador ascendente/descendente  (Leído 8476 veces)
hsen
PIC12
**
Desconectado Desconectado

Sexo: Masculino
Mensajes: 82


« : 29 de Noviembre de 2006, 14:08:15 »

Hola amigos del foro:
Estoy tratando de hacer un contador por flanco ascendente/descendente, el cual debe contar
 N pulsos, (10500), de frecuencia variable, desde 0...300 cs.     
 Mostrar en la salida un pulso con periodo 50 %.
Esto debe de ser así por que a  dicha salida la necesito utilizar en otro contador el cual tiene
varios displays de 7 segmentos, y mientra refresca pasa un periodo de tiempo grande,  el cual me hace perder varios pulsos de la fracuencia inicial. 
Pensé que para mi lo mas facil es hacer otro contador aparte, el cual no tiene que perder tiempo
prendiendo los display. El problema es que no me funcionó bien en proteus.(no apaga la salida)
Como tengo muy pocos conocimientos de tema, agradezco me ayuden.Creo que manejando interrupciones
se puede hacer, pero es imposible  para mí.
Copie, y modifique parte de un código que encontre por ahí, pero funciono a medias, agradezco lo corrijan
'****************************************************************
'*  Name    : DIVISOR                                     *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2006 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 28/11/2006                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
 TRISB=0           
 TRISA=%00000001    'porta.0 entrada de pulso sensor
 
                    'porta.1 salida de pulso
 CONT VAR WORD
 flag var bit
 CONT=0                '
 inicio:
 
 
 PORTB =0
  if  flag = 0 then
     if PORTA.0 = 0 then       'para cambiar al otro flanco cambiar el 1 por 0
        cont = cont+1          'con un 1 censa en flanco de subida
        flag = 1               'con 0 censa en flanco de bajada
     endif 
endif

if flag = 1 then
    if PORTA.0 = 1 then        'para cambiar al otro flanco cambiar el 0 por 1
        flag = 0               'con un 0 censa en flanco de subida
    endif                      'con 1 censa en flanco de bajada
endif

if cont=2 then       'aquí empieza a contar pulsos
high porta.1         'despues de 2 (5250) pulsos activa porta.1
     if cont>4 then  'despues de4  (10500) pulsos activa porta.1
     low porta.1     ' pero.... no deactiva ?
     CONT=0                     
      endif           
  endif                   
 goto inicio      'SOLO ACTIVA PORTA.1 PERO NO LA DESACTIVA CUANDO
                  'ALCANZA A 4 (10500) pulsos, talvez no cuenta?
end               'creo que hay algo mal en las últimas lineas,... por lo menos.
                  'Simulado en proteus   
                  'la parte que no funciona fué la que hice yo
     
 

 
                 
« Última modificación: 20 de Febrero de 2007, 22:12:59 por hsen » En línea

Un saludo desde Rocha (Uruguay)
elreypic2
Colaborador
PIC18
*****
Desconectado Desconectado

Sexo: Masculino
Mexico Mexico

Mensajes: 483



« Respuesta #1 : 29 de Noviembre de 2006, 16:29:27 »

Hola Hsen,

Mira creo que seria mas facil si usas el contador interno del microcontrolador (el que se encuentra en el pin RA4), ya que este lo puees configurar para que cuente en cualquiera de los flancos (ascendente o descendente). Este contador es asignado al registro del timer 1 el cual puede ser de 16 bits (bueno depende del micro que estes usando) y seria mucho mas sencillo ya que en el tiempo dondo haces el refresh el contador seguira haciendo lo suyo (contar). Intentalo de esta manera.

Saludos.

Elreypic.
En línea
Mario
Colaborador
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Mexico Mexico

Mensajes: 869

Es tiempo de BREAK


« Respuesta #2 : 29 de Noviembre de 2006, 17:36:51 »

Hsen, revise esto, todo el hilo.
http://www.todopic.com.ar/foros/index.php?topic=14623.0
En línea

La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee
hsen
PIC12
**
Desconectado Desconectado

Sexo: Masculino
Mensajes: 82


« Respuesta #3 : 29 de Noviembre de 2006, 18:19:17 »

Gracias  amigos voy a intentarlo.
En línea

Un saludo desde Rocha (Uruguay)
hsen
PIC12
**
Desconectado Desconectado

Sexo: Masculino
Mensajes: 82


« Respuesta #4 : 03 de Diciembre de 2006, 20:11:28 »

Hola Amigos del foro:Logre hacer funcionar el programa gracias a la ayuda de los amigos, en realidad aporte muy poco por que mis conocimientos son muy limitados. Me hubiera gustado hacerlo con el timer 0 o 1 pero no me salió.
De todas manera presento el programa, por si le sirve a alguien.

'*******************************************************************
'*  Name    : UNTITLED.BAS                                         *
'*  Author  : [ ]                      *              *
'*  Notice  : Copyright (c) 2006 [select VIEW...EDITOR OPTIONS]    *
'*          : All Rights Reserved                                  *
'*  Date    : 02/11/2006                                           *
'*  Version : 1.0                                                  *
'*  Notes   : Este es un contador para odómetro de                 *
'*          : un vehículo automotor, entrada de pulsos, rb0        *                                                 
'*          : salida rb7, para entrar en un presentador            *
'*          : con display de 7 seg.                                *
'*          : La salida de pulsos es, ciclo 50%                    *                               
'*          : device = 16f628a                                     *                                         
'*******************************************************************
cmcon = 7
CONT VAR WORD
u var byte
flag var bit


 
TRISB = %00000001
 
inizero:
flag=0
cont=0


goto inicio

inicio:
 
if  flag = 0 then
     if PORTB.0 = 1 then       'para cambiar al otro flanco cambiar el 1 por 0
        cont = cont+1          'con un 1 sensa en flanco de subida
        flag = 1               'con 0 sensa en flanco de bajada
     endif 
endif

if flag = 1 then
    if PORTB.0 = 0 then        'para cambiar al otro flanco cambiar el 0 por 1
        flag = 0               'con un 0 sensa en flanco de subida
    endif                      'con 1 sensa en flanco de bajada
endif

if cont=5250 then   'aqui empieza a contar pulsos
cont=0               'despues de 5250 pulsos incrementa cont.en 1
u=u+1
endif


if u.0 = 0 then  'u.0 se refiere al dígito menos significativo de la variable u
    portb.7 = 0
endif

if  u.0 = 1 then
    portb.7 = 1
endif
goto    inicio
end
En línea

Un saludo desde Rocha (Uruguay)
TODOPIC
   

 En línea
Páginas: [1] Imprimir 
« anterior próximo »
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.20 | SMF © 2006-2008, Simple Machines XHTML 1.0 válido! CSS válido!
Página creada en 0.302 segundos con 23 consultas.