Autor Tema: como cambiar el tris en el curso del programa?  (Leído 5717 veces)

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

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
como cambiar el tris en el curso del programa?
« en: 07 de Marzo de 2022, 18:19:59 »
cordial saludo, requiero de vuestra ayuda.
Estoy realizando un programa que controla los puertos a y b de pic 16f1936 los datos que requiero sacar por estos puertos son iguales el detalle es que en algún momento necesito que uno de los puertos no active su salida, probé a configurar los tris pero me funciona una sola vez, investigando encentro una función "output_float(PIN_A1);" trabaja super bien pero solo para un puerto, hay alguna manera de hacerlo para el puerto completo?
( seria fácil pensar  por que no hacer "porta=0x00" lo que pasa es que el código esta embebido dentro de una parte del código que se repite en un arreglo y al momento de hacer una segunda lectura se volvería activar)
Gracias de antemano...
Código: C++
  1. int valor;
  2. porta= valor;
  3. portb=valor;
« Última modificación: 07 de Marzo de 2022, 18:23:03 por johenrod »
Si algo parece complicado... es por que esta mal explicado.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:como cambiar el tris en el curso del programa?
« Respuesta #1 en: 07 de Marzo de 2022, 18:29:24 »
Me parece que eso es CCS

Entonces primero defini los puertos como FAST_IO

Código: C
  1. #USE FAST_IO(A)

Con esta directiva si queres que cambie a entrada o salida, tenes que si o si modificar el tris..

Usa

Código: C
  1. set_tris_A(0xFF);
  2. set_tris_A(0);

Para modificar el registro TRIS. Nuevamente, si esta como entrada y usas output_pin(PIN_A0) NO VA A CAMBIAR A SALIDA por si solo, es decir no es automático el manejo del TRIS como cuando no lo definís como STANDARD (es lo default si no lo definís)

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:como cambiar el tris en el curso del programa?
« Respuesta #2 en: 07 de Marzo de 2022, 19:26:42 »
Me parece que eso es CCS

Entonces primero defini los puertos como FAST_IO
Código: C
  1. #USE FAST_IO(A)

gracias por responderme..
realice este cambio y ahora ya me funciona,, no se si es mucho código o estaría bien?
Código: C++
  1. #include <16F1936.h>
  2.    #include <stdio.h>
  3.    #include <stdlib.h>
  4.    #include <string.h>
  5.    #fuses noDEBUG   //  debug - in circuit debugger enabled on RB6 and RB7 - DISABLED
  6.    #fuses noLVP     //  LVP - low voltage enable - DISABLED
  7.    #fuses noFCMEN   //  Fail safe clock monitor - DISABLED
  8.    #fuses noIESO    //  IESO - internal / external switch over DISABLED
  9.    #fuses noBROWNOUT  //  Brown out reset selection bits - 11 BOR  DISABLED
  10.    #fuses noCPD     //  CPD - date code protect DISABLED
  11.    #fuses PROTECT //  CP - code protect DISABLED
  12.    #fuses noMCLR      //  MCLRE - RE3 is MCLR
  13.    #fuses noPUT     //  PWRTE - power up timer enable bit DISABLED
  14.    #fuses noWDT    //  WDTE - watch dog enable bit - not enabled here, in code below
  15.    #fuses INTRC_IO   //  FOSC - oscillator - set to INTRC_IO-- defaults the clock to 4Mhz
  16.    #use delay(internal=4000000)
  17.  
  18.  
  19.    #byte portA= 0x0C
  20.    #byte portB= 0x0D
  21.    #byte portC= 0x0E    
  22.    #byte portE= 0x10
  23.    # use fast_io(a)
  24.    # use fast_io(b)
  25.  
  26.    #define der pin_c3
  27.    #define izq pin_c2
  28.    #define ret=200;
  29.  
  30.  
  31.  
  32.  
  33.  
  34. // -------------------------------------
  35.    void main()
  36.    {
  37.    SET_TRIS_a(0B00000000);
  38.    SET_TRIS_b(0B00000000);
  39.    SET_TRIS_c(0B10001111);
  40.    SET_TRIS_e(0B1);
  41.    portA=0x00;
  42.    portB=0x00;
  43.    
  44.    
  45.  //  DELAY_MS(t500);
  46.    
  47.  
  48.    while(TRUE)
  49.    {
  50.  
  51.       if ((input_state(der))&&(!input_state(izq)))
  52.       {
  53.          SET_TRIS_a(1);
  54.          SET_TRIS_b(0);
  55.          portb=0xff;
  56.          delay_ms(1000);
  57.          portb=0x00;
  58.          delay_ms(1000);      
  59.       }
  60.      
  61.          if ((!input_state(der))&&(input_state(izq)))
  62.          {
  63.            SET_TRIS_b(1);
  64.            SET_TRIS_a(0);
  65.            porta=0xff;
  66.            delay_ms(1000);
  67.            porta=0x00;
  68.            delay_ms(1000)  ;    
  69.          }
  70.      
  71.             if ((input_state(der))&&(input_state(izq)))
  72.             {
  73.             SET_TRIS_a(0);
  74.             SET_TRIS_b(0);
  75.             porta=0xff;
  76.             portb=0xff;
  77.             delay_ms(1000);
  78.             porta=0x00;
  79.             portb=0x00;
  80.             delay_ms(1000)  ;  
  81.            
  82.             }
  83.  
  84.  
  85.    }
  86.    }
