Hola, tengo un problema con la lectura de la entrada de un PIC18f4550 , para un arreglo simple en el que cuando se enciende (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 LED deberían brillar, pero no tengo éxito al hacerlo. Estoy usando el compilador MPLAB IDE Y C18. Probé con el compilador MPLABX y 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 simple declaración if then else, dentro de un ciclo 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 siguen encendidos todo el tiempo sin importar lo que haga.
Traté de cambiar el
PORTAbits.RA0 to LATAbits.LATA0 but still no help.
Investigué un poco y alguien me recomendó desactivar el valor 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 protoboard. Todo pero sigue siendo la misma situación. Alguien recomendó además que es una mejor idea apagar el comparador. Por lo tanto, apagué el comparador nuevamente.
CMCON = 0x07; // comparator off.
ADCON1=0x0F; //All pins digital
Construí todo de nuevo desde cero, pero aún no tuve éxito. Presiono el interruptor para encenderlo o apagarlo. Los leds en RD7-RD4 solo del puerto D siguen encendidos todo el tiempo :'( .. Aquí estoy por favor ayúdenme.
PD: [Solo para sumar, también pensé que mi pic18f4550 podría haberse estropeado. Por lo tanto, probé un código para parpadear el LED en pic18f4550 http://goo.gl/PosRgg de un sitio web que funcionó bien... por lo tanto, estoy seguro de que mi pic184550 no salió mal.] Por favor, ayuda y recomienda dónde me equivoqué, tengo estado intentando desde hace 3 días :'(
No creo que ADCON marque una diferencia en este caso, ya 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 la E/S del puerto.
Deberá deshabilitar el PWM mejorado que también está multiplexado con pines PORTD. También probablemente querrá deshabilitar SPP, borrando el bit 0 del registro SPPCON (SPPEN) a 0
Entonces, una solución en este caso puede ser configurar CCP1CON para cualquier cosa que no sea Dual o Quad PWM configurando CCP1CON en 00xx 11xx
joe hass
Sanju
joe hass