Autor Tema: Que estoy haciendo mal?  (Leído 4311 veces)

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

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Que estoy haciendo mal?
« en: 10 de Febrero de 2009, 23:47:11 »
Hola muchachos que tal.?, tengo un problema vale, les explico... Estoy haciendo una bomba de gasolina con interrupciones externas... Mi progrma tiene dos opciones: Echar gasolina introduciendo los litros o introduciendo los BsF (la moneda Venezolana), RB1, lo uso para echar gasolina introduciendo por teclado los litros, y RB2 lo uso para echar gasolina introduciendo los BsF por teclado. Si por ejemplo presiono RB1, pues aquí hay otras do opciones, las cuales son, echar gasolina de 91 octanos o de 95 octanos. Si por ejempo le doy a 91 el cual es RC0, pues introduzco los litros y el saca la cuenta!!! O.k todo eso funciona fino!!!!

El problema está cuando hago lo mismo pero con RB2, la interrupción externa 2, ella entra al menú para seleccionar la gasolina de 91 o de 95, pero cuando voy a elegir entre esas dos, pues no elige nada!!!! no se porque.... que será....?????

Aquí les dejo el código y la simulación......

#int_ext2
void interrupt_service_rutine_ext2(void)
{
   funcion_int2();
}


void funcion_int2(void)
{
   /////////////////////////////RUTINA QUE SELECCIONA LA GASOLINA POR BsF/////////////////////////////
    printf(lcd_putc,"\f");                               // Borro pantalla
    printf(lcd_putc,"T. de gasolina");                 // Imprimo en pantalla
    lcd_gotoxy(1,2);                                     // Posiciona el cursor en la linea 2
    printf(lcd_putc,"91 octanos - RC0");                 // Imprimo en pantalla
    printf(lcd_putc,"95 octanos - RC1");                 // Imprimo en pantalla
    delay_ms(3000);                                      // Tiempo de espera para que de chance de presionar el botón.

Hasta aquí llega bien, pero despues no quiere pasar a preguntar por el puerto C0 o C1.....

De aquí para abajo, como que no lo ve!!!
/////////////////////////PULSADOR QUE SELECCIONA LA GASOLINA DE 91 OCTANOS/////////////////////////////
    if(input(pin_C0)==0)                                    // Si RC0 está en 0, entonces...
       {
          delay_ms(20);                                     // Verifica sino es rebote
          if(input(pin_C0)==0)                              // Verifico otra vez si RC0 está en 0
             {
                printf(lcd_putc,"Ingrese BsF");             // Imprimo en pantalla
                delay_ms(3000);                             // Tiempo de espera para que de chance de presionar el botón.
                teclado();                                  // Llamo a la función que me lee el teclado
                var1=resul;                                 // Guardo lo que recogi del teclado
                printf(lcd_putc," BsF= %d",var1);           // Imprimo en pantalla la variable recogida del teclado
                delay_ms(3000);                             // Una demora para pulsar bien el teclado
                teclado();                                  // LLamo a la función que me lee el teclado
                var2=resul;                                 // Guardo lo que recogi del teclado
                printf(lcd_putc,"%d     \n\r",var2);        // Imprimo en pantalla la variable recogida del teclado
                delay_ms(2000);                             // Una demora para que se vean los datos de teclado
                cantlitros();                               // Llamo a la función que me calcula los litros que se han de pedir
                printf(lcd_putc,"\f");                      // Borro pantalla
                w=0;                                        // Inicializo la variable contador
                bsf_91=0.87;                                // El litro de gasolina de 91 octanos está en 0.87 BsF
                //printf(lcd_putc,"\f");                    // Borro pantalla
                while(w!=resul2)                            // Repetir mientras  el contador sea distinto de los litros y los BsF a pagar no pasen de 5BsF
                   {                                        // Si esto es cierto, entonces....
                      litros=(w/bsf_91)+litro;              // Saco la cuenta de los litros por el valor del litro de gasolina
                      litro= litros;
                      printf(lcd_putc,"Litros= %g",litro);  // Imprimo en pantalla
                      lcd_gotoxy(1,2);                      // Posiciona el cursor en la línea 2
                      printf(lcd_putc,"BsF= %1.2d",w);      // Imprimo en pantalla
                      delay_ms(1000);                       // Una demora para que se visualice el contaje de los litros
                      printf(lcd_putc,"\f");                // Borro pantalla
                      w++;                                  // Incremento contador
                   }
             }
       }
}

Si se fijan la rutina de la interrupción 1 es igual a la de la dos, la 1 funciona bien, pero cuando quiero entrar a la dos, pues nada! que estoy haciendo mal....? ya llevo todo el día en eo, estoy que me arranco los cabellos! :5]

Atte: Enigma... La llanerita de Guayana :D

No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Que estoy haciendo mal?
« Respuesta #1 en: 11 de Febrero de 2009, 00:13:27 »
Que tal llanerita!
Mira no podrias probar colocando la rutina toda aqui:
#int_ext2
void interrupt_service_rutine_ext2(void)
{
   funcion_int2();
}
Es decir en vez de llamar a funcion_int2() , coloca toda la rutina alli adentro como hicistes con #int_ext1 a ver si ese podria ser el problema  :mrgreen:
Y nos cuentas


Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Que estoy haciendo mal?
« Respuesta #2 en: 11 de Febrero de 2009, 00:28:37 »
Hola Ralf2....

