Autor Tema: XC8 - ¿asignación de puertos a variables como en CCS?  (Leído 9360 veces)

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

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: XC8 - ¿asignación de puertos a variables como en CCS?
« Respuesta #15 en: 25 de Marzo de 2014, 11:23:44 »
como te comenta Merlinz, no puedes usar un vertor de bits, tal vez esto te sirva, yo uso estos macros para modificar bits

Código: C
  1. #define BIT(X)             (0x00000001 << (X))//definicion para seleccionar un bit
  2. #define BitMask(P,X)       (P&(BIT(X)))//aplica una mascara al bit deseado
  3. #define GetBit(P,X,state)  if(BitMask(P,X)!=0)state=1;else state=0;//el macro lee el estado deun bit y lo regresa en "state"
  4. #define SetBit(Reg,X)      Reg=Reg|(BIT(X))//setea un bit deseado
  5. #define ClearBit(Reg,X)    Reg=Reg&(~BIT(X))//borra un bit deseado

Tambien podrias hacer un arreglo de punteros hacia las direcciones de los registros que quieras modificar y modificar el contenido de tu puntero
"Nada es imposible, no si puedes imaginarlo"

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: XC8 - ¿asignación de puertos a variables como en CCS?
« Respuesta #16 en: 21 de Mayo de 2014, 20:55:57 »
hola, aprovecho este tema para exponer un problema que tengo, poniéndolos en contexto:
PIC24FJ64GA002, XC16.

Tengo una tarjeta ensamblada sobre la cual tengo 3 leds que por software se encienden con nivel lógico alto   configuración    vcc---Resistencia----led---pin--<
Compilando en CCS puedo encender los 3 sin ningún problema.

Iniciando un código sencillo en XC16 no se enciende uno de los leds, y no encuentro por que, se trata del pin B10, que no encuentro nada raro en la hoja de datos con respecto al pin.

el código que uso en XC es el siguiente

Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <xc.h>
  4.  
  5. // CONFIG2
  6. #pragma config POSCMOD = NONE           // Primary Oscillator Select (Primary oscillator disabled)
  7. #pragma config I2C1SEL = PRI            // I2C1 Pin Location Select (Use default SCL1/SDA1 pins)
  8. #pragma config IOL1WAY = ON             // IOLOCK Protection (Once IOLOCK is set, cannot be changed)
  9. #pragma config OSCIOFNC = ON            // Primary Oscillator Output Function (OSC2/CLKO/RC15 functions as port I/O (RC15))
  10. #pragma config FCKSM = CSDCMD           // Clock Switching and Monitor (Clock switching and Fail-Safe Clock Monitor are disabled)
  11. #pragma config FNOSC = FRC              // Oscillator Select (Fast RC Oscillator (FRC))
  12. #pragma config SOSCSEL = SOSC           // Sec Oscillator Select (Default Secondary Oscillator (SOSC))
  13. #pragma config WUTSEL = LEG             // Wake-up timer Select (Legacy Wake-up Timer)
  14. #pragma config IESO = OFF               // Internal External Switch Over Mode (IESO mode (Two-Speed Start-up) disabled)
  15.  
  16. // CONFIG1
  17. #pragma config WDTPS = PS32768          // Watchdog Timer Postscaler (1:32,768)
  18. #pragma config FWPSA = PR128            // WDT Prescaler (Prescaler ratio of 1:128)
  19. #pragma config WINDIS = OFF             // Watchdog Timer Window (Windowed Watchdog Timer enabled; FWDTEN must be 1)
  20. #pragma config FWDTEN = OFF             // Watchdog Timer Enable (Watchdog Timer is disabled)
  21. #pragma config ICS = PGx1               // Comm Channel Select (Emulator EMUC1/EMUD1 pins are shared with PGC1/PGD1)
  22. #pragma config GWRP = OFF               // General Code Segment Write Protect (Writes to program memory are allowed)
  23. #pragma config GCP = OFF                // General Code Segment Code Protect (Code protection is disabled)
  24. #pragma config JTAGEN = OFF             // JTAG Port Enable (JTAG port is disabled)
  25.  
  26. /*
  27.  *
  28.  */
  29. #define PB1     PORTBbits.RB7
  30. #define PB2     PORTBbits.RB8
  31.  
  32. #define ONLED5  LATBbits.LATB10=0;
  33. #define ONLED6  LATBbits.LATB12=0;
  34. #define ONLED7  LATBbits.LATB6=0;
  35.  
  36.  
  37. //###########  DECLARACION DE VARIABLES GLOBALES ##############################
  38.  
  39. //#############################################################################
  40.  
  41.  
  42. //###########  DECLARACION DE FUNCIONES #######################################
  43.  
  44. void configuraciones(void);
  45.  
  46. //#############################################################################
  47. int main(int argc, char** argv)
  48. {
  49.     configuraciones();
  50.  
  51.     while(1)
  52.     {
  53.       ONLED5
  54.       ONLED6
  55.       ONLED7
  56.     }
  57.  
  58.     return (EXIT_SUCCESS);
  59. }
  60.  
  61. void configuraciones()
  62. {
  63.     TRISBbits.TRISB12=0;
  64.     TRISBbits.TRISB10=0;
  65.     TRISBbits.TRISB6=0;
  66.  
  67. }

cuando compilo con ccs y mido con voltimetro encuentro nivel bajo en los leds por lo cual encienden los 3
cuando uso XC16 y mido encuentro que el led que no enciende alcanza a tener 1.9v, los otros dos si tienen nivel bajo y prenden :z)

