Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

14/01/2011 #1


Ayuda con LED en PIC18F4520
Hola a todos, necesito ayuda con un proyecto que tengo que entregar en la universidad y espero que me puedan ayudar.

Mi duda es la siguiente: me gustaría gestionar el encendido de un LED mediante el uso de una interrupcion usando el timer1 de un PIC 18F4520.

El objetivo es que el LED esté endendido un número de segundos proporcional a una constante calculada previamente y que pasado dicho tiempo se apague dicho LED.

Por cierto, estoy programando mi proyecto usando el compilador de C CCS.

Muchas gracias anticipadas, espero que me puedan ayudar.
14/01/2011 #2


has intentado ya algun codigo? el codigo que necesitas es bastante sencillo simplemenmte tienes que cargar en el temporizador el numero de cuentas que necesitas que haga para temporizar ese tiempo. si el tiempo e smuy largo, y el numero de cuentas es superior a 65536 deberas contar tambien las veces que llegas a 65536 y asi temporizar el tiempo que necesites. Eso para que el pic entre en la interrupcion, una vez ha entrado dentro solo has de poner que sencienda y cargar el tiempo para que se apagfue de la misma manera que antes.
15/01/2011 #3


Creo que mas o menos entiendo como iría el tema, lo que no me queda claro es lo que debo hacer dentro de la interrupción.
Se supone que dentro de la interrupción debo decir que se encienda el led con una sentencia del tipo:
OUTPUT_HIGH(PIN_D0) (por ejemplo), pero no se muy bien como hacer para que trasncurrido el tiempo que quiero se apague el dichoso led.
Del mismo modo, tampoco sé muy bien como hacer para contar tiempos relativamente largos, ¿cómo "recargo" el timer para que vuelva a contar cuando llegue a 65536?
15/01/2011 #4


hola!!! bueno pues lo que hay que caer para contar tiempos largos como has dicho9 es hacer que el temporizador llegue varias veces a 65536, por ejmplo, para contar un minuto con una frecuencia de oscilacion de 4MHz, lo mas logico seria utilizar el temporizador 0 ya que permite un preescalar de 256, el mas alto de todos, asi pues lo que deberiamos hacer es lo siguiente:
- en primer lugar calculamos lo que el temporizador tarda en hacer una cuenta, esto se hace 4/Fosc, 4/4MHz=1us.
-una vez calculado el tiempo de instruccion lo multiplicamos por el preescalar y nos da 256us, que es lo que tarda el temporizador en contar 1.
-a continuacion calculamos cuantas veces tiene que contar el temporizador para llegar a 1 minuto que son 60 segundos: 60/256us=234375 cuentas. Este numero es mayor a 65536. . .
- como es mayor debemos calcular las veces que necesitamos llegar a 65536 hasta llegar a la cuenta calculada: 234375/65536=3.576. Tendremos que llegar 3 veces y media.
-para calcular ese 0.576 lo que equivale en cuentas lo hacemos de la siguiente manera 234375-65539*3=37767 cuentas.
-bien ya tenemos el numero de veces que tenemos que llegar a 65536 (desbordes) y el pico ese que teniamos.
-una vez hechos los calculos, hay que implementarlo, y esto se hace, en primer lugar precargamos el temporizador con un valor tal que hasta llegar a 65536 haya contado 37767 cuentas . . 65536-37767=27769.
-ahora la primera vez que entre en la interrupcion habra contado 37767, ahora esperamos a que entre 3 veces mas para que haya temporizado un minuto, en total habra entrado 4 veces.
esto se hace con una variable que incremente su valor cada vez que entramos en la interrupcion, y luyego con un if, cuando esa variable llegue a 4 hacemos lo que queramos.

espero que te haya aclarado las dudas. . .
un saludo
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.