Autor Tema: Como hacer, un sistema secuencial?  (Leído 4082 veces)

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

Desconectado cicloide2

  • PIC18
  • ****
  • Mensajes: 359
Como hacer, un sistema secuencial?
« en: 21 de Agosto de 2012, 22:00:01 »
Hola, lo que pretendo es hacer que se vayan activando relay de a uno por vez, pero nececito tiempos de espera (precisos)y diferentes.
Estas serian las rutinas que no se como hacer (habando de lenguage C), los tiempo que pretendo son de 1seg, 3minutos y 8 minutos, (para empezar )
despues quisiera, de alguna manera poder cambiar estos valores a travez de algun pulsador externo.
Pero en principio por donde deberia empezar a estudiar por los TIM?
Estas subrutinas deberia crearlas como funciones e invocarlas al momento que las nececite? como se hace eso?


PD: sigo con el HC908SH8

Saludos y gracias de antemano  :-)

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como hacer, un sistema secuencial?
« Respuesta #1 en: 21 de Agosto de 2012, 23:58:11 »
Lo que te conviene hacer es un tick con un timer. Dependiendo de la temporización que necesites hacer cuentas cierta cantidad de ticks.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado cicloide2

  • PIC18
  • ****
  • Mensajes: 359
Re: Como hacer, un sistema secuencial?
« Respuesta #2 en: 22 de Agosto de 2012, 19:04:37 »
Gracias Suky, empesare estudiando el tema Timer.

Saludos ;-)

Desconectado cicloide2

  • PIC18
  • ****
  • Mensajes: 359
Re: Como hacer, un sistema secuencial?
« Respuesta #3 en: 22 de Agosto de 2012, 20:42:14 »
Esta funcion podria funcionar? deberia hacer una para cada tiempo, y con alguna modificacion verdad, ya que y solo manejaria segundos y minutos? esto seria utilizando el RTC, y la funcion la saque del datasheet del MC9S08SH8.
Código: C
  1. /* Initialize the elapsed time counters */
  2. Seconds = 0;
  3. Minutes = 0;
  4. Hours = 0;
  5. Days=0;
  6. /* Configure RTC to interrupt every 1 second from 1-kHz clock source */
  7. RTCMOD.byte = 0x00;
  8. RTCSC.byte = 0x1F;
  9. /**********************************************************************
  10. Function Name : RTC_ISR
  11. Notes : Interrupt service routine for RTC module.
  12. **********************************************************************/
  13. #pragma TRAP_PROC
  14. void RTC_ISR(void)
  15. {
  16. /* Clear the interrupt flag */
  17. RTCSC.byte = RTCSC.byte | 0x80;
  18. /* RTC interrupts every 1 Second */
  19. Seconds++;
  20. /* 60 seconds in a minute */
  21. if (Seconds > 59){
  22. Minutes++;
  23. Seconds = 0;
  24. }
  25. /* 60 minutes in an hour */
  26. if (Minutes > 59){
  27. Hours++;
  28. Minutes = 0;
  29. }
  30. /* 24 hours in a day */
  31. if (Hours > 23){
  32. Days ++;
  33. Hours = 0;
  34. }
  35. }
« Última modificación: 22 de Agosto de 2012, 20:46:39 por cicloide2 »

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como hacer, un sistema secuencial?
« Respuesta #4 en: 22 de Agosto de 2012, 21:02:01 »
Claro, eso te serviría. Cuentas x segundos, y si alguno alcanza el conteo activas una bandera para tratarlo:

Código: C
  1. #pragma TRAP_PROC
  2. void RTC_ISR(void)
  3. {
  4. /* Clear the interrupt flag */
  5. RTCSC.byte = RTCSC.byte | 0x80;
  6. /* RTC interrupts every 1 Second */
  7. Contador_1++;
  8. Contador_2++;
  9. if(Contador_1==TEMPORIZACION_1){
  10.      Contador_1=0;
  11.      flag_Temp_1=1;
  12. }
  13. if(Contador_2==TEMPORIZACION_2){
  14.      Contador_2=0;
  15.      flag_Temp_2=1;
  16. }
  17. }

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado cicloide2

  • PIC18
  • ****
  • Mensajes: 359
