Autor Tema: segundo esacto en niple 5.6  (Leído 9961 veces)

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

Desconectado Heraldosantos

  • PIC10
  • *
  • Mensajes: 40
segundo esacto en niple 5.6
« en: 29 de Febrero de 2012, 13:29:21 »
Hola les comento estoy haciendo un simple cronometro, el cual quiero que maneje hasta centecimas de segundo, para lo cual configure la interrupcion por  TMR0 cada 10ms por lo cual tengo un contador que cuando se interrumpe este incrementa hasta llegar a 100, cuando llega a 100 este suama un segundo. y asi tambien para el minuto.
El problema se da en la visualizacion del LCD, el problema se me da que cuando controlo con un cromoetro el cronometro me marca 1 minuto y mi cronometro me marca 42 segundos, osea esta lento.
EL cristal que uso es de 20Mhz,  ah la visualizacion esta adentro de la interrupcion del tmr0
adjunto el programa para que me den una ayuda. ah esta en la version 5.6
saludos
 

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: segundo esacto en niple 5.6
« Respuesta #1 en: 29 de Febrero de 2012, 13:54:50 »
Voy a echar un vistazo.

Cual es el que va lento que no me ha quedado claro. el reloj o la visualizacion

F.
Todos los días se aprende algo nuevo.

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: segundo esacto en niple 5.6
« Respuesta #2 en: 29 de Febrero de 2012, 16:41:55 »
Visto el programa y bajo mi punto de vista entiendo que lo que se atrasa es la cuenta de tu programa.

Para mi la razon está en la cantidad de instrucciones que hay dentro de la rutina de interrupcion del TMR0, ademas me parece que con la primera instrucion dentro de la interrupcion al colocar lo de "Reiniciar" me da la impresion que el valor del tmro pasa a valor 00 y no se si los preescales, con esto hasta que se desborbe por una nueva interrupcion tienen que contar 255 pulsos.
Si te das cuenta al principio cuando configuras el TMRO para conseguir los 10msg hay que contar solo 125pulsos con lo que hay puede estar parte del retraso ya que para cada interrupcion se esta contando el doble.

Yo probaria con al principio de la interrupcion solo parar el TMR0 y justo al final antes del fin de la interrupcion lo recargaria de nuevo. Por otra parte intentaria sacar todo lo de actualizar el valor de visualizacion de la rutina de interrupcion, erservando esta solo para incrementar los valores de los registros pertinentes.

Te adjunto una imagen de como seria una interrupcion del TMRo para que sea efectiva.

F.
« Última modificación: 29 de Febrero de 2012, 16:47:49 por Fer_TACA, Razón: Añadir fichero »
Todos los días se aprende algo nuevo.

Desconectado Heraldosantos

  • PIC10
  • *
  • Mensajes: 40
Re: segundo esacto en niple 5.6
« Respuesta #3 en: 29 de Febrero de 2012, 17:51:51 »
Gracias Fer_TACA, vos sabes que probe sacando la vizualizacion afuera pero no se alcanza a vizualisar los numeros, en el display, ojo eso lo hice con un cristal de 4mhz con el de 20 no probe. voy a probar eso que me decis y te comento que eso de reiniciar el tmr0 cuando entra en la interrupcion lo saque de un ejemplo que dejo canito en la web
pruebo y te comento
Gracias

Desconectado Heraldosantos

  • PIC10
  • *
  • Mensajes: 40
Re: segundo esacto en niple 5.6
« Respuesta #4 en: 23 de Abril de 2012, 21:22:50 »
Sigo con mi problema, no puedo lograr el segundo esacto, si le saco la visualizacion a la interrupcion y la pongo fuera no se visualizan las centecimas, y si pondo dento de la interrupcion se hace lento, es como que para hacer la visualizacion hay un retardo en el envio de datos. porque lo optimice lo mas que pude y nada
el problema lo tengo al visualizar las centecimas
Ayudaaaaa por favoor.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: segundo esacto en niple 5.6
« Respuesta #5 en: 23 de Abril de 2012, 23:11:51 »
Hola heraldosantos, no uso niple, pero te recomiendo usar el timer2 como base de tiempos para que tengas mas presicion, y dentro de la interrupcion un flag que indique la necesidad de mostrar el tiempo, pero éste en el bucle principal no dentro de la interrupcion.

