Autor Tema: Como Mostrar el Tiempo de un Delay en uno o Dos Displays?  (Leído 4621 veces)

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

Desconectado jorge_613

  • PIC10
  • *
  • Mensajes: 19
Como Mostrar el Tiempo de un Delay en uno o Dos Displays?
« en: 22 de Mayo de 2011, 01:12:59 »
Buenas, necesito de su ayuda, enmi programa uso delays para los leds que corresponden a lso semaforos, ahora yo quisiera que se me mostrara el tiempo del delay_ms en un display, es decir si tengo un

Código: [Seleccionar]
delay_ms(20000)
me muestre

Código: [Seleccionar]
1,2,3,4,5,6,7...etc hasta que me llegue al numero 20
luego empiece el otro delay y asi, pero no encuentro en ningun lado la forma de como hacerlo..sera que me pueden ayudar?

Gracias.

Desconectado DaYeS

  • PIC16
  • ***
  • Mensajes: 119
Re: Como Mostrar el Tiempo de un Delay en uno o Dos Displays?
« Respuesta #1 en: 22 de Mayo de 2011, 05:58:48 »
Buenas, necesito de su ayuda, en mi programa uso delays para los leds que corresponden a los semaforos, ahora yo quisiera que se me mostrara el tiempo del delay_ms en un display, es decir si tengo un

Código: [Seleccionar]
delay_ms(20000)
me muestre

Código: [Seleccionar]
1,2,3,4,5,6,7...etc hasta que me llegue al numero 20
luego empiece el otro delay y asi, pero no encuentro en ningun lado la forma de como hacerlo..sera que me pueden ayudar?

Gracias.

Ok, por que no en vez de delay_ms(20000), haces un bucle que repita 20 veces un delay(1000), por ejemplo:

Código: [Seleccionar]
void retardo_seg(int segundos){
     for (int i=1;i<segundos;i++){
           delay_ms(1000);
           Serial_out ("Llevo " + i + " segundos.");
     }
}
Así cada vez que quieras hacer un retardo y mostrarlo por lcd sólo tienes que llamar a esa función.

P.D.: Es un ejemplo que tienes que adaptar, ya que me invente la función serial_out, el ejemplo era para que te hicieras una idea, además no se hiba a ajustar en tiempo, ya que tienes que calcular los microsegundos que tarda la comunicación con lcd y 2 más por el for, pero la idea la tienes, y sería bastante preciso, sobre todo si es para un semaforo, que no importa milisegundo arriba que abajo (creo).

Salu2
Si buscas resultados distintos, no hagas siempre lo mismo. Albert Einstein.

Desconectado jorge_613

  • PIC10
  • *
  • Mensajes: 19
Re: Como Mostrar el Tiempo de un Delay en uno o Dos Displays?
« Respuesta #2 en: 22 de Mayo de 2011, 16:14:24 »
Ok, y como utilizaria esa funcion?
es decir por cual puerto transmito la informacion?
saldria por un solo puerto o por multiples puertos?



Desconectado DaYeS

  • PIC16
  • ***
  • Mensajes: 119
Re: Como Mostrar el Tiempo de un Delay en uno o Dos Displays?
« Respuesta #3 en: 22 de Mayo de 2011, 17:15:10 »
Ok, y como utilizaria esa funcion?
es decir por cual puerto transmito la informacion?
saldria por un solo puerto o por multiples puertos?

La función la utilizarias como otra cualquiera, la llamas desde donde quieras utilizarla, en el ejemplo que te puse solo le tienes que mandar los segundos como parametro, más o menos así:

Código: [Seleccionar]
//Función principal
void main(void){
      PORTB = 0x01; //Puerto b como salidas menos rb0 como entrada (para pulsador de peatones, ¿no?)
      retardo_seg(20);
      ......
}

//Función de retardo
void retardo_seg(int segundos){
     for (int i=1;i<segundos;i++){
           delay_ms(1000);
           Serial_out ("Llevo " + i + " segundos.");
     }
}

Lo de por que puerto lo transmites, la verdad es que no se como lo quieres montar, quiero decir, tú fuiste el que dijiste que querias por un display, no se si vas a montar un lcd, glcd, por un uart, i2c....