Si algo parece complicado... es por que esta mal explicado.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:como cambiar el tris en el curso del programa?
« Respuesta #3 en: 07 de Marzo de 2022, 20:59:29 »
SET_TRIS_b(1);

No pone todo como entradas... Es como poner en binario 0000 0001 , es decir solo RB0 quedaría como entrada.

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:como cambiar el tris en el curso del programa?
« Respuesta #4 en: 07 de Marzo de 2022, 21:44:03 »
SET_TRIS_b(1);

No pone todo como entradas... Es como poner en binario 0000 0001 , es decir solo RB0 quedaría como entrada.
huy si que pena ,, lo que queria colgar es,,
Código: C++
  1. SET_TRIS_a(0XFF);
  2.          SET_TRIS_b(0X00);
  3.          portb=0xff;
  4.          delay_ms(1000);
  5.          portb=0x00;
  6.          delay_ms(1000);
Si algo parece complicado... es por que esta mal explicado.

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:como cambiar el tris en el curso del programa?
« Respuesta #5 en: 09 de Marzo de 2022, 16:38:32 »
saludos, sigo con problemas.
al parecer el problema se había solucionado pero ya con un codigo mayor no trabaja, tengo unas opciones y dentro de cada una se modifica el tris pero por alguna razón siempre toma la ultima
SET_TRIS_a(0b11111000);
SET_TRIS_a(0b00000000);  > siempre toma esta no se que sucederá.
Código: C++
  1. #include <16F1936.h>
  2.    #include <stdio.h>
  3.    #include <stdlib.h>
  4.    #include <string.h>
  5.    #fuses noDEBUG   //  debug - in circuit debugger enabled on RB6 and RB7 - DISABLED
  6.    #fuses noLVP     //  LVP - low voltage enable - DISABLED
  7.    #fuses noFCMEN   //  Fail safe clock monitor - DISABLED
  8.    #fuses noIESO    //  IESO - internal / external switch over DISABLED
  9.    #fuses noBROWNOUT  //  Brown out reset selection bits - 11 BOR  DISABLED
  10.    #fuses noCPD     //  CPD - date code protect DISABLED
  11.    #fuses PROTECT //  CP - code protect DISABLED
  12.    #fuses noMCLR      //  MCLRE - RE3 is MCLR
  13.    #fuses noPUT     //  PWRTE - power up timer enable bit DISABLED
  14.    #fuses noWDT    //  WDTE - watch dog enable bit - not enabled here, in code below
  15.    #fuses INTRC_IO   //  FOSC - oscillator - set to INTRC_IO-- defaults the clock to 4Mhz
  16.    #use delay(internal=4000000)
  17.  
  18.   //byte const display3  [9]= {0xff,0x7F,0x3F,0x1F,0X0F,0x07,0x03,0x01,0x00};  //0x7f es la posicion 0 // i=0
  19.  // byte const display4  [9]= {0x00,0x01,0x03,0x07,0X0F,0x1F,0x3F,0x7F,0xFF};
  20.  
  21.  //byte const display6  [9]=  {0x00,0xff,0x7f,0x3f,0X1f,0xff,0x07,0x03,0x01};
  22.  
  23.  //byte const display5 [9]= {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE};
  24.  // byte const display4  [8]= {0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};
  25.  
  26.  
  27.    
  28.    #byte portA= 0x0C
  29.    #byte portB= 0x0D
  30.    #byte portC= 0x0E    
  31.    #byte portE= 0x10
  32.    # use fast_io(a)
  33.    # use fast_io(b)
  34.  
  35.    #define der pin_c3
  36.    #define izq pin_c2
  37.    
  38.    
  39.    #define speed delay_ms(1000)
  40.  
  41.   //byte const display []={0b00000000,0b00000001,0b00000011,0b00000111,0b00001111,0b00011111,0b00111111,0b01111111,0b11111111};
  42.  // byte const display2[]={0b11111111,0b01111111,0b00111111,0b00011111,0b00001111,0b00000111,0b00000011,0b00000001,0b00000000};
  43.  
  44.    signed int i=0;
  45.    int x=0;
  46.     //int j=0;
  47.    int conta=5;
  48.    int pasos=5;
  49.    int aleatorio;
  50.    int num=0;
  51.    int s;
  52.    int aux=5;
  53.    //const int32 display3  [num]= {0x7F,0x3F,0x1F,0X0F,0x07,0x03,0x01,0x00};  //0x7f es la posicion 0 // i=0
  54.    
  55.    // declaracion variables
  56.  
  57.    
  58.    //*******************
  59.  
  60. // -------------------------------------
  61.    void main()
  62.    {
  63.    SET_TRIS_a(0B00000000);
  64.    SET_TRIS_b(0B00000000);
  65.    SET_TRIS_c(0B10001111);
  66.    SET_TRIS_e(0B1);
  67.    portA=0x00;
  68.    portB=0x00;
  69.    int get1;
  70.    int get2;
  71.    
  72.    speed;
  73.  
  74.    while(TRUE)
  75.    {
  76.      
  77.      num++;
  78.  
  79.      delay_ms(500);
  80.      
  81.         if (num==2)
  82.         {
  83.            SET_TRIS_a(0b11111000);
  84.            get1 =0b00000111;
  85.            get2 =0b00000111;
  86.         }
  87.      //***********************
  88.      
  89.     num=3;
  90.     if (num==3)
  91.         {
  92.            SET_TRIS_a(0b11110000);
  93.            get1 =0b00001111;
  94.            get2 =0b00001111;
  95.         }
  96.      //***********************
  97.      
  98.  num=4;  
  99.  if (num==4)
  100.         {
  101.            SET_TRIS_a(0b11100000);
  102.            get1 =0b00011111;
  103.            get2 =0b00011111;
  104.         }
  105.      //***********************
  106.  
  107.   num=5;  
  108.   if (num==5)
  109.         {
  110.            SET_TRIS_a(0b11000000);
  111.            get1 =0b00111111;
  112.            get2 =0b00111111;
  113.         }
  114.    //*************************
  115.  num=6;  
  116.  if (num==6)
  117.         { SET_TRIS_a(0b10000000);
  118.            get1 =0b01111111;
  119.            get2 =0b01111111;
  120.         }
  121.      //***********************
  122.  num=7;    
  123.  if (num==7)
  124.         {
  125.            SET_TRIS_a(0b00000000);
  126.            get1 =0b11111111;
  127.            get2 =0b11111111;
  128.         }
  129.  
  130.  
  131.    
  132.  
  133.        
  134.         for ( s=0; s<=num; s++) //0B11111110
  135.       {
  136.       PORTa =  get1 <<s; //LED move Left Sequence
  137.       speed;
  138.       }
  139.       porta=0x00;
  140.       ///speed;
  141.    
  142.       for ( s=0; s<=num; s++) //0B11111110
  143.       {
  144.       PORTa =  get2 >>s; //LED move Left Sequence
  145.       speed;
  146.       }
  147.    porta=0x00;
  148.   // speed;
  149.  
  150.    
  151.  
  152.    }
  153.    }
Si algo parece complicado... es por que esta mal explicado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:como cambiar el tris en el curso del programa?
« Respuesta #6 en: 09 de Marzo de 2022, 17:43:04 »
saludos, sigo con problemas.
al parecer el problema se había solucionado pero ya con un codigo mayor no trabaja, tengo unas opciones y dentro de cada una se modifica el tris pero por alguna razón siempre toma la ultima
SET_TRIS_a(0b11111000);
SET_TRIS_a(0b00000000);  > siempre toma esta no se que sucederá.
Código: C++
  1. #include <16F1936.h>
  2.    #include <stdio.h>
  3.    #include <stdlib.h>
  4.    #include <string.h>
  5.    #fuses noDEBUG   //  debug - in circuit debugger enabled on RB6 and RB7 - DISABLED
  6.    #fuses noLVP     //  LVP - low voltage enable - DISABLED
  7.    #fuses noFCMEN   //  Fail safe clock monitor - DISABLED
  8.    #fuses noIESO    //  IESO - internal / external switch over DISABLED
  9.    #fuses noBROWNOUT  //  Brown out reset selection bits - 11 BOR  DISABLED
  10.    #fuses noCPD     //  CPD - date code protect DISABLED
  11.    #fuses PROTECT //  CP - code protect DISABLED
  12.    #fuses noMCLR      //  MCLRE - RE3 is MCLR
  13.    #fuses noPUT     //  PWRTE - power up timer enable bit DISABLED
  14.    #fuses noWDT    //  WDTE - watch dog enable bit - not enabled here, in code below
  15.    #fuses INTRC_IO   //  FOSC - oscillator - set to INTRC_IO-- defaults the clock to 4Mhz
  16.    #use delay(internal=4000000)
  17.  
  18.   //byte const display3  [9]= {0xff,0x7F,0x3F,0x1F,0X0F,0x07,0x03,0x01,0x00};  //0x7f es la posicion 0 // i=0
  19.  // byte const display4  [9]= {0x00,0x01,0x03,0x07,0X0F,0x1F,0x3F,0x7F,0xFF};
  20.  
  21.  //byte const display6  [9]=  {0x00,0xff,0x7f,0x3f,0X1f,0xff,0x07,0x03,0x01};
  22.  
  23.  //byte const display5 [9]= {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE};
  24.  // byte const display4  [8]= {0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};
  25.  
  26.  
  27.    
  28.    #byte portA= 0x0C
  29.    #byte portB= 0x0D
  30.    #byte portC= 0x0E    
  31.    #byte portE= 0x10
  32.    # use fast_io(a)
  33.    # use fast_io(b)
  34.  
  35.    #define der pin_c3
  36.    #define izq pin_c2
  37.    
  38.    
  39.    #define speed delay_ms(1000)
  40.  
  41.   //byte const display []={0b00000000,0b00000001,0b00000011,0b00000111,0b00001111,0b00011111,0b00111111,0b01111111,0b11111111};
  42.  // byte const display2[]={0b11111111,0b01111111,0b00111111,0b00011111,0b00001111,0b00000111,0b00000011,0b00000001,0b00000000};
  43.  
  44.    signed int i=0;
  45.    int x=0;
  46.     //int j=0;
  47.    int conta=5;
  48.    int pasos=5;
  49.    int aleatorio;
  50.    int num=0;
  51.    int s;
  52.    int aux=5;
  53.    //const int32 display3  [num]= {0x7F,0x3F,0x1F,0X0F,0x07,0x03,0x01,0x00};  //0x7f es la posicion 0 // i=0
  54.    
  55.    // declaracion variables
  56.  
  57.    
  58.    //*******************
  59.  
  60. // -------------------------------------
  61.    void main()
  62.    {
  63.    SET_TRIS_a(0B00000000);
  64.    SET_TRIS_b(0B00000000);
  65.    SET_TRIS_c(0B10001111);
  66.    SET_TRIS_e(0B1);
  67.    portA=0x00;
  68.    portB=0x00;
  69.    int get1;
  70.    int get2;
  71.    
  72.    speed;
  73.  
  74.    while(TRUE)
  75.    {
  76.      
  77.      num++;
  78.  
  79.      delay_ms(500);
  80.      
  81.         if (num==2)
  82.         {
  83.            SET_TRIS_a(0b11111000);
  84.            get1 =0b00000111;
  85.            get2 =0b00000111;
  86.         }
  87.      //***********************
  88.      
  89.     num=3;
  90.     if (num==3)
  91.         {
  92.            SET_TRIS_a(0b11110000);
  93.            get1 =0b00001111;
  94.            get2 =0b00001111;
  95.         }
  96.      //***********************
  97.      
  98.  num=4;  
  99.  if (num==4)
  100.         {
  101.            SET_TRIS_a(0b11100000);
  102.            get1 =0b00011111;
  103.            get2 =0b00011111;
  104.         }
  105.      //***********************
  106.  
  107.   num=5;  
  108.   if (num==5)
  109.         {
  110.            SET_TRIS_a(0b11000000);
  111.            get1 =0b00111111;
  112.            get2 =0b00111111;
  113.         }
  114.    //*************************
  115.  num=6;  
  116.  if (num==6)
  117.         { SET_TRIS_a(0b10000000);
  118.            get1 =0b01111111;
  119.            get2 =0b01111111;
  120.         }
  121.      //***********************
  122.  num=7;    
  123.  if (num==7)
  124.         {
  125.            SET_TRIS_a(0b00000000);
  126.            get1 =0b11111111;
  127.            get2 =0b11111111;
  128.         }
  129.  
  130.  
  131.    
  132.  
  133.        
  134.         for ( s=0; s<=num; s++) //0B11111110
  135.       {
  136.       PORTa =  get1 <<s; //LED move Left Sequence
  137.       speed;
  138.       }
  139.       porta=0x00;
  140.       ///speed;
  141.    
  142.       for ( s=0; s<=num; s++) //0B11111110
  143.       {
  144.       PORTa =  get2 >>s; //LED move Left Sequence
  145.       speed;
  146.       }
  147.    porta=0x00;
  148.   // speed;
  149.  
  150.    
  151.  
  152.    }
  153.    }

