Angel, una pregunta:
ADCON1 = 0x0F; // Esta linea pone como digitales R0 R1 R2 R4
TRISB = 0; / esta linea no lo entiendo, lo estas poniendo en decimal no? Porque a trisb le pones un 0 y a trisA un 2 si las dos estan conectados a RA1 o RB1( en todo caso a la pata 1)
TRISA = 2;
Es que quiero que me quede clarisimo! Muchas gracias de antemano.
Edito1: Yo para dar alimentacion a la pata donde va el pulsador tenia una fuente de tension dc. Como haces eso de VCC? coges una entrada y pones vcc pero como sabes a quantos voltios esta?
Edito2: El registro ADCON1 no habria que usarlo en el pulsador en vez de en el led? O en todo caso en los dos lugares no?
Vayamos por partes....
En la página 176 del documento DS39760B -que es el datasheet que tengo del 18F2550 y 18F4550- muestra que los bits PCFG0 a PCFG3 (que son el nibble bajo) del registro ADCON1 sirven para determinar si los pines servirán como entradas analógicas o como pines digitales. En mi caso configuré para que todos los pines funcionen como digitales.
TRISB = 0 : Sí, está en decimal. Puesto en binario sería 0b00000000, es decir que todos los pines del puerto B se van a comportar como salida.
TRISA = 2 : También está en decimal. Puesto en binario sería 0b00000010, es decir que el único pin del puerto A que va a funcionar como entrada es RA1.
Recordá que cada puerto tiene su correspondiente registro TRIS y sirve para configurarlo como entrada o salida. Para recordar fácilmente cuando se configura como entrada y cuando como salida yo pienso en lo siguiente 1nput 0utput.
Todo esto que acabo de escribir está en el datasheet, por ello mi insistencia en su lectura.
Con respecto al punto "Edito1" Sí le ponés una fuente de alimentación directo al pin, cuando presiones el pulsador -que queda conectado a GND- vas a provocar un cortocircuito.
La resistencia que yo conecté desde el pin del pulsador a VCC se denomina resistencia de "Pull-up", porque "empuja" a dicho pin a tener un valor positivo.
Como la entrada del pic consume muy poca corriente, el valor de tensión que se termina desarrollando en dicho terminal es VCC (o infinitamente cercano). Excepto cuando presiono el pulsador, momento en el cual el pin queda conectado a GND y no se produce corto porque no tengo una fuente directa sino que está la resistencia de pull-up.
También se pueden utilizar resistencias de "Pull-Down" que irían de un pin determinado hacia GND en lugar de positivo.
Te recomiendo que hagas algo bien sencillo, armá en el Proteus un ciruito tan simple como 2 resistencias en serie con una fuente VCC de 5V y midas tensión en una de las resistencias.
Te lo describo más o menos en modo texto. RA de 10K y RB de 1M. RA_pin1 a VCC, RA_pin2 a RB_pin1, RB_pin2 a GND. Y medí la tensión entre RB_pin1 y RB_pin2.... vas a ver que te da 5V o un valor muy muy cercano.
En este ejemplo RA sería la de Pull-up y RB sería la interna del pic.
Con respecto al punto "Edito2" creo que ya quedó respondido.