mira por ACA

saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Heraldosantos

  • PIC10
  • *
  • Mensajes: 40
Re: segundo esacto en niple 5.6
« Respuesta #6 en: 23 de Abril de 2012, 23:44:05 »
Kallitos Gracias por la idea tiene pinta de que puede ser la solucion, pero no me esta quedando en claro algo:
En el TMR0 que configuro (la interrupsion del segundo?)
y en el tmr2 configuro la visualizacion del tiempo en el lcd? o al reves todo

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: segundo esacto en niple 5.6
« Respuesta #7 en: 24 de Abril de 2012, 00:18:45 »
unicamente usa el tmr2 cuando salta la interrupcion haces la suma del tiempo, en este caso 10ms, y pones a 1 un flag que diga ke hay nuevo valor y se debe mostrar, en el programa principal realiza un test del flag, si esta a 1 la muestra en el lcd y pone a 0 el flag.

asi estara atento y no retrasaras, procura usar la menor cantidad de codigo posible dentro de las interrupciones.

saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Heraldosantos

  • PIC10
  • *
  • Mensajes: 40
Re: segundo esacto en niple 5.6
« Respuesta #8 en: 24 de Abril de 2012, 09:24:40 »
Bueno voy a probar y ver que pasa, en estos dias te cuento que paso.
Saludos y muchas gracias.

Desconectado vesperia

  • PIC10
  • *
  • Mensajes: 34
Re: segundo esacto en niple 5.6
« Respuesta #9 en: 24 de Abril de 2012, 12:51:16 »
hola! el problema que tenés es que al usar el timer 0 configurado para temporizar automáticamente el niple te configura el prescaler en 16 y 125 incrementos, lo que genera una interrupción cada 400 uS. Después niple cuenta 2000 ciclos y llama a la rutina de interrupción que vos pedís, pero la realidad es que cada 400 uS el programa se para y hace cosas que te retrasan el tiempo total. Empeza por usar el timer 1, configura el prescaler en 8 y 6250 incrementos para generar una sola interrupción de 10 mS.

Después podés reiniciar el timer dentro de la interrupción y volver a activarlo (no es necesario reconfigurarlo), si el tiempo de refresco del lcd no es mayor a 10 mS podés refrescar todo ahí mismo. Yo tengo un programa que genera bases de tiempo a partir de 10 mS refrescando un gLCD, que es muuuuuucho mas lento q tu display de caracteres.. así q no tendrías que tener problemas. Sino también podés probar haciendo solo la suma de tiempo y usar un flag como dice kallitos.

Conta q tal te fue con los cambios, saludos.

Desconectado Heraldosantos

  • PIC10
  • *
  • Mensajes: 40
Re: segundo esacto en niple 5.6
« Respuesta #10 en: 24 de Abril de 2012, 13:04:34 »
Gracias Vesperia, con esto me dan un gran incentivo para no dejar de lado este proyectito
Saludos los mantendre al tanto con los resultado obtenidos

Desconectado Segga

  • PIC10
  • *
  • Mensajes: 28
Re: segundo esacto en niple 5.6
« Respuesta #11 en: 05 de Junio de 2012, 11:16:35 »
Estimado Heraldo, no se si resolviste tu problema, pero te comento que Niple en las ultimas versiones, incorpora la posibilidad de temporizar un tiempo deseado con los temporizadores internos.

Cuando configuras el temporizador, seleccionas "Temporizar" y automáticamente Niple realiza el cálculo y las configuraciones de prescalado, incrementos en el TMR y cantidad de bucles, según la velocidad de cristal que estés usando, para generar un segundo, o el tiempo que desees. Tiene una precisión de 1 micro segundo.

