Autor Tema: Problemas al contar pulsos de un encoder  (Leído 7136 veces)

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

Desconectado victor_esp_1982

  • PIC10
  • *
  • Mensajes: 22
Problemas al contar pulsos de un encoder
« en: 06 de Junio de 2005, 13:04:00 »
Hola amigos

Necesito contar pulsos de un encoder. Para  ver si funciona he echo un programita muy sencillo q le configura el timer 1 como contador externo, capturo la cuenta y la imprimo pero siempre me sale 0 pulsos. ¿Que me puede fallar? Aqui os adjunto el codigo


void main()
{
int contador_encoder;
while(1)
{
setup_timer_1(T1_EXTERNAL);
contador_encoder=get_timer1();
printf("
contador encoder=%d
",contador_encoder);
}
}


El problema no es del encoder pq lo comprobe con un osciloscopio y si q da los pulsos pero no me los cuenta¿Es un fallo del programa? El micro q estoy utilizando es un pic18 y he oido q algun problema tienen con los contadores, puede ser esto?

Os agradeceria que me digerais que puede fallar pq yo solo no doy con ello

Un saludo y muchas gracias de antemano

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Problemas al contar pulsos de un encoder
« Respuesta #1 en: 07 de Junio de 2005, 10:49:00 »
¿Puedes poner el programa entero?

Desconectado Protheus5

  • PIC10
  • *
  • Mensajes: 37
RE: Problemas al contar pulsos de un encoder
« Respuesta #2 en: 07 de Junio de 2005, 10:56:00 »
Hola amigo, seria interesante que pusieses el codigo para verlo.

Puede pasar varias cosas: que no tengas el puerto bien configurado para captar datos, que la velocidad no sea la adecuada (ten en cuenta que los encoder dan trenes de pulsos de muy corta duracion...).

Otra cosa, cuantos canales tiene tu encoder??

Como ultima carta, si ves que te desesperas mucho y no encuentras la solucion te comento una cosa: yo tambien estoy trabajando con encoders (no se si te suena la marca us digital) y para controlar la cuenta empleo los integrados LS7166 que son unos contadores multimodo excepcionales.

Un saludo

Desconectado Protheus5

  • PIC10
  • *
  • Mensajes: 37
RE: Problemas al contar pulsos de un encoder
« Respuesta #3 en: 07 de Junio de 2005, 11:00:00 »
Se me olvidaba!! creo recordar que si usas el compilador de C de la marca CCS hay un ejemplillo que hace exactamente eso.
Echale un vistazo haber si puedes ssacar algo de ahi.

Desconectado victor_esp_1982

  • PIC10
  • *
  • Mensajes: 22
RE: Problemas al contar pulsos de un encoder
« Respuesta #4 en: 07 de Junio de 2005, 12:15:00 »
Hola de nuevo, os comento:

El encoder que estoy utilizando es un HEDS 5540 y tiene dos canales, lo unico que como a mi solo me interesa el numero de pulsos y no el sentido de giro ni la velocidad del motor solo utilizo uno de ellos. Aparte me he asegurado con las hojas de caracteristicas de este y le he puesto la resistencia de pul-up al canal. Como ya os dije, se que el encoder funciona bien porque lo alimente, lo conecte a un osciloscopio y se veia el tren de pulsos al  girar el eje.

Luego el problema esta o bien en el micro o en el codigo que puede ser que haya que poner mas lineas de configuracion aunq yo pienso q con las q puse vale aunq no estoy ya seguro.

El canal del encoder se lo he conectado a la patilla RC0 del micro que es el Timer 1 y el codigo entero es muy sencillo ya que lo he echo de prueba para ver si cuenta o no, bueno os lo poongo entero:



#include <18F8720.h>
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPROTECT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#include <stdio.h>

void main()
{
int contador_encoder;
while(1)
{
setup_timer_1(T1_EXTERNAL);
contador_encoder=get_timer1();
printf("
contador encoder=%d
",contador_encoder);
}
}

Me compila bien, lo cargo al micro, lanzo el hyperterminal, me comunica bien pero siemrpre me sale contador de encoder=0 aunq haya pulsos en el encoder

¿Que es lo q puede fallar?

Respecto a lo del programa de ejemplo  de CCS yo lo habia echado un vistazo pero no me sirve pq no cuneta los pulsos con el contador.


Muchas gracias chicos, os debo mucho

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Problemas al contar pulsos de un encoder
« Respuesta #5 en: 07 de Junio de 2005, 14:11:00 »
Creo que es porque tienes el setup_timer_1(T1_EXTERNAL); en el interior del while, ponlo en el main.

Un saludo

Desconectado victor_esp_1982

  • PIC10
  • *
  • Mensajes: 22
RE: Problemas al contar pulsos de un encoder
« Respuesta #6 en: 08 de Junio de 2005, 12:01:00 »
Joer, pues era eso Pocher, ya lo he puesto fuera del bucle como tu decias y cuenta.
Pero fijaros que curioso, al imprimirlo no va desde 0 a 255 sino de 0 a 127 luego negativo de -127 a 0. Sabeis si se puede aumentar el contador pq con 255 valores no hago nada y he probado a ponerle una especie de contador de desbordamiento para que cada vez que pase por 0 se me incremente y luego multiplicar este por 256 para obtener total de pulsos pero eso si que falla.
Madre mia que lio con esto del contador, los problemas que me está dando!!!

De todas formas muchas gracias y me habeis sido de grandisima ayuda, espero algun dia saber tanto como vosotros y poderos ayudar en lo que necesiteis

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Problemas al contar pulsos de un encoder
« Respuesta #7 en: 08 de Junio de 2005, 12:09:00 »
El Timer1 es de 16 bits, pero al asignarlo a una variable INT te estás quedando sólo con 8. Declara la variable como INT16 o como LONG y cambia el formato del printf por %lu, a ver si te va mejor así.

Desconectado victor_esp_1982

  • PIC10
  • *
  • Mensajes: 22
RE: Problemas al contar pulsos de un encoder
« Respuesta #8 en: 11 de Junio de 2005, 13:18:00 »
ahora si q lo veo claro, ya cuenta y me lo muestra con lo de int16, muchas gacias

agrin22

  • Visitante
RE: Problemas al contar pulsos de un encoder
« Respuesta #9 en: 12 de Agosto de 2005, 09:53:00 »
Escrito originalmente por nocturno66
El Timer1 es de 16 bits, pero al asignarlo a una variable INT te estás quedando sólo con 8. Declara la variable como INT16 o como LONG y cambia el formato del printf por %lu, a ver si te va mejor así.


Hola necesito que alguien me ayude con un proyecto q debo realizar es con un sensor que tarabaja de longitud como un encoder, tiene 500 dientes los cualaes mide al girar cada pulso es 1 mm de longitud es por ello que necesito enviarlo al pic16f877 y luego alli manipular esta señal para realizar potras funciones, lo primero q necesito es como adquirirlo con el pic. ya el sensor lo acondicione y al pic le llega una señal ttl.

gracias

agrin22@yahoo.es

agrin22

  • Visitante
RE: Problemas al contar pulsos de un encoder
« Respuesta #10 en: 12 de Agosto de 2005, 09:55:00 »
Hola necesito que alguien me ayude con un proyecto q debo realizar es con un sensor que tarabaja de longitud como un encoder, tiene 500 dientes los cualaes mide al girar cada pulso es 1 mm de longitud es por ello que necesito enviarlo al pic16f877 y luego alli manipular esta señal para realizar potras funciones, lo primero q necesito es como adquirirlo con el pic. ya el sensor lo acondicione y al pic le llega una señal ttl.

gracias

agrin22@yahoo.es