Re: Como hacer, un sistema secuencial?
« Respuesta #5 en: 23 de Agosto de 2012, 20:11:51 »
Suky, gracias por la aprobacion, y con las preguntas qus te hare ahora te daras cuenta que mi nivel es -1, ahi van:
cuando comienzan a incrementarce tanto Contador_1 como  Contador _2 lo hacen de a un segundo por vez,no?, despues note que editaste la funcion o tal vez es una correccion, por que quitaste las lineas RTCMOD.byte=0x00; y RTCSC.byte = 0x1F; estas linesas no son parte de la configuracion del RTC para que su periodo sea de un segundo?  que es lo que hace estas otra linea (se que esta haciendo un operacion logica OR, entre  RTC.byte y el valor 0X80) pero funcionalmente que es lo que hace?.
Activar una bandera significa que una bandera del modulo RTC (el modulo debe de tener alguna que se coloque en uno o este en uno y pase a cero, al llegar a la cuenta? a eso te refieres? que vea cual es esa bandera que cambia de estado en el regitro RTC y detenga el procesos?

Gracias nuevamente, disculpa el atrvimiento se que esto es pura cordialidad ante un neofito,  boy a seguir leyendo el datasheet, (mi ingles es medio me ayudo con el google traductor) pero tosudez no me falta.

Saludos cordiales, cicloide2. :-)
« Última modificación: 23 de Agosto de 2012, 20:15:27 por cicloide2 »

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como hacer, un sistema secuencial?
« Respuesta #6 en: 23 de Agosto de 2012, 22:53:54 »
cuando comienzan a incrementarce tanto Contador_1 como  Contador _2 lo hacen de a un segundo por vez,no?

Claro, cada vez que ocurre la interrupción. Que en teoría por lo que veo salta cada 1 seg.

despues note que editaste la funcion o tal vez es una correccion, por que quitaste las lineas RTCMOD.byte=0x00; y RTCSC.byte = 0x1F; estas linesas no son parte de la configuracion del RTC para que su periodo sea de un segundo?  que es lo que hace estas otra linea (se que esta haciendo un operacion logica OR, entre  RTC.byte y el valor 0X80) pero funcionalmente que es lo que hace?.

En realidad no las saque, solo me enfoque en la rutina de atención de interrupción  ;-) Luego el comentario te responde tu pregunte de que hace:

Código: C
  1. /* Clear the interrupt flag */                <<<-------
  2. RTCSC.byte = RTCSC.byte | 0x80;

Borra la bandera de interrupción del RTC.

Activar una bandera significa que una bandera del modulo RTC (el modulo debe de tener alguna que se coloque en uno o este en uno y pase a cero, al llegar a la cuenta? a eso te refieres? que vea cual es esa bandera que cambia de estado en el regitro RTC y detenga el procesos?

No, para nada. Tu creas un par de variables globales que se colocan en 1 o 0. A estas generalmente se las llama banderas, porque al estar en 1 nos indica que un evento ocurrió. En la interrupción la colocas a 1, en el bucle principal te quedas preguntando si es 1. Si es 1 significa que paso el tiempo esperado, realizas lo que tengas que realizar y colocas la bandera a 0 para detectar otra temporización.

Saludos!

No contesto mensajes privados, las consultas en el foro

Desconectado cicloide2

  • PIC18
  • ****
  • Mensajes: 359
Re: Como hacer, un sistema secuencial?
« Respuesta #7 en: 25 de Agosto de 2012, 13:45:08 »
Suky, gracias  por responder estoy estudiando toda esta informacion, y tratando de aunque sea encender un led, (con precicion) cuando lo tenga lo subo.

Saludos, ;-)

Desconectado cicloide2

  • PIC18
  • ****
  • Mensajes: 359
Re: Como hacer, un sistema secuencial?
« Respuesta #8 en: 08 de Septiembre de 2012, 20:05:55 »
Bueno muchachos, la verdad es que no postee nada porque siquiera se como implementar esa funcion que yo mismo subi y que Suky comento.
Crei que era cortar y pegar pero me salen mil herrores por falta seguro de la variables que Suky dice que debo crear , en fin (porque no habran lugares de capacitacion para Freescale como los hay para PIC, pareciera que me meti con un firma o muy dificil de entrar en el mercado o Microchip hipnotizo a los Argentinos, parecieran que tiene exclucividad con nuestro pais, y creo que pronto me ban a atrapar a mi tambin dado la facilidad que hay a la hora de encontrar lugares y material para aprender a programarlos).

No abandono pero, esto de no estar en contacto con personas que se dediquen a programar micros mas que por este medio, me hace las cosas dificiles y lentas.

Saludos y gracias :-/ :( :-/ :(

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como hacer, un sistema secuencial?
« Respuesta #9 en: 08 de Septiembre de 2012, 21:21:59 »
Podes aprender lo básico, adquirir experiencia con los PICs que hay más información y después pasas a otra firma, se te va a ser más fácil.

Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything