Estoy utilizando 24FJ64GA102 de 28 pin.
Lo programo en CCS y en MPLAB XC16.
Cuando pongo los pin RB0...RB15 como salidas, los pines RB8, RB9, RB10, RB11,
no responden, todos los demas pin funcionan bien.
Con el siguiente codigo no responden y cambiando configuración fuses 1 por la 2
// *** CONFIGURACIÓN fuses 1 ***
//#fuses WINDIS, NOWDT, ICSP1, NODEBUG, NOWRT, NOPROTECT, NOJTAG
//#fuses I2C1SELD, NOIOL1WAY, NOIESO, NOWPFP, WUT_DEFAULT, NOWPDIS
//#fuses NOWPCFG, WPBEG, DSWDTCK_LPRC, RTCOSC_LPRC, NODSBOR, NODSWDT
//#fuses FRC, NOPR, OSCIO, SOSC_IO, NOCKSNOFSM
// *** CONFIGURACIÓN fuses 2 ***
#fuses FRC, NOWDT, NOPR
#use delay(clock=4M)
void main()
{
set_tris_b(0x0000);
do {
output_b(0xFFFF);
} while(TRUE);
}
El valor medido en los 4 pin con el polimetro es:
RB8, RB9, RB10 = 0.20V
RB11 = 2.80V
La tensión en RB8, RB9, RB10 es similar, cuando se declaran el puerto como entrada, pero esta como salida.
La tensión en RB11 es como si estuviera flotante, no es capaz de encender un LED.
En los demas pines del puerto b estan bien a 3.3V
Como los demas pin funcionan bien, le añado al programa UART para ver como se comporta TRISB.
// *** CONFIGURACIÓN fuses 1 ***
//#fuses WINDIS, NOWDT, ICSP1, NODEBUG, NOWRT, NOPROTECT, NOJTAG
//#fuses I2C1SELD, NOIOL1WAY, NOIESO, NOWPFP, WUT_DEFAULT, NOWPDIS
//#fuses NOWPCFG, WPBEG, DSWDTCK_LPRC, RTCOSC_LPRC, NODSBOR, NODSWDT
//#fuses FRC, NOPR, OSCIO, SOSC_IO, NOCKSNOFSM
// *** CONFIGURACIÓN fuses 2 ***
#fuses FRC, NOWDT, NOPR
#use delay(clock=4M)
#pin_select U1TX = PIN_B2
#pin_select U1RX = PIN_B3
#use rs232(baud=9600, UART1)
void main()
{
delay_ms(300);
do {
printf("Sin nada = %lx \n\r", get_tris_b());
delay_ms(1000);
} while(TRUE);
}
get_tris_b() devuelve 0xF0FF
El puerto b esta como entrada menos RB8, RB9, RB10, RB11, que estan como salida.
Si añado set_tris_b(0xFFFF); el resultado de get_tris_b() es 0xF0FF, no cambia.
Si pongo set_tris_b(0x0000); el resultado de get_tris_b() es 0x0000
El valor medido en los 4 pines con ambos TRIS, es el puesto mas arriba, no cambia.
Los 4 pin RB8, RB9, RB10, RB11, no modifican su valor si añado:
output_high(PIN_B8); output_high(PIN_B9); output_high(PIN_B10); output_high(PIN_B11);
output_toggle(PIN_B8); ...;
output_float(PIN_B8); ...;
input(PIN_B8); ...;
bit_set(puertob, 1); ...;
Y con output_float() y input(), el tris de los 4 pines, no cambia como entrada, sigue como salida.
Cambie a MPLAB IDE XC16 por si fuera problema de CCS, pero no hay ningun cambio,
los puertos se comportan igual, no responden.
No se, si tendra algo que ver, que los 4 puertos correspondan a los pines de JTAG.
El chip lo tengo con una resistencia 10K del positivo a MCLR.
Condensador de 10uF de tantalo del pin20 a masa.
Pin19 DISVREG a masa.
Tambien, por si acaso he puesto setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF);
Pero estos puertos no tienen entrada analogica.
He probado con setup_pmp(PAR_DISABLE, ox00FF); setup_psp(PAR_DISABLE, 0x00FF);
Se que algo tengo que estar haciendo mal, pero no se me ocurre que pruebas
mas puedo hacer.