Código básico para cambiar el LED de PIC18f4550 C18 no funciona

0

Ok, estoy seguro de que es algo estúpido, pero esta es probablemente la variante número 20 de este código y no puedo resolverlo. Simplemente quiero un interruptor (con rebote) para activar un LED en el PIC18f4550. ¿Debo usar un puerto diferente para el switch? Aquí está mi código:

void main(void) 
{

    TRISBbits.TRISB0 = 1;    //switch input
    TRISBbits.TRISB3 = 0;    // LED output
    PORTBbits.RB3 = 0;       // make LED low by default
    TRISEbits.TRISE2 = 1;    // alternate switch input


    while (1) {                       // doesn't work for some reason
        if (PORTEbits.RE2 == 1) {
            LATBbits.LATB3 == 1;
            }
        else LATBbits.LATB3 == 0;
    } 
}

Intenté publicar el código de configuración, pero arruinó el formato aquí.

EDIT: perdón por el formato feo, pero aquí están los ajustes de configuración. Tuve que cambiar algunas cosas para evitar que el formato se volviera extraño.

include stdio.h    
include stdlib.h    
include p18f4550.h    
include delays.h    

// chip config     ////////////////////////////////////////////////////////////////////////////////////

pragma config PLLDIV = 5             
pragma config CPUDIV = OSC1_PLL2    
pragma config USBDIV = 2        

                               // internal clock, pin #14 (RA6) as I/O pin, pin #13 unused,    
pragma config FOSC = INTOSCIO_EC    // if OSCCON is left as default clock speed will be 1Mhz    

            // now the other less confusing options . . .    
pragma config FCMEN = OFF       
pragma config IESO = OFF        
pragma config PWRT = OFF        
pragma config BOR = OFF     
pragma config BORV = 3      
pragma config VREGEN = OFF  
pragma config WDT = OFF     
pragma config WDTPS = 32768     
pragma config CCP2MX = ON       
pragma config PBADEN = OFF      
pragma config LPT1OSC = OFF         
pragma config MCLRE = ON            
pragma config STVREN = ON       
pragma config LVP = OFF     
pragma config ICPRT = OFF       
pragma config XINST = OFF       
pragma config DEBUG = OFF
    
pregunta Mark

2 respuestas

0

No mostró el circuito externo, pero si solo tiene un interruptor conectado entre el pin de entrada y tierra (o alimentación), eso no es suficiente. Eso impulsará el pasador de una manera cuando el interruptor esté cerrado, pero lo dejará flotando cuando esté abierto. No hay garantía de en qué estado estará cuando se deje flotando. Para solucionar este problema, ate un pullup o pulldown al pin que hace que se mueva a la polaridad opuesta cuando el interruptor está abierto.

Por ejemplo, ate el interruptor entre el pin y el suelo, y luego el pullup entre el pin y Vdd. use 1 - 10 kΩ para el pullup.

Algunos pines de ese PIC pueden configurarse para pullups internos. RB4-RB7 puede, pero posiblemente otros en ese PIC (su trabajo para verificar la hoja de datos). Si habilitas el pullup interno, entonces la única parte externa que necesitas es el cambio entre el pasador y la tierra.

    
respondido por el Olin Lathrop
0

Los pines que está utilizando también son entradas analógicas, por lo que debe asegurarse de que estén apagados. También es una buena idea que apague los comparadores, en caso de que quiera usar RA0 a RA5.

El código es:

CMCON = 0x07;
ADCON1 = 0x0F;

Lea la sección sobre los puertos IO y el ADC, le informa todo lo que necesita saber.

    
respondido por el Oli Glaser

Lea otras preguntas en las etiquetas