otra pregunta, programo con el software del pickit3 , cuando quiero cargar el .hex me dice que no se encuentran los word configuration en el hexadecimal  ???
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: XC8 - ¿asignación de puertos a variables como en CCS?
« Respuesta #17 en: 21 de Mayo de 2014, 21:03:22 »
Hola Jhozate

CCS hace mucho por debajo del agua. Talvez está reconfigurando los pines PPS sin que te enteres. Checa si no hay algo más que hacer ahí. ¿No será que debes deshabilitar un JTAG o un LVPD en ese pin?
« Última modificación: 21 de Mayo de 2014, 21:07:03 por migsantiago »

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: XC8 - ¿asignación de puertos a variables como en CCS?
« Respuesta #18 en: 21 de Mayo de 2014, 21:18:13 »
La mejor forma de averiguarlo es compilarlo en CCS y después ver el listado en assembler para ver como lo hace, de esa forma te sacas la intriga...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: XC8 - ¿asignación de puertos a variables como en CCS?
« Respuesta #19 en: 22 de Mayo de 2014, 07:04:36 »
Tu problema esta en los fuses, yo tambien tuve problemas por ponerlo con #pragma config me ocurria lo mismo, al final lo hice asi

_FGS(
    GWRP_OFF &           // General Segment Write-Protect bit (General Segment may be written)
    GSS_OFF &            // General Segment Code-Protect bit (General Segment Code protect is disabled)
    GSSK_OFF             // General Segment Key bits (General Segment Write Protection and Code Protection is Disabled)
);

_FOSCSEL(
    FNOSC_FRC &          // Initial Oscillator Source Selection Bits (Internal Fast RC (FRC))
    IESO_ON              // Two-speed Oscillator Start-up Enable bit (Start up device with FRC, then switch to user-selected oscillator source)
);

......
Y ya no habia mas problemas

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: XC8 - ¿asignación de puertos a variables como en CCS?
« Respuesta #20 en: 22 de Mayo de 2014, 11:37:33 »
Hola Jhozate

CCS hace mucho por debajo del agua. Talvez está reconfigurando los pines PPS sin que te enteres. Checa si no hay algo más que hacer ahí. ¿No será que debes deshabilitar un JTAG o un LVPD en ese pin?
voy a tener que mirar el asm que genera mplab, aunque en los archivos que genera no se cual de todos es, voy a buscarlo.

La mejor forma de averiguarlo es compilarlo en CCS y después ver el listado en assembler para ver como lo hace, de esa forma te sacas la intriga...
Si, de hecho trato de migrar un código de ccs a XC, he visto el asm de css y en donde pone los bits del puerto en bajo , cambia el TRIS como salida y luego accede al LAT , aunque  hay mas código que no visto porque en ccs uso los PPS,  en XC aun no los configuro.

gracias MerLiNz, voy a probar a ver que sucede
_FSG y _FOSCSEL  no veo estos nombres en la hoja de datos, pero los bits que configuras hacen parte de las configuration words, en mi caso seria CW1 y CW2 , probaré,  gracias
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: XC8 - ¿asignación de puertos a variables como en CCS?
« Respuesta #21 en: 22 de Mayo de 2014, 14:43:44 »
te he puesto un ejemplo de un dspic, buscate para el tuyo, creo que estaba en un archivo de ayuda de mplabx

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: XC8 - ¿asignación de puertos a variables como en CCS?
« Respuesta #22 en: 23 de Mayo de 2014, 14:08:47 »
hola, he comentado las lineas que usan #PRAGMA que del codigo que se genera con el asistente de MPLAB, y lo he hecho asi
Citar
_CONFIG1( FWDTEN_OFF & GWRP_OFF & GCP_OFF & JTAGEN_OFF & ICS_PGx1 & FWDTEN_OFF )
_CONFIG2( POSCMOD_NONE & I2C1SEL_PRI & IOL1WAY_ON & OSCIOFNC_ON & FCKSM_CSDCMD & FNOSC_FRC & IESO_OFF)

el led sigue sin encender y el programa del pickit3 me arroja el mismo warning de los connfiguration word
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: XC8 - ¿asignación de puertos a variables como en CCS?
« Respuesta #23 en: 23 de Mayo de 2014, 22:38:57 »
hola, he comentado las lineas que usan #PRAGMA que del codigo que se genera con el asistente de MPLAB, y lo he hecho asi
Citar
_CONFIG1( FWDTEN_OFF & GWRP_OFF & GCP_OFF & JTAGEN_OFF & ICS_PGx1 & FWDTEN_OFF )
_CONFIG2( POSCMOD_NONE & I2C1SEL_PRI & IOL1WAY_ON & OSCIOFNC_ON & FCKSM_CSDCMD & FNOSC_FRC & IESO_OFF)

el led sigue sin encender y el programa del pickit3 me arroja el mismo warning de los connfiguration word


Hola, el PICkit3 programmer es beta hasta donde recuerdo. ¿No será mejor si usas el programador de MPLAB X?

¿Cuál estás usando?

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: XC8 - ¿asignación de puertos a variables como en CCS?
« Respuesta #24 en: 24 de Mayo de 2014, 13:49:39 »
uso pickit3 programmer v3.10, no uso directo desde el mplab,  con versiones anteriores vi que siempre el programador buscaba actualización y a veces se quedaba en ese proceso, no se si pasará lo mismo con MPLAB X
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA


 

anything