TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Nocturno en 12 de Mayo de 2011, 15:23:59
-
Hola amigos. Estoy sufriendo un problema con un 18F24J10.
El caso es que por más combinaciones de fuses que he probado, el micro no oscila.
Este es el software que estoy probando:
#include <18F24J10.h>
#device adc=16
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES INTRC //Internal RC Osc
#use delay(internal=8MHz)
#byte PORTA=0xF80
#bit LED_ROJO=PORTA.0
#bit LED_VERDE=PORTA.1
void main()
{
setup_adc(ADC_OFF);
setup_adc_ports (NO_ANALOGS);
set_tris_a(0x11111000);
while(1) {
output_c(255);
LED_ROJO=1;
LED_VERDE=0;
//delay_ms(500);
output_c(0);
LED_ROJO=0;
LED_VERDE=1;
//delay_ms(500);
}
}
Únicamente he conseguido ver que el micro está vivo si utilizo el ICD3 en modo Debugger y ejecuto el programa paso a paso. En ese caso sí veo cómo los pines van cambiando de estado, aunque ciertamente lo hacen a una velocidad superlenta. Si sirve de pista, la oscilación que mido en los pines del puerto C es de 714Hz.
¿Algún consejo?
-
La idea es usar el oscilador interno, no es cierto? Porque veo un HS por ahí :?
Aparte de seleccionar el fuse correctamente seguramente hace falta configurar el oscilador para fijar a que velocidad se va utilizar.
Saludos!
-
Sí, Suky, este micro lleva el fuse HS o el EC, además del INTRC. Es algo diferente a los micros que había usado hasta ahora.
El oscilador interno lo tengo configurado con
#use delay(internal=8MHz)
aunque para mi desesperación, también estuve probando con toda clase de parámetros en SETUP_OSCILLATOR();
-
Verificaste si este pic no acepta el fuse INTHS?. Es esta PC no tengo el CCS instalado,para fijarme, saludos.
-
No, estos son los fuses que admite.
//////// Fuses: NOWDT,WDT,NOSTVREN,STVREN,NOXINST,XINST,DEBUG,NODEBUG
//////// Fuses: PROTECT,NOPROTECT,HS,H4_SW,EC_IO,E4_SW_IO,INTRC,PRIMARY
//////// Fuses: NOFCMEN,FCMEN,NOIESO,IESO,WDT1,WDT2,WDT4,WDT8,WDT16,WDT32
//////// Fuses: WDT64,WDT128,WDT256,WDT512,WDT1024,WDT2048,WDT4096,WDT8192
//////// Fuses: WDT16384,WDT32768,CCP2B3,CCP2C1
Pero de todas formas, he estado cambiando los "Configuration bits" manualmente en MPLAB para probar todas las combinaciones que se me ocurrían y nada :(
-
Queda descartado un problema con el micro, porque lo he cambiado por otro nuevo y pasa lo mismo.
-
Sera lo mismo que el PIC18F47J53, al cual toca habilitarle el PLL por software para que pueda empezar a trabajar?. Tal vez para poder generar los 8MHZ necesita habilitar algo internamente.
-
¿Habilitar el PLL por software?, ¿no queda habilitado con los fuses?
-
No amigo manolo, en los microcontroladores XLP, debe habilitarse por software el PLL. Esta característica te da la ventaja de poder apagar el PLL cuando quieres correr a bajo consumo sin perder funciones de interrupciones y demás. Luego cuando necesitas máximo rendimiento pasas PLL Enable y subes a correr a toda maquina.
Es una característica que por fin es incluida en los PICs y que otras marcas ya venían implementando con mucho éxito.
Búscate en el datasheet algo sobre ello, yo haré lo mismo a ver que conseguimos.
En el datasheet dice algo sobre: with Software PLL Control
Mas abajo encuentro esto:
Registro: OSCTUNE
Bit:
PLLEN: Frequency Multiplier PLL Enable bit(1)
1 = PLL enabled
0 = PLL disabled
Con eso si empieza a trabajar e PIC a toda maquina. debes hacerlo por software.
SALUDOS!
-
Por fin encontré el problema. Como siempre me pasa, tropiezo con errores de novato :5]
No puse la resistencia en MCLR porque estoy acostumbrado a usar el fuse NOMCLR y este PIC no lo tiene, así que la resistencia es obligatoria.
En cuanto la he colocado ha salido volando.
Gracias por vuestra ayuda