Si, de hecho originalmente lo tenía así.... Pero recorde que alguien me dijo que las rutinas de las interrupciones externas no deben ser tan largas! porque  puede ocacionar problemas, pense que eso era el problema... coloque la función pro nada siguio igual....

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Que estoy haciendo mal?
« Respuesta #3 en: 11 de Febrero de 2009, 00:59:02 »
Te falta un printf(lcd_putc,"\f"); antes de printf(lcd_putc,"Ingrese BsF");.
En realidad lo hacia pero no se veia en el LCD.

Otras cositas que note:
Deberias esperar hasta que se pulse alguna opcion y no los 3 segundos, porque si me demore tengo que volver a empezar, y lo mismo con los datos del teclado matricial.
Saludos!!!
No contesto mensajes privados, las consultas en el foro

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Que estoy haciendo mal?
« Respuesta #4 en: 11 de Febrero de 2009, 01:05:36 »
Exacto suky!
Eso te me adelantaste  :D
Lo probe asi y me funciono   :-/

Pruebalo llanerita y nos dices

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Que estoy haciendo mal?
« Respuesta #5 en: 11 de Febrero de 2009, 01:40:45 »
:shock:

Miercoles funcionó!!!!!!!!!!!  :D

Pero, porque deberia borrar pantalla?, no sería lo mismo si no lo colocara?, porque lo único es que borro la LCD.... o no?

Cita de: suky
Otras cositas que note:
Deberias esperar hasta que se pulse alguna opcion y no los 3 segundos, porque si me demore tengo que volver a empezar, y lo mismo con los datos del teclado matricial.
Saludos!!!

Si, lo intente hacer con un ciclo while, pero se me quedaba colgado!!!! :s... no supe que hacer allí y por eso coloque lo de los delays!!!, lo había hecho así:

while (input(pin_C0)==1)
{
.....}

Pero no me funcionó....  :(.. alguna sugerencia????

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Que estoy haciendo mal?
« Respuesta #6 en: 11 de Febrero de 2009, 02:04:54 »
lcd_putc("\f"); borra y regresa al origen.-

Podrias hacer asi:
Código: C
  1. puls=0;
  2. while(puls==0){
  3.    if(input(pin_C0)==1){
  4.    delay_ms(20);
  5.    if(input(pin_C0)==1){
  6.       puls=1; //Salgo de bucle.-
  7.    }
  8. }else if(input(pin_C1)==1){
  9.    delay_ms(20);
  10.    if(input(pin_C1)==1){
  11.       puls=1; //Salgo de bucle.-
  12.    }
  13. }
No contesto mensajes privados, las consultas en el foro

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Que estoy haciendo mal?
« Respuesta #7 en: 11 de Febrero de 2009, 18:08:24 »
Voy a probar.... a ver si me da resultado!!! luego posteo como me fue!!!! jejejejeje

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Que estoy haciendo mal?
« Respuesta #8 en: 11 de Febrero de 2009, 20:36:37 »
Pensandolo bien....

No e, esa rutina me parece extraña o a lo mejor la estoy interpretando mal... a ver...

Si coloco esa variable puls en cero y pregunto por los puladores, pues ellos siempre stán en 1, por tanto la variable cambiará de valor, y eso hará que se me salga de la interrupción, no me serviria, no me mantendría las opciones en pantalla!!!!! :?


Una preguntica aparte... El OR en picc no funciona o que???, estoy colocando una rutina como está:

while(input(pin_C0)==1 || input(pin_C1)==1)
{
.....}

y cuando simula el proteus pues no me hace caso a eso!, en cambio si coloco solo esto:

while(input(pin_C0)==1)
{...
}
 pues si lo hace.... No creo que el operador OR este malo, pues sale en la ayuda del CCS, y bueno ese es el simbolo de la operación OR!

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Que estoy haciendo mal?
« Respuesta #9 en: 12 de Febrero de 2009, 14:31:36 »
holaaaaaaaaa

a que te refieres con que no hace caso? entra al codigo dentro del while o nunca entra ?
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Que estoy haciendo mal?
« Respuesta #10 en: 12 de Febrero de 2009, 19:22:23 »
Entra al caso, pero no le hace caso a la condici'on OR!!!!!!!


Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Que estoy haciendo mal?
« Respuesta #11 en: 12 de Febrero de 2009, 20:18:08 »
while(input(pin_C0)==1 || input(pin_C1)==1)
{
.....}

intenta asi porsiaca:

while(  (input(pin_C0)==1) || (input(pin_C1)==1) )
{
.....}
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Que estoy haciendo mal?
« Respuesta #12 en: 13 de Febrero de 2009, 23:25:36 »
Creeme micro_cadaver ya lo intente y no me funciono!!!!! Será poblema del compilador!!!!?? :?

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Que estoy haciendo mal?
« Respuesta #13 en: 14 de Febrero de 2009, 00:40:37 »
tus pulsadores normalmente están en 1 lógico y creo que esas sentencias siempre serán verdad y por tanto siempre se ejecutaría, o es un antirrebotes? :z) ya me confundí :D

nose, pero y si intentas con:

while(input(pin_c0)==0 || input(pin_c1)==0)

supongo que así puede ser, para que servirá este while or?
.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Que estoy haciendo mal?
« Respuesta #14 en: 14 de Febrero de 2009, 01:11:33 »
Ummm no funcionaria cryn, porque solo se ejecutaria la sentencia del while cuando de un pulsito... que es cuando los puladores del puerto C se hacen 0.... Y la idea es que se mantenga la sentencia hasta que yo aprete uno de los puladores!!!!  El While OR, lo uso porque estoy mostrando un menú de dos opciones que siempre quiero que este en pantalla al menos que elija una de las dos opciones... me entiendes? :lol:

Atte: Enigma... La llanerita de Guayana  :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!