Autor Tema: Simulacion funciona OK, vida real NO!  (Leído 1741 veces)

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

Desconectado Francirius

  • PIC10
  • *
  • Mensajes: 32
Simulacion funciona OK, vida real NO!
« en: 14 de Septiembre de 2012, 20:30:57 »
hola amigos, necesito su guia...tengo un programilla para leer un encoder, el programa está hecho 100% por mi, quizas medio largo, pero es de la forma que lo entendi...la cosa es que funciono, lo simule en proteus, y ningun problema...pero en la vida real se queda pegado!...a alguien le ha pasado?
Código: C++
  1. #include <16F877A.h>
  2.  #fuses XT,NOWDT,NOPUT,NOPROTECT
  3.  #use delay(clock=4000000)
  4.  #include <lcd_portc.c>
  5. /******************************************************************************/
  6.  //Definicion de variables.
  7.  int cuenta,cambio;
  8.  /*****************************************************************************/
  9. // Vector interrupcion.
  10.  #INT_RB
  11.  void ext_isr(){
  12.  switch(cambio){
  13.    case 0:     if((input(PIN_B4))&&(!input(PIN_B5))){
  14.                cuenta++;
  15.                lcd_gotoxy(1,2);
  16.                printf(lcd_putc,"%U",cuenta);
  17.                cambio=0x01;
  18.                }else{
  19.                if((!input(PIN_B4))&&(input(PIN_B5))){
  20.                cuenta--;
  21.                lcd_gotoxy(1,2);
  22.                printf(lcd_putc,"%U",cuenta);
  23.                cambio=0x02;
  24.                }
  25.                }
  26.                break;
  27.    case 1:    if((input(PIN_B4))&&(input(PIN_B5))){
  28.               cuenta++;
  29.               lcd_gotoxy(1,2);
  30.               printf(lcd_putc,"%U",cuenta);
  31.               cambio=0x03;
  32.               }
  33.               break;
  34.    case 2:    if((input(PIN_B4))&&(input(PIN_B5))){
  35.               cuenta--;
  36.               lcd_gotoxy(1,2);
  37.               printf(lcd_putc,"%U",cuenta);
  38.               cambio=0x03;
  39.               }
  40.               break;
  41.    case 3:     if((!input(PIN_B4))&&(input(PIN_B5))){
  42.                cuenta++;
  43.                lcd_gotoxy(1,2);
  44.                printf(lcd_putc,"%U",cuenta);
  45.                cambio=0x04;
  46.                }else{
  47.                if((input(PIN_B4))&&(!input(PIN_B5))){
  48.                cuenta--;
  49.                lcd_gotoxy(1,2);
  50.                printf(lcd_putc,"%U",cuenta);
  51.                cambio=0x05;
  52.                }
  53.                }
  54.                break;
  55.    case 4:    if((!input(PIN_B4))&&(!input(PIN_B5))){
  56.               cuenta++;
  57.               lcd_gotoxy(1,2);
  58.               printf(lcd_putc,"%U",cuenta);
  59.               cambio=0;
  60.               }
  61.               break;
  62.    case 5:    if((!input(PIN_B4))&&(!input(PIN_B5))){
  63.               cuenta--;
  64.               lcd_gotoxy(1,2);
  65.               printf(lcd_putc,"%U",cuenta);
  66.               cambio=0;
  67.               }
  68.               break;
  69.                
  70.    default:    break;
  71.  }
  72.  }
  73. /******************************************************************************/
  74.  
  75.  
  76. void main(){
  77.    cuenta=0;
  78.    cambio=0;
  79.    enable_interrupts(int_rb);             //habilita la interrupcion externa (Rb0).
  80.    lcd_init();
  81.    lcd_gotoxy(1,1);
  82.    printf(lcd_putc,"Prueba");
  83.    enable_interrupts(GLOBAL);
  84.    do{
  85.    }while(TRUE);
  86. }

A todo esto, el codigo lo hice por las mias, por que nunca pude entender algunos de los que ponian aca...
Saludos y gracias!!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Simulacion funciona OK, vida real NO!
« Respuesta #1 en: 15 de Septiembre de 2012, 02:25:39 »
Esas funciones lcd_gotoxy y printf dentro de la interrupción te van a dar tormento. Cuando el encoder se mueva rápido, los cambios en las señales B4 y B5 se producirán cuando todavía se esté ejecutando el anterior.
En la interrupción deberías limitarte a actualizar los contadores (cuenta, cambio...) que puedes imprimir desde el main.

Desconectado Francirius

  • PIC10
  • *
  • Mensajes: 32
Re: Simulacion funciona OK, vida real NO!
« Respuesta #2 en: 16 de Septiembre de 2012, 01:57:24 »
Gracias por la respuesta. Inicialmente mi programa era asi, en la subrutina de la interrupcion solamente incrementaba registros, y en el main desplegaba, pero pasaba lo mismo, cuando lo progrmaba en la vida real, se colgaba...

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Simulacion funciona OK, vida real NO!
« Respuesta #3 en: 16 de Septiembre de 2012, 04:31:59 »
No veo que modifiques el cambio de flanco de la interr de RB0. No creo que logres hacerlo funcionar bien si no vas alternando el cambio de flanco de la interr.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Simulacion funciona OK, vida real NO!
« Respuesta #4 en: 16 de Septiembre de 2012, 04:49:13 »
Creo que con las interrupciones pin-on-change no hace falta cambiar el flanco, Don Bruno, saltan siempre que hay un cambio hacia arriba o hacia abajo.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Simulacion funciona OK, vida real NO!
« Respuesta #5 en: 17 de Septiembre de 2012, 09:56:17 »
Ah si, perdón. Pensé que estaba usando RB0...
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Simulacion funciona OK, vida real NO!
« Respuesta #6 en: 17 de Septiembre de 2012, 11:19:44 »
Cuando se trata de un encoder de dos hilos, es necesario leer ambos flancos de cada linea para saber la direccion de giro del encoder.
Puede ser por eso que lo necesita, pero repito, es para dos hilos de un encoder incremental.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Simulacion funciona OK, vida real NO!
« Respuesta #7 en: 17 de Septiembre de 2012, 11:39:36 »
post Editado. No creo que contribuya dar el pescado. Será mejor enseñar a pescar.
                Saludos a todos nuevamente
                       Jukinch




« Última modificación: 17 de Septiembre de 2012, 11:59:25 por jukinch »
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes