Autor Tema: Nuevo en el tema programacion  (Leído 1930 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado mariomario

  • PIC10
  • *
  • Mensajes: 5
Nuevo en el tema programacion
« en: 02 de Diciembre de 2012, 13:36:46 »
Hola a todos: Pido ayuda a ustedes para lograr entender un archivo de programcion simple para ustedes, pero complejo para mi, no logro pensarlo en forma logica; aclraro es te archivo me lo dio mi profesor para ver si lo puedo entender y asi realizar otro; pero estoy perdido. Es un pulsador y dos led, uno verde y otro rojo  Espero puedan ayudarme, muchas gracias

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Nuevo en el tema programacion
« Respuesta #1 en: 02 de Diciembre de 2012, 13:49:37 »
Hola mariomario, que parte de codigo no entiendes.

Saludos!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Nuevo en el tema programacion
« Respuesta #2 en: 02 de Diciembre de 2012, 15:02:04 »
Creo que estas buscando la solución en el lugar equivocado.

No conozco a tu profesor, pero supongo que algo de teoria te ha dado antes de pasarte el archivo para que lo analizaras.

Si es así, puede ser que el profesor este evaluando varias cosas, entre esas como ha dado la clase y si lo que ha explicado se entiende.

Yo leeria nuevamente la teoría e intentaría hacer un pequeño diagrama de flujo sobre el programa.

Si no les ha dado una clase teórica quizas quiera evaluar el conocimiento actual y en base a eso ver como sigue con las proximas clases.

Si alguien de por aqui te explica el programa, queda sin efecto los puntos que te plantee antes.

Perdón por la lata  :oops:

Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Nuevo en el tema programacion
« Respuesta #3 en: 02 de Diciembre de 2012, 16:26:56 »
A veces puede resultar útil analizar las funciones condicionadas en cascada de dentro a fuera. Coge una funcion que se ejecuta según una condición, evaluala y haz como te ha dicho willynovi, un diagrama de flujo con esa condición, luego tienes que ir "enlazando" todos los bucles y/o ejecuciones condicionadas.

Si no entiendes una función específica de CCS por que no es ANSI C, prueba a buscarla en la ayuda o en el foro, todas las funciones NO ANSI C que tienes en ese pequeño programa estan bien descritas.

Desconectado mariomario

  • PIC10
  • *
  • Mensajes: 5
Re: Nuevo en el tema programacion
« Respuesta #4 en: 02 de Diciembre de 2012, 17:20:55 »
Gracias por sus respuestas; el tema es el timer1 a que hace referencia este bloque del programa (es una interrupcion). Creo que el ejercicios completo es:Hay un led verde que prende y apaga en forma continua; si se presionas el pulsador P1 las cantidad que deseas , pasa tres segundos y muestra en el led rojo la cantidad de veces presionadas en el P1 (pulsador), luego vuelve el led verde a funcionar nuevamente; tengo que hacer los comentarios en cada linea para entenderlo; otra cosa trato de ver donde se conectan los led y el pulsador en el pic, para probar en el proteus. Con respecto al profesor comenzo dando ejercicios basicos de encender y apagar un led, luego por problemas de tiempo en el dictado termino dando este tipo de ejercicios. Espero me entiendan gracias.-

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Nuevo en el tema programacion
« Respuesta #5 en: 02 de Diciembre de 2012, 17:37:59 »
Hola mariomario, a mi me salen un pulsador en PIN_A0, un led en PIN_D2 el cual cambia de estado cada vez que entra en la interrupcion, y un led en PIN_B0 el cual parpadea cada 500ms, las lineas del led en PIN_B1 estan comentadas.
El delay de 100ms despues de explorar el estado del pulsador es para evitar rebotes.
Código: [Seleccionar]
if (input(PIN_A0)==1)
               {
                  delay_ms(100);
                  if (input(PIN_A0)==1)


Miquel_S
« Última modificación: 02 de Diciembre de 2012, 17:48:38 por Miquel_S »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado mariomario

  • PIC10
  • *
  • Mensajes: 5
Re: Nuevo en el tema programacion
« Respuesta #6 en: 02 de Diciembre de 2012, 19:40:00 »
Gracias Miguel_S: sobre el comienzo del #int timer1: contador verde se refiere a la interrupcion pero como funciona?y lo de rebote no entiendo :oops:

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Nuevo en el tema programacion
« Respuesta #7 en: 03 de Diciembre de 2012, 03:57:03 »
Código: [Seleccionar]
#int_TIMER1
void  TIMER1_isr(void) // interrumpe cada 65,5mS
{

   contador_verde++;

   if (contador_verde>=5)
   {
      output_toggle (PIN_D2);
      contador_verde=0;
     
   }
}
Esta es la parte de la interrupcion, y es de la siguiente manera:
.- Incrementas la variable contador_verde, busca informacion y veras que no es lo mismo ++contador_verde; que contador_verde++;
.- En la instruccion if lo que estas haciendo es comprobar si contador_verde es mayor o igual a 5, el cual al llegar a 5 ejecutara lo que esta dentro de las llaves.
.- La instruccion output_toggle(PIN_D2); cambia de estado el led conectado, si esta encendido lo apaga y si esta apagado lo enciende.
.- Y la ultima antes de salir de la interrupcion pones a 0 la variable contador_verde para volver a iniciar la cuenta.

En la parte del rebote, lo que haces es dar un tiempo al programa antes de ejecutar una instruccion para que no haya lecturas falsas, eso es porque los contactos de dentro del pulsador tienden a vibrar, y el pic detectaria que se ha pulsado mas de una vez.
Piensa que con un cristal de 4MHz se ejecuta la instruccion cada 1us, excepto las de salto que tarda el doble.

Saludos!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado mariomario

  • PIC10
  • *
  • Mensajes: 5
Re: Nuevo en el tema programacion
« Respuesta #8 en: 03 de Diciembre de 2012, 17:04:36 »
Gracias Miguel S: Ahora se abre un poco el panorama :mrgreen:, en la parte del while (1) es el bloque donde cuenta los tres segundos que espera despues de haber presionado el pulsador, cuenta hasta 3 seg. si no me equivoco; pregunto esto por que voy entendiendo por partes el programa. Despues esta el proximo while (cuenta>0); el while (contador_pulso>0): esta parte corresponde al parpadeo del led verde. Nuevamente gracias Miguel S :)

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Nuevo en el tema programacion
« Respuesta #9 en: 03 de Diciembre de 2012, 17:38:16 »
Perdón que insista, si quieres entender bien el programa, y por lo que se ve no tienes bien claro que son cada instrucción o bucle, lo mejor es hacer un diagrama de flujo y te va a ayudar mucho.

Los bucles while() son para que mientras se cumpla la condición que está entre los paréntesis se vuelve a repetir.

Es decir:
while (1)
{       "tu código de programa"
}

"tu código de programa" se repetirá indefinidamente.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado mariomario

  • PIC10
  • *
  • Mensajes: 5
Re: Nuevo en el tema programacion
« Respuesta #10 en: 05 de Diciembre de 2012, 13:50:52 »
Gracias chicos y perdonen las molestias ocacionadas, especialmente a mi coterraneo ((:-)) ((:-))