Hola, estoy intentando implementar un controlador de keypad en un 22v10. El codigo PLD me compila bien con el WinCUPL de Atmel pero luego lo simulo en Proteus y la salida (output) ponga el nivel logico que ponga en las tres entradas de las columnas da 0 anque el registro de desplazamiento funciona correctamente... Gracias por adelantado, Jordi
El codigo es el siguiente: Name Teclado ; PartNo 00 ; Date 19/05/2007 ; Revision 01 ; Designer Engineer ; Company . ; Assembly None ; Location ; Device p22v10 ;
FIELD counter=[c0..3]; FIELD output = [o0..3];
/* *************** INPUT PINS *********************/ /*se introduce un 0 por las filas y si la tecla esta pulsada lo recibimos en la columna de la tecla pulsada */
/* Las columnas estan conectadas a nivel alto mediante resistencias PULLUP */ PIN 2 = e1 ; PIN 3 = e2; PIN 4 = e3;
/* *************** OUTPUT PINS *********************/ PIN [14..17] = [o0..3] ; /* El codigo de teclado decodificado */ PIN [18..21] = [c0..3] ; /* La salida del registro de desplazamiento */
counter.ar='b'0; counter.sp='b'0;
TABLE counter=> counter.D /*Desplazar el 0 hacia la derecha para escanear las teclas pulsadas */ { 'b'0000=>'b'0111; /*Inicializar el registro */ 'b'0111=>'b'1011; 'b'1011=>'b'1101; 'b'1101=>'b'1110; 'b'1110=>'b'0111; }
output.ar = 'b'0; /* Reset asincrono */ output.sp='b'0; /* Preset */
TABLE counter,e3,e2,e1=> output.D { /*Tabla de conversion */ 'b'0111011=>'b'0001; 'b'0111101=>'b'0010; 'b'0111110=>'b'0011;
'b'1011011=>'b'0100; 'b'1011101=>'b'0101; 'b'1011110=>'b'0110;
'b'1101011=>'b'0111; 'b'1101101=>'b'1000; 'b'1101110=>'b'1001;
'b'1110011=>'b'1100; /* asterisco */ 'b'1110101=>'b'0000; 'b'1110110=>'b'1101; /* almoadilla */ }