Autor Tema: Leer valor de TMR0 en C  (Leído 6879 veces)

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

Desconectado Pibuleta

  • PIC10
  • *
  • Mensajes: 24
Leer valor de TMR0 en C
« en: 05 de Junio de 2008, 17:53:25 »
Buenas.

Ando un poco perdido con C... estoy empezando y estoy haciendo un programa que necesita contar los pulsos que le entran al PIC16f877 por la patilla RA04.

Bien, leyendo el datasheet veo que debo utilizar el TIMER0.

Bien, pero es que de programaciñon C se muy poco y no tengo claro como "leer" el valor de TMR0 (maximo habrá 250 impulsos por RA04).

La otra duda es que si por ejemplo hay 4 flancos de subida, signiifca que TMR0 valdrá 4?

Si valiera 4 luego ala hora de mostrarlo en un LCd debería de pasar el valor de TMR0 (00000100) a decimal?



Muchas gracias y un saludo.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Leer valor de TMR0 en C
« Respuesta #1 en: 05 de Junio de 2008, 18:09:07 »
Saludos pibuleta, bienvenido al foro!
No te preocupes, que todos tuvimos un inicio.
Puedes ver en el foro este hilo donde hay "microcursillo" en c:
http://www.todopic.com.ar/foros/index.php?topic=4533.0
También usa el buscador que de C hay bastante información.
En cuanto a lo que preguntas de como leer el valor del tmr0, no sé qué compilador estás usando, pero el ccs por ejemplo tiene esta instrucción:
    timer_0=get_rtcc();
Donde timer_0 tendrías que declararla como una variable int de 8 o 16 bits (dependiendo del microcontrolador, en tu caso con el PIC16F877 sería int8).
Con esa línea se guardaría en timer_0 el valor que tiene el tmr0 en ese momento. [Es igual usar get_timer0()]
Y para enviar al LCD no tienes que convertir nada, simplemente usas el comando printf y le especificas qué tipo de dato vas a enviar. Lee el manual de CCS donde podrás ver todas las opciones.
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado Pibuleta

  • PIC10
  • *
  • Mensajes: 24
Re: Leer valor de TMR0 en C
« Respuesta #2 en: 05 de Junio de 2008, 18:13:45 »
Saludos pibuleta, bienvenido al foro!
No te preocupes, que todos tuvimos un inicio.
Puedes ver en el foro este hilo donde hay "microcursillo" en c:
http://www.todopic.com.ar/foros/index.php?topic=4533.0
También usa el buscador que de C hay bastante información.
En cuanto a lo que preguntas de como leer el valor del tmr0, no sé qué compilador estás usando, pero el ccs por ejemplo tiene esta instrucción:
    timer_0=get_rtcc();
Donde timer_0 tendrías que declararla como una variable int de 8 o 16 bits (dependiendo del microcontrolador, en tu caso con el PIC16F877 sería int8).
Con esa línea se guardaría en timer_0 el valor que tiene el tmr0 en ese momento. [Es igual usar get_timer0()]
Y para enviar al LCD no tienes que convertir nada, simplemente usas el comando printf y le especificas qué tipo de dato vas a enviar. Lee el manual de CCS donde podrás ver todas las opciones.
Ok nos leemos!  :mrgreen:

Que rapidez!!! Jejeje

Estoy usando sourceboost625 no sé exáctamente que es CCS...

Lo que he hecho o es configurar el TMR0 para que sea por flanco de subida y en modo de contador, pero no sé como ller o fijar un valor al TMR0.

Tampoco conocía expresión printf... soy novato...

Voy a leer lo que me has pasado.

Muchas gracias

Desconectado Pibuleta

  • PIC10
  • *
  • Mensajes: 24
Re: Leer valor de TMR0 en C
« Respuesta #3 en: 05 de Junio de 2008, 18:42:04 »
Me estoy liando...


Mañana probaré de usar lo que dices:

timer_0=get_rtcc();


Se supone que sihay 4 pulsos por RA04  timer_0 valdrá 4 no? pero en binario 0000100.

Para ponerlo a 0 el TMR0?

Saludos y gracias

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Leer valor de TMR0 en C
« Respuesta #4 en: 05 de Junio de 2008, 19:22:56 »
Vaya que como dice el refrán: "cada día se aprende algo nuevo".  :P
No había escuchado de ese compilador. Estuve leyendo sobre él en la página oficial: http://www.sourceboost.com/home.html
El único inconveniente que veo es que sólo soporta microcontroladores pic de 8 bits. O sea que no incluye los dspic.
Pero como tú no estás usando dspic sino de la serie 16F, no hay problema.
Bueno estuve viendo que al parecer las instrucciones no son iguales, así que no creo que te sirva el "get_rtcc".
Sería bueno que le echaras un buen vistazo al manual.
Ahora bien, con referencia al lcd, ese compilador tiene una instrucción "lprintf" que te puede servir. Mira también en los ejemplos que hay en la página.
En cuanto al CCS, es el compilador que  usamos la mayoría de los usuarios de este foro, aunque existen otros también muy populares, como el Hi-Tech picc compiler, puedes leer sobre él en este enlace: http://www.microchipc.com/. También esta el CC5X, y pare de contar.
Bueno ayúdate con el manual y los ejemplos y por aquí estaremos si tienes alguna dudilla...
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado Pibuleta

  • PIC10
  • *
  • Mensajes: 24
Re: Leer valor de TMR0 en C
« Respuesta #5 en: 06 de Junio de 2008, 05:48:10 »
Hola amigos.

Estoy dale que te pego pero no sé si estoy haciendo bien...

Pongo el valor de

tmr0 = 00000000b;

Con esto lo pongo a 0 cierto?

