TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: giff en 17 de Febrero de 2010, 20:43:47

Título: Ayuda con esperas necesaria para completar 1 segundo después de realizar rutinas
Publicado por: giff en 17 de Febrero de 2010, 20:43:47
Hasta hace poco estaba ilusionado con realizar mi proyecto de tesis con CCS RTOS ya que no funciona en 48 Mhz por lo que luego baje a 20 Mhz pero ahi no podré no usar USB Full Speed (12 Mbps). Tengo las rutinas listas ya, o la mayoría y me gustaría probar con interrupción de TMR0 a 16 bit ocurriendo la interrupción cada 1 seg. En ese segundo haría:

Leer un canal ADC con referencia dada por el pin Vref+.
Usar un comparador análogo.
Enviar datos por USB.
y usar el temporizador.

También guardaré los datos en EEPROM interna (cada 1 o quizás cada 5 minuto).

El problema que tengo es que no me imagino como hacer que, completadas todas esas rutinas el PIC18f2550 no haga nada y espere a la interrupción que diga: ya PIC, "levantate y camina". No se como abarcar eso y es ahí donde pido una mano amiga que me diga por donde puedo empezar.

PD: CCS 4.104.
Título: Re: Ayuda con esperas necesaria para completar 1 segundo después de realizar rutinas
Publicado por: KALLITOS en 17 de Febrero de 2010, 20:56:56
Hola giff, lo que puedes hacer es con el TIMER0 a 16 bits configurarlo para que desborde cada segundo (en el datasheet de tu pic encontraras como), y cada que ocurre la interrupcion activar un flag, ejemplos de como usar interrupciones y con el timer0 hay por montones en el foro, es solo que te pongas a buscar un poquito.

Y tu codigo iria asi

if(flag_segundo)
   {
   flag_segundo = 0;
    ///aqui ejecutas todo el codigo que desees cada segundo.   
    }


saludos.
Título: Re: Ayuda con esperas necesaria para completar 1 segundo después de realizar rutinas
Publicado por: septiembre_negro en 17 de Febrero de 2010, 21:05:57
Citar
El problema que tengo es que no me imagino como hacer que, completadas todas esas rutinas el PIC18f2550 no haga nada y espere a la interrupción que diga: ya PIC, "levantate y camina". No se como abarcar eso y es ahí donde pido una mano amiga que me diga por donde puedo empezar.

Mmm  pues  para esto hay  varios caminos puedes poner a dormir el micro sleep creo que se llama y despertarlo por alguna de las interrupciones  con que cuenta.
Otra seria que caiga en un bucle infinito y que salga de el por algún evento externo.

Título: Re: Ayuda con esperas necesaria para completar 1 segundo después de realizar rutinas
Publicado por: Suky en 17 de Febrero de 2010, 21:24:48
Citar
El problema que tengo es que no me imagino como hacer que, completadas todas esas rutinas el PIC18f2550 no haga nada y espere a la interrupción que diga: ya PIC, "levantate y camina". No se como abarcar eso y es ahí donde pido una mano amiga que me diga por donde puedo empezar.

Mmm  pues  para esto hay  varios caminos puedes poner a dormir el micro sleep creo que se llama y despertarlo por alguna de las interrupciones  con que cuenta.

Ponerlo a dormir no es una solución, por lo que tengo entendido de un Sleep se sale con un reset, WachDog, Interrupción externa, Cambio de estado de RB4-RB7 y alguna interrupción de un periférico como UART.  :?
Título: Re: Ayuda con esperas necesaria para completar 1 segundo después de realizar rutinas
Publicado por: LABmouse en 17 de Febrero de 2010, 21:43:01
Hola
Tu mismo das en palabras la respuesta a tu problema. Usa una variable para que el procesador sepa si debe o no hacer si trabajo, me explico, si esa variable es 0, no ha nada y se queda esperando hasta que sea 1, y lo interesante esta en que cada segundo pasa a w
1.

Despues que detectas esa variable en 1, haces lo que debes y al finalizar la pasas a 0.
Título: Re: Ayuda con esperas necesaria para completar 1 segundo después de realizar rutinas
Publicado por: giff en 17 de Febrero de 2010, 23:51:27
Hola giff, lo que puedes hacer es con el TIMER0 a 16 bits configurarlo para que desborde cada segundo (en el datasheet de tu pic encontraras como), y cada que ocurre la interrupcion activar un flag, ejemplos de como usar interrupciones y con el timer0 hay por montones en el foro, es solo que te pongas a buscar un poquito.

saludos.

Eso mismo!, antes de escribir me lei la seccion de timers presente en el datasheet. deseo usar el Timer 0 en 16 bits, no es problema generar la interrupcion por desborde en 1 seg (ahi calculo el valor que debo cargar). Puedo generar ~1.3 segs a 48 Mhz con preescaler 256 con fondo de escala de 65536 cuentas asi que estamos sobrados de cariño.


Código: [Seleccionar]
Otra seria que caiga en un bucle infinito y que salga de el por algún evento externo.
Me parece buena idea, ya que una vez finalizada las tareas el pic no hara nada productivo (quizás seria bueno dejar que lea si del pc necesita obtener algun dato)

Muchas gracias gente por su ayuda