Luego en la programación del entorno de interrupción por TMR debes cargar el módulo "Reiniciar" que esta en las herramientas de TMR junto con "Configurar". Con esto Niple colocara dos bloques, el primero es el que se encarga de recargar el valor de los incrementos en el TMR en cada interrupción. El segundo, es el que dice cuando llego al tiempo deseado, por ejemplo 1 segundo.

Espero haberte ayudado.

Saludos,

Desconectado Heraldosantos

  • PIC10
  • *
  • Mensajes: 40
Re: segundo esacto en niple 5.6
« Respuesta #12 en: 05 de Junio de 2012, 16:50:02 »
Estimado Heraldo, no se si resolviste tu problema, pero te comento que Niple en las ultimas versiones, incorpora la posibilidad de temporizar un tiempo deseado con los temporizadores internos.

Cuando configuras el temporizador, seleccionas "Temporizar" y automáticamente Niple realiza el cálculo y las configuraciones de prescalado, incrementos en el TMR y cantidad de bucles, según la velocidad de cristal que estés usando, para generar un segundo, o el tiempo que desees. Tiene una precisión de 1 micro segundo.

Luego en la programación del entorno de interrupción por TMR debes cargar el módulo "Reiniciar" que esta en las herramientas de TMR junto con "Configurar". Con esto Niple colocara dos bloques, el primero es el que se encarga de recargar el valor de los incrementos en el TMR en cada interrupción. El segundo, es el que dice cuando llego al tiempo deseado, por ejemplo 1 segundo.

Espero haberte ayudado.

Saludos,

Hola, Antes que Nada gracias por preocuparte por mi problema, todabia no realice las pruebas porque mande a hacer hacer los circuitos impresos, creo que esta semana los tendre y ya podre probar. Ev verdad lo que vos decis pero pasa que de esa manera en el tmr0 el programa se interrumpe cada 255 ciclos lo cual no podes poner mucho dentro de la interrupcion, fijate y si lees bien las respuestas anteriores ahi me explicaron al dedillo como hay que hacer, y cuando te fijes en niple te vas a dar cuenta que es asi como dicen, de todas maneras nuevamente gracias por tu interes.

Desconectado Segga

  • PIC10
  • *
  • Mensajes: 28
Re: segundo esacto en niple 5.6
« Respuesta #13 en: 06 de Junio de 2012, 09:20:14 »
Estimado Heraldo, esta bien lo que me decís.

No se que versión de Niple estés usando, pero cuando yo ingreso el módulo de configuración del TMR0 me propone prescalado 64 x 125 incrementos y 125 bucles. Esto te daría cada interrupción cada 8000 micro segundos o ciclos para cada interrupción.

Igualmente Niple te propone algo, pero nos es imposible cubrir todas las necesidades de los usuarios. Puede darse el caso, que a algún usuario le sea incomodo esta configuración, de los 8000 ciclos por interrupción, porque su programa no lo admite por su necesidad puntual. En este caso Niple permite cambiar los valores de prescalado, incremento y bucles, y te muestra el resultado final del tiempo obtenido. Y el programa sigue dándote tu segundo con precisión de 1 micro segundo o con la base de tiempo según el cristal que estés utilizando.

Me da mucho gusto que haya gente como Vesperia y FerTACA que la tienen muy clara con Niple y programación de PIC, que estén dedicando parte de su valioso tiempo, ayudando a los que recién comienzan en esto.

Saludos,

            Silvio Galán

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: segundo esacto en niple 5.6
« Respuesta #14 en: 06 de Junio de 2012, 14:55:45 »
Me da mucho gusto que haya gente como Vesperia y FerTACA que la tienen muy clara con Niple y programación de PIC, que estén dedicando parte de su valioso tiempo, ayudando a los que recién comienzan en esto.

Ya me gustaria de disponer de mas tiempo, pero llevo un mes muy liadisimo y lo mas grave es que me paree que en los 2 proximos va a seguir asi. No obtante iré aportando lo que pueda.
Esto es tener mono de foro.

F.
Todos los días se aprende algo nuevo.


 

anything