No comprendo que intentas hacer, pero me parece que estás escribiendo mal tu código (Tal vez esté equivocado).

Me explico.

Primero inicializas num con cero:
Código: C
  1. int num=0;

Luego cuando se ejecuta por primera vez el lazo principal (while(true)) lo incrementas en uno.

Código: C
  1. num++;

A continuación no se ejecuta el primer if (if (num==2)) porque num es igual a 1, pero
a continuación num cambia a 3 y por lo tanto se ejecuta el if siguiente:

Código: C
  1. num=3;
  2.      if (num==3)
  3.      {
  4.         SET_TRIS_a(0b11110000); //<---- aquí altero tris a por primera vez
  5.         get1 =0b00001111;
  6.         get2 =0b00001111;
  7.      }

Luego num lo cambias a 4 y por lo tanto, se ejecuta el tercer if
Código: C
  1. num=4;  
  2.     if (num==4)
  3.     {
  4.         SET_TRIS_a(0b11100000);  //<---- aquí altero tris a por primera vez
  5.         get1 =0b00011111;
  6.         get2 =0b00011111;
  7.     }

Esto lo haces con los siguientes pasos, es decir cambias num cada vez que terminas de ejecutar un if  y la velocidad que se ejecuta el código, estás modificando contantemente tris a

