Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Pchuqui_1 en 07 de Marzo de 2019, 23:54:11
Título: Bucle FOR consulta condición
Publicado por: Pchuqui_1 en 07 de Marzo de 2019, 23:54:11
Buenas noche a todos. Perdón por la pregunta que voy hacer, pero necesito hacer un bulce for y que la condición sea así:
for(i=hora_TMR1_inicio; i==hora_TMR1_stop; i++){
}
No entiendo por que no me deja usar "igual igual", no necesito que la condición se cumpla cuando sea mayor-igual, o menor-igual. La condición se tiene que cumplir cuando sea solamente igual.
Estoy haciendo algo mal?
Gacias.
Título: Re:Bucle FOR consulta condición
Publicado por: KILLERJC en 08 de Marzo de 2019, 00:23:42
Es porque segun la condicion...
Si es verdadera se ejecuta el for... Si es falsa sale...
Entonces si quisiera ejecutar el for HASTA QUE i SEA IGUAL A hora_TMR1_stop, entonces deberia poner:
Código: C
for(i=hora_TMR1_inicio; i != hora_TMR1_stop; i++){
Es lo unico que se me ocurre en que estes confundido, sin una mejor explicación de lo que queres es medio complicado. Ya que esta afirmación es lo que complica tu problema, ya que tomaste la decision de que debe ser asi:
Citar
La condición se tiene que cumplir cuando sea solamente igual.
De todas formas, esto se puede hacer de VARIAS maneras... while solo, podes usar un while con un if y un break.. un for con un if y un break... en fin es lo mismo..
Título: Re:Bucle FOR consulta condición
Publicado por: Pchuqui_1 en 10 de Marzo de 2019, 23:51:22
Gracias por tu respuesta KillerJC.
Lo que estoy intentando hacer es la lógica para el funcionamiento de un timer. Donde se tiene la programación del tiempo de START y STOP. Voy a tratar de explicarlo.
Supongamos que:
A:B donde (A= HORA INICIO y B= MINUTOS INICIO, formato 24 hs). A:B representa la hora de programación de un timer, la hora de incio.
X:Z donde (X= HORA FIN Y Z= MINUTOS FIN, formato 24 hs). X:Z representa la hora donde el timer se detendrá.
Entoces supongamos que,
23:00 hora de inicio de timer
04:00 hora de stop del timer
La hora de START Y STOP quedar guardadas en la EEPROM del PIC, cuando la hora actual coincida con A:B se enciende una salida, y cuando la hora actual coincida con X:Z la salida se apaga.
La logia que no puedo resolver es que: Si el PIC se encuentra sin energía y supongamos que la energía regresa cuando la hora actual es, en este caso 3:00; no se como hacer la lógica para que activar la salida y hacerlo solamente por el tiempo que resta. En este caso una hora.
Espero haberme explicado, hace mucho tiempo que estoy tratando de resolver esto por programación y ya casi me di por vencido.
Gracias a todos.
Título: Re:Bucle FOR consulta condición
Publicado por: KILLERJC en 11 de Marzo de 2019, 07:05:01
Bien... Primero que si llevas la hora con el PIC, al cortarse la alimentacion la vas a perder... Podrias guardarlo en la EEPROM, pero unicamente deberias hacerlo cuando detectes un corte de luz. Debido a que la EEPROM tiene un limite de escrituras, si te pasas de esas escrituras (ejmeplo escribis cada 1s ) destruis el lugar donde se almacena el dato.
Para implementar lo que vos queres, yo tendria 1 RTCC con bateria comunicandose con el PIC. De alli obtengo la hora actual. Luego de pedir la hora me quedan 2 posibilidades.
- Algunos RTC poseen alarmas, el cual podria activar y que el RTCC me avise. Si se corta la luz, al inicia y notar que el horario ya paso.. Procedo a cambiar la alarma a la nueva.
- Este sirve por si tenes otra forma de conseguir el tiempo. En ves de esperar en un for hasta que el tiempo se cumpla. Unicamente comproba si son iguales ( hora y minutos) cuando paso 1 minuto. Antes no porque no tiene sentido. Supongo que tarda un segundo al menos el TMR1 en hacer un overflow, o que usaste el modulo CCP para que se maneje todo solo. Y vos unicamente te centras en el flag de interrupcion (el flag no es necesario tener activada la interrupcion) quedandote el codigo asi:
Ojo que se necesita un poco mas de atencion al hacer esto, ya que 00hs por ejemplo es menor que 23... Eso te lo dejo para que lo penses vos como hacerlo.