Oscilador PIC18F4550

#1
Hola a todoss!! vereis tengo el pickit 2 y un pic18f4550, y bueno, no se si he conectado mal el oscilador, o que el programa está mal hecho, el caso es que no hace nada. Empezamos por el oscilador, tengo un cristal de 8 MHz y dos condensadores de 22pF (lo recomendado con 20pF pero no creo que haya mucha diferencia), y los tengo conectados a las entradas OSC1 y OSC2 del integrado (pines 13 y 14), la conexión vamos como dice el cristal en paralelo y los dos condensadores a los extremos y a masa, eso creo que lo tengo bien y ahora os pongo el codigo a ver que os parece:
Código:
#include <p18f4550.h>

#pragma config WDT=OFF
#pragma config FOSC=HS
#pragma config DEBUG=ON
#pragma config LVP=OFF
#pragma config MCLRE=OFF
#pragma config ICPRT=OFF

void main (void){

unsigned int a;
TRISA=0x00;
PORTA=0X00;

    while(1){
         if (PORTA==0x01)
            PORTA=0x00;
        else
            PORTA=0x01;

    for(a=0;a<1000000;a++); //retardo

        }
}
el programa es bastante sencillo. . . que se encienda y apague un led, no tiene mas. El programa compila bien pero no hae nada. .
Gracias por adelantado!!

Un saludoo
 
#2
Mira no soy un experto pero me parece que el error esta en que el puerto a "TRISA=0x00" lo tenes como salida y despues intentas tomar un pulso del mismo puerto A
"if (PORTA==0x01)"

Yo lo cambiaria por

void main (void){

unsigned int a;
TRISA=0x02; // 0000 0010 Ra1 como entrada
PORTA=0x00;

while(1){

if (PORTAbits.RA1==1)
PORTAbits.RA0=1;
else
PORTAbits.RA0=0;

for(a=0;a<1000000;a++); //retardo
}
}

Espero sea de ayuda
 
#3
hola!! gracias por contestar pero no es eso.. . porque pruebo con este otro codigo en el que no leo el puerto a sino una variable y tampoco funciona. . .
Código:
#include <p18f4550.h>

#pragma config WDT=OFF
#pragma config FOSC=HS
#pragma config DEBUG=ON
#pragma config LVP=OFF
#pragma config MCLRE=OFF
#pragma config ICPRT=OFF

void main (void){

unsigned int a, b;
TRISA=0x00;
PORTA=0X01;
b=0;
    while(1){
         if (b==0){
            PORTA=0x00;
            b==1;}
        else{
            PORTA=0x01;
            b==0;}

    for(a=0;a<1000000;a++);

        }
}
gracias de todas formas
 
Última edición:
#5
sigue sin hacer nada. . . alguien me puede pasar un programa que funcione con un oscilador de cristal¿¿??? asi lo pruebo!!

vamos a ver!! acabo de hacer un debug en el micro y el porograma funciona perfectamente, el problema debe estar en el oscilador, o en la configuración del oscilador. El oscilador lo tengo conectado como he dicho antes, y la configuracion FOSC=HS, hay algun registro que tenga que modificar mas para que funcione el pic??
 
Última edición:
#6
// DS 51537 - Configuration Settings (Ver. C)


#pragma config OSC = HS /* Para osc a 20Mhz */
#pragma config FCMEN = OFF /* Para forzar a usar solo el osc externo */
#pragma config IESO = OFF /* Osc Interno OFF */
#pragma config PWRT = ON /* Power Up Timer ON */
#pragma config BOREN = ON /* Si detecta una falla en la alimentacion: RESET */
#pragma config BORV = 3 /* La tensión a la que se resetea, antes 43 */
#pragma config MCLRE = ON /* MCLR Externo ON */
#pragma config LPT1OSC = OFF /* Timer 1 Osc Int OFF */
#pragma config PBADEN = OFF /* Pines del B no analógicos */
#pragma config CCP2MX = PORTC /* El capture del PWM lo manejo por el puerto C */
#pragma config STVREN = ON /* Si hay un desborde del stack: RESET */
#pragma config LVP = OFF /* Low Voltage Programming OFF */
#pragma config XINST = ON /* Para modo extendido */
#pragma config DEBUG = ON /* Para habilitar el ICD */
#pragma config WDT = ON, WDTPS = 128 /* Watch Dog Timer ON y con un preescaler de 128 */
 
Última edición:
#7
sigue sin funcionar!!! ya he cambiado hasta el cristal!! no se que mas hacer :unsure:

una cosa. . . el pin mclr tengo que ponerlo a vcc si lo tengo en ON?? y si lo tengo en OFF?¿?¿¿?
 
Última edición:
#8
Mandalo con una resistencia (menor que 40K) a positivo, para resetearlo le pongo un pulsador a masa, fijate que en las hojas de datos sugieren un circuito, como estas alimentando el pic? que raro que no funcione
 
#9
Hola

pues que yo sepa en la configuracion de los TRIS un pin para entrada es 1 y para salida es 0
y en la carpeta donde instalaste el c18 tienes un archivo en la carpeta docs hlpPIC18ConfigSet.chm
que tiene toda la informasion acerca de la configuracion.
lo primero que se me ocurre es que debes cambiar esto:
#pragma config DEBUG=ON por
#pragma config DEBUG=OFF
esta opcion la debes activar solamente si quieres depurar y cuentas con un depurador ya sea este un pickit 2 o 3 o un ICD2 o 3.

y si sigue sin funcionar depura tu codigo en el MPLAB o usando proteus.

salu2:)
 
Última edición:
#10
ya he depurado el programa con el pickit2 y funciona, por eso he legado a la conclusion de que el problema esta en la configuración.
Ok pues ahora no que no puedo pero cuando pueda pruebo lo que me has dicho gonzalo. El pic d emomento lo estoy alimentando con la alimentación de pickit2, probe con una fuente a parte pero seguia sin funcionar. Graciasss!!!

bueno bueno bueno. . . pues he llevado con una resistencia de 10k el reset a +vcc y tampoco funciona. . . ... de todas formas, si lo pòngo en off no deberia de interferir ese pin no¿?¿?
 
Última edición:
#11
hola
si no pones el debug en off no funcionara sin el pickit.
yo ya lo experimente antes y ese pic no trabajara nunca mientras tengas acivado el flag de debug.
pero si no quieres creerme alla tu.

salu2:)
 
#12
mil gracias!!! ya funciona!!! en el mensaje anterior pensaba que me pedias que le hiciera un debug y ya se lo habia hecho y si que funcionaba. . ahora ha sido poner eso a off y ya funciona!!!!! gracias!!!!!
 
#14
El programa está bien. El programa está corriendo a gran velocidad y no se alcanza a ver el destello. La idea del for para crear una pausa es buena... pero lo estás haciendo con un int. Según el compilador que utilices algunos lo consideran de 8 bits. Intentá declarando la variable a como unsigned long (te creará una variable de 16 bits sin signo en caso de que utilices CCS como compilador. Igualmente, el varlor más grande que te tomará es 65534.) Y si utilizás un delay_ms(500), como para crear una pausa de medio segundo en lugar de un for???
 

Temas similares

Arriba