Lectura de problema PIC18F4550 Entrada

3

Hola, estoy enfrentando algún problema con la lectura de la entrada de un PIC18f4550 , para una disposición simple en la que cuando se enciende un interruptor (interruptor = 1), algunos LED deben brillar, y al soltar el interruptor el led debe apagarse (interruptor = 0) ,. Al proporcionar algunos voltios a través de un pin (RA0 o RA1), los leds deberían brillar pero no estoy teniendo éxito al hacerlo. Estoy usando el compilador MPLAB IDE Y C18. intentado con MPLABX y compilador XC8 también.

Quería recibir información de RA0 y RA1, con un interruptor de dos pulsaciones. Y leds luminosos en RD7-RD4. Hice una declaración simple if if else else, dentro de un bucle while (1) para hacerlo.

    #include <p18f4550.h>
    #define switch1  PORTAbits.RA0   // two switches
    #define switch2  PORTAbits.RA1
    #define led1    LATDbits.LATD7   // defining led’s for making life easy
    #define led2    LATDbits.LATD6
    #define led3    LATDbits.LATD5
    #define led4    LATDbits.LATD4

    void main (void)
            {
                    // IO settings
                    /* tired both ways*/

            TRISbits.RA0=1   //making input for switch 1
            TRISbits.TRISA1=1  //making input for switch 2

            TRISDbits.TRISD7 = 0;   // RD7 to RD4 set to output for led.
            TRISDbits.TRISD6 = 0;
            TRISDbits.TRISD5= 0;
            TRISDbits.TRISD4 = 0;

            ADCON1bits.PCFG0 = 1;        // making all pins digital.
            ADCON1bits.PCFG1 = 1; 
            ADCON1bits.PCFG2 = 1;     // referred Data Sheet Page:262
            ADCON1bits.PCFG3 = 1;

              while(1)
                {      if(switch1 == 1)   
                            {    led1 = 1;   
                                 led2 = 1;
                                 led3 = 1;
                                 led4 = 1;          }

         else if (switch1 == 0)  // on reading no voltage 
                            {     led1 =  0;
                                  led2 =  0;
                                  led3 =  0;
                                  led4 =  0;  }                                    
                               else { }
                          }  
   }

No funcionó bien ... los leds del RD7-RD4 se mantienen encendidos todo el tiempo sin importar lo que haga.

Intenté cambiar el

        PORTAbits.RA0   to  LATAbits.LATA0  but still no help.

Investigué un poco y alguien me recomendó que desactivara el valor de ADC y después de buscar la configuración de la hoja de datos. Apagué el adc

        ADCON0bits.ADON = 0;  //turn off the ADC

Comprobado con el circuito en placa de pruebas. Todo menos la misma situación. Alguien lo recomendó además, es una mejor idea apagar el comparador. Por lo tanto, volví a apagar el comparador.

     CMCON = 0x07;     // comparator off.

     ADCON1=0x0F;  //All pins digital

Construí todo de nuevo desde cero pero aún no he tenido éxito. Presiono el interruptor o lo apago. Los leds en el RD7-RD4 solo del puerto D permanecen encendidos todo el tiempo: ’(... Aquí estoy, por favor, ayúdenme.

PD: [Solo para sumar, también pensé que mi foto18f4550 se ha echado a perder. Por lo tanto, probé un código para parpadear led en pic18f4550 enlace de un sitio web que funcionó bien ... por lo tanto, estoy seguro de que mi pic184550 no ha ido mal. ] Por favor, ayúdenme y recomiéndame dónde me equivoqué, he estado intentando desde hace 3 días: '(

    
pregunta Sanju

1 respuesta

1

No creo que ADCON haga una diferencia en este caso al ver que los pines PORTD que está utilizando están multiplexados con el Modo PWM mejorado y el Puerto paralelo de transmisión (SPP), en lugar del Módulo de entrada analógica, que tiene prioridad sobre el puerto I / O

Querrá deshabilitar el PWM mejorado que también se multiplexa con patillas PORTD. También es probable que desees deshabilitar SPP, al borrar el bit de registro SPPCON 0 (SPPEN) a 0

Porlotanto,unasoluciónenestecasopuedeserconfigurarCCP1CONparacualquiercosaquenoseaDualoQuadPWMalconfigurarCCP1CONen00xx11xx

    
respondido por el Iancovici

Lea otras preguntas en las etiquetas