Entonces luego cuando le llegue por ejemplo un flanco de subida se incrementará en 1, es decir:

00000001 cierto?

Bien pues guardo el valor de tmr0 en la variable a de la siguiente forma?

a = tmr0;

Entonces envio el valor de a al display.... esa es la idea.

Lo estoy haciendo bien en C?

Gracias amigos.


Desconectado Pibuleta

  • PIC10
  • *
  • Mensajes: 24
Re: Leer valor de TMR0 en C
« Respuesta #6 en: 06 de Junio de 2008, 06:51:43 »
Bueno lo del TMR0 yá más o menos lo tengo...

Ahora la cosa es...

tl TMR0 solo cuenta hasta 255 (ya me vá bien, ya que más de 250 no vá pasar los impulsos).

entonces, si por ejemplo hay 50 impulsos el valor de TMR0 sería = 00110010 cierto?


Entonces tengo que ha habiado 50 impulsos y quiero mostrar por el LCD 50 pulsos (00110010).

Enviar mensajes al LCD ya lo tengo controlado, el problema es cuando quiero pasar el 00110010 al LCD 50 pulsos, ya que la tabla del display tiene letras y números y por ejemplo el valor 00110010 corresponde al caracter 2 del display.


Es decir que cuando hay 50 pulsos y yo envio este valor al lcd (00110010) el display me muestra 2.


De que manera puedo hacer que el valor binario que tengo (que son los pulsos que recibo) pasarlo a decimal o que me cuadre con la tabla....

Saludos cordiales



Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Leer valor de TMR0 en C
« Respuesta #7 en: 06 de Junio de 2008, 07:12:04 »
¡Pero no pienses en binario, que para eso ya está el PIC  :mrgreen: !

Si tú capturas el valor del timer en una variable:
a = tmr0;


y luego quieres enviarla al LCD sólo tienes que hacer:
printf (LCD_PUTC, "%u",a);

No te preocupes por más, entre el compilador y el PIC se las apañan para hacer las conversiones necesarias.

Desconectado Pibuleta

  • PIC10
  • *
  • Mensajes: 24
Re: Leer valor de TMR0 en C
« Respuesta #8 en: 06 de Junio de 2008, 07:41:21 »
Hola.

Me dá error de que no reconoce la expresión printf...

igual no me he explicado bien...  :-)

quiero que me muestre por un display LCD de 16x2 caracteres el numero de pulsos recibidos por RA04.


Cuando tengo por ejemplo 50 pulsos, tmr0 valdrá 00110010 ok?


Pero para mostrar en el LCD el numero 50 debo enviar

en la posición de memoria 1 del display el 5 (00110101)
en la posicion 2 del display el 0 (00110000)


Y como véis no tiene nada que ver el 50 (00110010) con el codigo binario que tengo que enviar al LCD...


Saludos y erspero vuestra ayuda jeje

GRACIAS

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Leer valor de TMR0 en C
« Respuesta #9 en: 06 de Junio de 2008, 08:20:51 »
Para que funcione el printf tienes que incluir la librería stdlib. Insisto, no pienses en binario, piensa en C. Sí no consigues compilar tú programa pegalo aquí.

Desconectado Pibuleta

  • PIC10
  • *
  • Mensajes: 24
Re: Leer valor de TMR0 en C
« Respuesta #10 en: 06 de Junio de 2008, 09:00:11 »
Para que funcione el printf tienes que incluir la librería stdlib. Insisto, no pienses en binario, piensa en C. Sí no consigues compilar tú programa pegalo aquí.

Uso el sourceboost.

Me dice que no encuentra librería...

Pero para mostrar por ejemplo el numero 50 en el LCD tengo que enviar (esto lo sé hacer)

posición 1 del display 00110101(5)
posición 2 del display 00110000 (0).


Lo que no sé hacer es como pasar el 00110010 del tmr0 (que es 50 en decimal) pasarlo a decimal es decir relaccionarlo con la tabla del display.

Gracias

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Leer valor de TMR0 en C
« Respuesta #11 en: 06 de Junio de 2008, 10:45:56 »
Nocturno la cosa es que el amigo pibuleta no usa el CCS, sino el compilador source boost.
El manual que aparece en la página no es muy explicativo, pero creo que hay algunos ejemplos...
En este link hay unas librerías para descargar, tal vez ya la has visto.
En lo que he podido leer con ese compilador trabajarás con c pero a un considerablemente bajo nivel. Es como pic basic, para poder accesar a los registros tienes que declararlos tal como están en la datasheet del micro. Y por supuesto no existe el printf, pero sí hay un "lprintf" para escribir en el lcd. Lo que no sé es si te deja dar formato a los número como lo hace el CCS.
La cosa es que con el CCS uno le dice al compilador cómo quiere que aparezca el número en la pantalla... si en hexadecimal, si es un float, si es un entero... y el solito hace todo y te lo muestra... de eso es lo que te habla nocturno.
Ahora bien, parece no ser así con el compilador que tu usas. Creo que muy poca gente aquí en el foro usa ese compilador, vas a tener que leer bastante en la página de ellos y en los ejemplos...
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado Pibuleta

  • PIC10
  • *
  • Mensajes: 24
Re: Leer valor de TMR0 en C
« Respuesta #12 en: 06 de Junio de 2008, 16:22:06 »
Gracias socio!

Voy a ojear el link que me has pasado... a ver si saco algo en claro...

Sé que tengo un valor en binario 00000000 (8 bits) del TMR0 que si por ejemplo hay 2 pulsos en RA04 TMR0 valdrá 00000010.

Bien, pues la idea sería mostrar el 2 en el display... esto es fácil, pero si pasa de 9 por ejemplo?

Que lío...

Saludos


 

anything