No se si lo estas simulando, si es real... lo de salir por un puerto o multiples también lo tienes que elegir tu, nose, es tú proyecto, tu eres el que tendrías que decir, quiero hacer esto con lo otro, y después cuando quedes encayado preguntas, ¿no?.

Salu2
Si buscas resultados distintos, no hagas siempre lo mismo. Albert Einstein.

Desconectado jorge_613

  • PIC10
  • *
  • Mensajes: 19
Re: Como Mostrar el Tiempo de un Delay en uno o Dos Displays?
« Respuesta #4 en: 22 de Mayo de 2011, 18:47:13 »
Por ahora lo utilizo en proteus, lo cierto es que no me quedan muchos pines, la mayoria estan ocupados por lose semaforos y displays que me muestran "el numero de carros" en cada interseccion.

Mi idea era poder mostrar los tiempos que dura cada semaforo en un display para que se pueda visualizar mejor.
Probare lo que me has dicho, trabajo en mikrobasic y el codigo no difiere mucho de una funcion que ya tengo, tratare de aplicarla a mi programa. gracias por tus respuestas.

Desconectado DaYeS

  • PIC16
  • ***
  • Mensajes: 119
Re: Como Mostrar el Tiempo de un Delay en uno o Dos Displays?
« Respuesta #5 en: 23 de Mayo de 2011, 10:53:30 »
Por ahora lo utilizo en proteus, lo cierto es que no me quedan muchos pines, la mayoria estan ocupados por lose semaforos y displays que me muestran "el numero de carros" en cada interseccion.

Mi idea era poder mostrar los tiempos que dura cada semaforo en un display para que se pueda visualizar mejor.
Probare lo que me has dicho, trabajo en mikrobasic y el codigo no difiere mucho de una funcion que ya tengo, tratare de aplicarla a mi programa. gracias por tus respuestas.


Ok, en el caso de que no te queden muchos pines puedes poner dos pic, que entre ellos se comunique por serie, o puede ser que cogiendo un pic con más patillas, o cogiendo lcd que se comuniquen por i2c para poner todos los que quieras sin problemas de pines, ya que solo te harán falta tres.

A lo mejor una buena solución es utilizar un LM3229, que es un lcd de 240x128 puntos, de esta manera podrías dibujar un tio corriendo con el tiempo debajo, como los semaforos nuevos, y en el msimo también los "carros" en cada intersección.

Lo siento mucho, no me di cuenta, y el código que puse es para c, tedrías que modificarlo para portarlo a basic. No me di cuenta, te pido disculpas.

Si necesitas ayuda no dudes.

Salu2
Si buscas resultados distintos, no hagas siempre lo mismo. Albert Einstein.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Como Mostrar el Tiempo de un Delay en uno o Dos Displays?
« Respuesta #6 en: 24 de Mayo de 2011, 21:38:31 »
Código: [Seleccionar]
//Función principal
void main(void){
      PORTB = 0x01; //Puerto b como salidas menos rb0 como entrada (para pulsador de peatones, ¿no?)
      retardo_seg(20);
      ......
}

//Función de retardo
void retardo_seg(int segundos){
     for (int i=1;i<segundos;i++){
           delay_ms(1000);
           Serial_out ("Llevo " + i + " segundos.");
     }
}

Traducción:

Código: [Seleccionar]
Hseropen 9600
'Función principal
main:
PORTB = 0x01  'puerto b como salidas menos rb0 como entrada(para pulsador de peatones, ¿no?)
Call retardo_seg(20)
'......
Goto main
End                                               

'Función de retardo
Proc retardo_seg(segundos As Byte)
Dim i As Byte
For i = 1 To segundos Step 1
WaitMs 1000
Hserout "Llevo ", #i, " segundos."
Next i
End Proc
Saludos desde Granada, España.

Desconectado jorge_613

  • PIC10
  • *
  • Mensajes: 19
Re: Como Mostrar el Tiempo de un Delay en uno o Dos Displays?
« Respuesta #7 en: 25 de Mayo de 2011, 00:33:24 »
Gracias a Todos, me ha funcionado de Maravilla.

Desconectado DaYeS

  • PIC16
  • ***
  • Mensajes: 119