Con el último if, num queda con un valor igual a 7.

Código: C
  1. num=7;    
  2.  if (num==7)
  3.         {
  4.            SET_TRIS_a(0b00000000);
  5.            get1 =0b11111111;
  6.            get2 =0b11111111;
  7.         }

Luego, cuando vuelve a ejecutarse el lazo while(true), num cambia a 8 (num++) y el primer if nunca se ejecuta ( if (num==2)) y nuevamente num es igualado a 3:

Código: C
  1. num=3;
  2.      if (num==3)
  3.      {
  4.         SET_TRIS_a(0b11110000);
  5.         get1 =0b00001111;
  6.         get2 =0b00001111;
  7.      }

Y otra vez se vuelve a repetir todo lo anterior.

¿No será que quieres poner el cambio de valor de num dentro de los if, así por ejemplo:

Código: C
  1. if (num==3)
  2.      {
  3.         SET_TRIS_a(0b11110000);
  4.         get1 =0b00001111;
  5.         get2 =0b00001111;
  6.         num=4; <----------------- ¿Debe cambiarse num dentro de cada if?
  7.      }

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:como cambiar el tris en el curso del programa?
« Respuesta #7 en: 09 de Marzo de 2022, 17:48:38 »
DominusDRR cordial saludo.
no te fijes tanto en el código por que en verdad puede tener errores, lo que necesito es configurar el tris en el transcurso del programa.
Si algo parece complicado... es por que esta mal explicado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:como cambiar el tris en el curso del programa?
« Respuesta #8 en: 09 de Marzo de 2022, 17:51:47 »
DominusDRR cordial saludo.
no te fijes tanto en el código por que en verdad puede tener errores, lo que necesito es configurar el tris en el transcurso del programa.

Yo te recomiendo que simules o depures tu programa. Y paso a paso vayas ejecutando tu código y verificando si se cumple lo que quieres que haga. De esa manera te puedes aprender de tus errores.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:como cambiar el tris en el curso del programa?
« Respuesta #9 en: 09 de Marzo de 2022, 17:56:22 »
el problema no esta el el código, lo he realizado con 2 o tres lineas encendiendo leds y aun asi, el tris se bloquea.

Si algo parece complicado... es por que esta mal explicado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:como cambiar el tris en el curso del programa?
« Respuesta #10 en: 09 de Marzo de 2022, 17:59:20 »
el problema no esta el el código, lo he realizado con 2 o tres lineas encendiendo leds y aun asi, el tris se bloquea.

¿Estás simulando o depurando tu código?
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:como cambiar el tris en el curso del programa?
« Respuesta #11 en: 09 de Marzo de 2022, 18:10:44 »
estoy en el ide ccs y viendo en tiempo real los cambios, no me gusta proteus ni emulación me gusta chequear en tiempo real.
Si algo parece complicado... es por que esta mal explicado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:como cambiar el tris en el curso del programa?
« Respuesta #12 en: 09 de Marzo de 2022, 18:17:42 »
estoy en el ide ccs y viendo en tiempo real los cambios, no me gusta proteus ni emulación me gusta chequear en tiempo real.

Entonces ahí puedes verificar en que parte del código, siempre ejecutará la última parte que dices ( SET_TRIS_a(0b00000000))

Código: C
  1. num=7;    
  2.  if (num==7)
  3.         {
  4.            SET_TRIS_a(0b00000000);
  5.            get1 =0b11111111;
  6.            get2 =0b11111111;
  7.         }

Y siempre va hacer eso, ejecuta los anteriores if, pero es tan rápido el cambio que no se ve. cuando ejecuta este último if, existe un delay cuando se ejecuta nuevamente el while ( delay_ms(500);)

Y por eso te da la sensación que tris se queda en 0b00000000
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:como cambiar el tris en el curso del programa?
« Respuesta #13 en: 09 de Marzo de 2022, 18:24:10 »
DominusDRR.
te agradezco tu ayuda.
todo lo que dices ya lo he pensado y chequeado, ademas le tengo retardos para ver los cambios, por eso te decía que no te fijaras mucho en el código por que lo estoy cambiando constantemente,
la pregunta es... como cambio el tris dentro de la ejecución del programa ya que a veces trabaja y a veces no.
Si algo parece complicado... es por que esta mal explicado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:como cambiar el tris en el curso del programa?
« Respuesta #14 en: 09 de Marzo de 2022, 18:31:20 »
DominusDRR.
te agradezco tu ayuda.
todo lo que dices ya lo he pensado y chequeado, ademas le tengo retardos para ver los cambios, por eso te decía que no te fijaras mucho en el código por que lo estoy cambiando constantemente,
la pregunta es... como cambio el tris dentro de la ejecución del programa ya que a veces trabaja y a veces no.

No creo que sea problema del microcontrolador. Por la manera que escribes el código, me parece que por ahí está el problema. Pueda que esté equivocado, sería de conocer la opinión de alguien más.

Una opción sería que veas si el código compilador genera el ensamblador correcto. Es decir ver el código en ensamblador de tu proyecto.

La otra opción es directamente modificar los registros tris sin depender de la función. SET_TRIS_a, es decir bare metal o escribir en ensamblador esa parte del código. Me imagino que CCS permite realizar cualquiera de las dos opciones.

Si puedes, sube un video de tu simulación para que nos indiques como es lo que no cambia el registro TRIS cuando depuras o simulas o emulas tu código, 

Un video es más que mil imágenes.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32


 

anything