Hola como estan??
Antes de nada les agradezco por un monton de favores que me han hecho sin querer con mucha y muy buena informacion que he encontrado en este foro.
Ando complicado con el uso del teclado matricial en el 18f4550.
Hace muy poco que estoy con el tema de los PICs, solo unos meses, a partir de una materia de la facultad y la verdad que estoy muy enganchado con todo este mundo.
Para arrancar, y como no se assembler tome como libro "de cabecera" el "Compilador C Ccs Y Simulador Proteus Para Microcontroladores Pic", en el cual hice muchos ejercicios para el 16f87X en el compilador PIC c y los simule con bastante suerte en el PROTEUS
Luego de empaparme en la teoria, empece con la practica en prothoboard, armando esos ejemplos que hice, pero con la diferencia que por el hecho de ser mas grande y moderno, compre un 18f4550
La cuestion es que migrando un ejercicio con teclado matricial literalmente me estoy volviendo loco tratando de hacer andar el teclado en el 18f4550 en la simulacion de proteus, usando la libreria KBD.c que trae el compilador. En la simulacion el PIN RBO no se activa, me toma solo el 1 cuando apreto el 2 o el 3, y no hace nada mas.
Navegando en el foro vi q algunos tuvieron el mismo problema, tome info de esos post pero no he logrado superar este problema
Probe de todo:
- uso el puerto B para el teclado, configurando la libreria para esto
-probe con standard y fast io en el puerto b
-cambie el pin para la fila 1 del rb1 al rb0 en la libreria(tampoco arranca el RBO)
-uso el nopbaden, tanto desde el fuse como desde el registro config3h
para que too el puerto b arranque como digital
-use de las resistencias pullup del puerto b
-no use de las resistencias pullup del puerto b y poniéndole resistencias primero a las columnas y despues a todo....
pero naranja. 
el codigo es:
[i]#include <18f4550.h>
#fuses NOWDT, NOPROTECT, NOLVP,NOPBADEN
#FUSES PLL1,NOUSBDIV,CPUDIV1,INTRC_IO //PARA USAR RC INTERNO
//#fuses XT
#use delay (clock=8000000)
#use standard_io(c)
#use fast_io(b)
//#include <kbd_18f4550.c> //ESTA LIBRERIA TIENE LA DIFERENCIA
//DE QUE LA FILA 1 SE CONECTA A RB0
#include <kbd.c>//CON LA LINEA PARA USAR PUERTO B DESCOMENTADA
//ESTO ES PARA QUE SE PUEDA USAR EL PUERTO C COMO SALIDA
#define lcd_data_port getenv("sfr:portc")
#include <lcd.c>
#bit pbaden=0x300005.1
void main(){
disable_interrupts(GLOBAL);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_PLL_OFF); //reloj interno
// setup_adc_ports(NO_ANALOGS);
char k;
pbaden=0;
int x;
lcd_init();
kbd_init();
set_tris_b(0b11111110);
// set_tris_b(0b11111101); //PARA USAR EL RB0 EN VEZ DE RB1 EN LA //FILA 1
port_b_pullups(TRUE);
lcd_putc("\fPRESIONE TECLA\n");
while (1)
{ k=kbd_getc();
x=k-48;
if (k!=0){if(k=='*')
lcd_putc("\fTECLA??");
else
printf(lcd_putc
,"\fTECLA= %u",x
); delay_ms(1000);
}
}//FIN DE WHILE
}// FIN DE MAIN[/i]
espero que alguien me pueda dar una mano
adjunto el codigo y el esquema en proteus, el cual esta medio desprolijo por obvias toqueteadas que le pegue entre tante prueba
![redhot :5]](http://www.todopic.com.ar/foros/Smileys/default/redhot.gif)
Saludos
Cristian[/size]