Re: Como Mostrar el Tiempo de un Delay en uno o Dos Displays?
« Respuesta #8 en: 25 de Mayo de 2011, 14:56:35 »
Código: [Seleccionar]
Hseropen 9600
'Función principal
main:
PORTB = 0x01  'puerto b como salidas menos rb0 como entrada(para pulsador de peatones, ¿no?)
Call retardo_seg(20)
'......
Goto main
End                                               

'Función de retardo
Proc retardo_seg(segundos As Byte)
Dim i As Byte
For i = 1 To segundos Step 1
WaitMs 1000
Hserout "Llevo ", #i, " segundos."
Next i
End Proc

Muchas gracias, jeje. Umm, creo que es mas sencillo en c, jeje. Sólo una cosa, si no pones goto main ni end..¿no se repetiria continuamente en main?, quiero decir, mi código realmente está mal, pq falta donde puse ... un bucle infinito, tipo while(1) o for(;;) o una cosa así, pero, en basic, por lo que veo lo has hecho con un goto, es por algo o pq has elegido ese salto y ya. Y lo de End, si no lo pones te salte en error el compilador??.

Una última cuentión, no puedes declarar i dentro del mismo bucle, quiero decir, en mi código, la variable sólo esta mientras dure el bucle (donde a sido creada, y al no ser global...) pero, en el tuyo por lo que veo va a estar durante toda la función, ¿no es así?, de esta manera estará más tiempo en memoría.

Umm, me han gustado cosillas, pero creo que le faltan cosas muy interesantes a basic, ¿no?.

Gracias a Todos, me ha funcionado de Maravilla.

Me alegro mucho, ya sabes, si necesitas cualquier cosa.

Salu2
Si buscas resultados distintos, no hagas siempre lo mismo. Albert Einstein.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Como Mostrar el Tiempo de un Delay en uno o Dos Displays?
« Respuesta #9 en: 25 de Mayo de 2011, 18:47:40 »
El End es un capricho, viene de antiguo, no hace falta ponerlo, lo pongo por costumbre.

El Goto para generar el bucle infinito, lo mismo por capricho, se puede crear el bucle infinito
mediante cualquier otro método, de hecho es el único Goto que uso en los programas, porque Goto = KK.

Main realmente no existe, se puede utilizar cualquier otro nombre, yo uso ese por la similitud con el "C"  ;-).

No se puede declarar "i" directamente en la sentencia, tiene que ser declarada antes y claro, estará durante toda
la función. El C hace un aprovechamiento más eficiente de la memoria que el Basic y también de la mayoría de lenguajes.
Saludos desde Granada, España.

Desconectado DaYeS

  • PIC16
  • ***
  • Mensajes: 119
Re: Como Mostrar el Tiempo de un Delay en uno o Dos Displays?
« Respuesta #10 en: 25 de Mayo de 2011, 19:13:03 »
El End es un capricho, viene de antiguo, no hace falta ponerlo, lo pongo por costumbre.

El Goto para generar el bucle infinito, lo mismo por capricho, se puede crear el bucle infinito
mediante cualquier otro método, de hecho es el único Goto que uso en los programas, porque Goto = KK.

Main realmente no existe, se puede utilizar cualquier otro nombre, yo uso ese por la similitud con el "C"  ;-).

No se puede declarar "i" directamente en la sentencia, tiene que ser declarada antes y claro, estará durante toda
la función. El C hace un aprovechamiento más eficiente de la memoria que el Basic y también de la mayoría de lenguajes.


Ok, más o menos lo que me suponia, muchas gracias por las aclaraciones. Lo que me sigue pareciendo raro es que no se pueda declarar una variable dentro del comienzo del bucle, porque no es que estemos hablando de un mejor aprovechamiento unicamente, sino que en el caso que andes apurado o anides unos cuantos, la pila se te desbordará muy rápidamente...

Y nose, pienso que basic lleva bastante, también en los micros, como para que noadie haya contemplado esto. Ha decir verdad, los compiladores de pic en c, a veces se pasan de listos, más de una vez he tenido que mirar el asm y he visto que me quitaba algo necesarío, como una variable global en interrupciones o algo de eso.

Bueno, lo dicho, muchas gracias por las aclaraciones.

Salu2
Si buscas resultados distintos, no hagas siempre lo mismo. Albert Einstein.


 

anything