Colapsar columna

Menu Usuario -

Hola, Visitante
avatar


Mas Activos -

nocturno
Mensajes: 1997
Meta
Mensajes: 276
djfreeman
Mensajes: 272
spiderman
Mensajes: 257
HJ.0x00
Mensajes: 224

Autor Tema: AYUDA Teclado AT/PS2 Con PIC6f628a en ccs  (Leído 811 veces)

Desconectado germanmkurylo

  • Nuevo fichaje
  • *
  • Mensajes: 6
AYUDA Teclado AT/PS2 Con PIC6f628a en ccs
« en: Agosto 02, 2020, 04:22 »
buenas como estan
vengo con un problema que aun no encuentro solución seguramente alguien de aqui sabra la solucion mi codigo de teclado ps2 para un arcade no inicia con la pc y no puedo usar RB0 xq lo uso como contador para monedero,

paso el codigo funciona solo al iniciar la pc con ottro telcado ps2

#include <16F628A.h>                       
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOMCLR,PUT     
#use delay(clock=4000000)                                                   

#zero_ram
unsigned char   cont_pulsos,pulsos_rx,filtro_monedas;   

unsigned long   tiempo_monedas,filtro_10,filtro_20,filtro_30,filtro_40,filtro_50,filtro_60,filtro_70,filtro_80,filtro_90;

int1         busy_contador,moneda_in,tiempo_10ms,monedero_st;                 

#define OUT_CLOCK          PIN_A2               // Salida de Clock
#define OUT_DATA           PIN_A3               // Salida de Datos


#int_EXT
void trata_int_ext()
{
}

#INT_TIMER1
void trata_int_timer1(void)
{
   tiempo_10ms = 1;

   set_timer1(65350);
}


void output_scancode_ps2(unsigned char scancode)
{
   int salida, unos=1;

   output_high(OUT_CLOCK);
   output_high(OUT_DATA);
   delay_us(10);

   output_high(OUT_CLOCK);
   output_low(OUT_DATA);
   delay_us(10);

   output_low(OUT_CLOCK);
   output_low(OUT_DATA);
   delay_us(10);

   salida = 1;

   do
   {    output_high(OUT_CLOCK);
      output_bit(OUT_DATA, scancode&0x01);
      delay_us(5);
      output_low(OUT_CLOCK);
      output_bit(OUT_DATA, scancode&0x01);
      delay_us(35);
      output_low(OUT_CLOCK);
      delay_us(40);
   /* ** Enviamos bit Stop ** */
      output_high(OUT_CLOCK);
      delay_us(5);
      output_high(OUT_DATA);
      delay_us(35);
      output_low(OUT_CLOCK);
      delay_us(40);
 
      output_float(OUT_CLOCK);
      output_float(OUT_DATA);
 
   delay_us(100);
       if ((scancode & 0x01) == 0x01) {unos++;}

       scancode = scancode>>1;
       salida++;

   }while(salida < 9);

     output_high(OUT_CLOCK);
     output_bit(OUT_DATA, unos&0x01);
     delay_us(10);
     output_low(OUT_CLOCK);
     output_bit(OUT_DATA, unos&0x01);
     delay_us(10);

     output_high(OUT_CLOCK);
     output_high(OUT_DATA);
     delay_us(10);
     output_low(OUT_CLOCK);
     output_high(OUT_DATA);
     delay_us(10);

     output_high(OUT_CLOCK);
     output_high(OUT_DATA);

     delay_ms(5);
}

void main(void)
{
   unsigned int contador_veces;


      setup_comparator(NC_NC_NC_NC);

   output_a(0b00001100);                        // Mantiene portA en 0
   output_b(0b00000010);                        // Mantiene portB en 0

   set_tris_a(0b11000011);                  // Config portA
   set_tris_b(0b11110001);                  // Config portB

   EXT_INT_EDGE(H_TO_L);

   SETUP_TIMER_1(T1_INTERNAL | T1_DIV_BY_8);
   set_timer1(64275);

//   enable_interrupts(INT_EXT);
   enable_interrupts(INT_TIMER1);
   enable_interrupts(GLOBAL);


   delay_ms(100);
   while(true)
   {
      if(tiempo_10ms == 1)
      {
         if(input(pin_b0) == 0)
         {
            if(monedero_st == 0)
            {
               filtro_monedas++;
               if(filtro_monedas >= 25)
               {
                  monedero_st = 1;
                  cont_pulsos++;
                  busy_contador = 1;
                  filtro_monedas = 0;
               }
            }
         }
         else
         {
            filtro_monedas = 0;
            monedero_st = 0;
            if(busy_contador == 1)
            {
               tiempo_monedas++;
               if(tiempo_monedas > 7500)
               {

                  pulsos_rx = cont_pulsos;
                  cont_pulsos = 0;
                  busy_contador = 0;
                  moneda_in = 1;
                  tiempo_monedas = 0;
                  if(moneda_in == 1)
                  {
                       for(contador_veces = 1; contador_veces < pulsos_rx; ++contador_veces)
                       {
                           output_low(pin_a4);
                           output_scancode_ps2(0x2D);   //r
                           delay_ms(20);
                       }
                      moneda_in = 1;
                  }

               }
            }
            else
            {
               tiempo_monedas = 0;
            }
         }

      //--------BOTON 1--------//
         
         if(input(pin_b4) == 0)
         {
            filtro_10++;
            if(filtro_10 >= 200)
            {         
               output_low(pin_b2);
                 output_scancode_ps2(0x4b); //  L
                  delay_ms(20);
               filtro_10 = 0;
            }   
         }
         else
         {
            filtro_10 = 0;
         }
         
      //--------BOTON 2--------//
     
      if(input(pin_b5) == 0)
         {
            filtro_20++;
            if(filtro_20 >= 200)
            {         
               output_low(pin_b2);
                 output_scancode_ps2(0x5A); //  ENTER
                  delay_ms(0);
               filtro_20 = 0;
            }   
         }
         else
         {
            filtro_20 = 0;
         }

      //--------BOTON 3--------//
         
         if(input(pin_b6) == 0)
         {
            filtro_30++;
            if(filtro_30 >= 200)
            {         
               output_low(pin_b2);
                 output_scancode_ps2(0x15); // Q
                  delay_ms(20);
               filtro_30 = 0;
            }   
         }
         else
         {
            filtro_30 = 0;
         }

      //--------BOTON 4--------//

         if(input(pin_b7) == 0)
         {
            filtro_40++;
            if(filtro_40 >= 200)
            {         
               output_low(pin_b2);
                 output_scancode_ps2(0x24); // E
                  delay_ms(20);
               filtro_40 = 0;
            }   
         }
         else
         {
            filtro_40 = 0;
         }
         
      //--------BOTON 5--------//
         
         if(input(pin_a6) == 0)
         {
            filtro_50++;
            if(filtro_50 >= 200)
            {         
               output_low(pin_b2);
                 output_scancode_ps2(0x29);  // Space
                  delay_ms(20);
               filtro_50 = 0;
            }   
         }
         else
         {
            filtro_50 = 0;
         }
         
      //--------BOTON 6--------//
         
         if(input(pin_a7) == 0)
         {
            filtro_60++;
            if(filtro_60 >= 200)
            {         
               output_low(pin_b2);
                 output_scancode_ps2(0x0d);
                  delay_ms(20);
               filtro_60 = 0;
            }   
         }
         else
         {
            filtro_60 = 0;
         }
         
      //--------BOTON 7--------//

         if(input(pin_a0) == 0)
         {
            filtro_70++;
            if(filtro_70 >= 200)
            {         
               output_low(pin_b2);
                 output_scancode_ps2(0x1c);
                  delay_ms(20);
               filtro_70 = 0;
            }   
         }
         else
         {
            filtro_70 = 0;
         }
       
         
      //--------BOTON 8--------//
         
         if(input(pin_a1) == 0)
         {
            filtro_80++;
            if(filtro_80 >= 200)
            {         
               output_low(pin_b2);
                 output_scancode_ps2(0x1d);  //  W
                  delay_ms(20);
               filtro_80 = 0;
            }   
         }
         else
         {
            filtro_80 = 0;
         } 

      //--------BOTON 9 LLAVE--------//
         
         if(input(pin_b3) == 0)
         {
            filtro_90++;
            if(filtro_90 >= 200)
            {         
               output_low(pin_b2);
                 output_scancode_ps2(0x4d);  //LLAVE P
                  delay_ms(20);
               filtro_90 = 0;
            }   
         }
         else
         {
            filtro_90 = 0;
         }
         tiempo_10ms = 0;
      }

   }
   
}
« última modificación: Agosto 03, 2020, 01:07 por germanmkurylo »

Desconectado nocturno

  • Administrator
  • MicroPIC Gurú
  • *****
  • Mensajes: 1997
    • MicroPIC
Re:AYUDA Teclado AT/PS2 Con PIC6f628a en ccs
« Respuesta #1 en: Agosto 03, 2020, 06:35 »
¿Quieres decir que conectas tu PIC al PC y no lo detecta como un teclado?, ¿y debería hacerlo?, ¿has copiado el código de algún sitio?
Un saludo desde Sevilla, España

Desconectado germanmkurylo

  • Nuevo fichaje
  • *
  • Mensajes: 6
Re:AYUDA Teclado AT/PS2 Con PIC6f628a en ccs
« Respuesta #2 en: Agosto 03, 2020, 15:41 »
hola
el código es para unas interfaz de teclas tipo mame, vino en un pack de juegos que compre hace un tiempo pero no venia incluido en la oferta.

funciona perfecto si colocas otro teclado primero indistinto si esta iniciado o no el sistema operativo.
he probado la inicializacion de códigos de esta web que funcionaron pero no he podido adaptar el main a esos códigos queda en un bucle enviando una letra al azar siempre.
ahora con respecto a si debería hacer la conexión como at pues no estoy seguro si tal como esta debería pero es lo que quiero lograr

Desconectado germanmkurylo

  • Nuevo fichaje
  • *
  • Mensajes: 6
Re:AYUDA Teclado AT/PS2 Con PIC6f628a en ccs
« Respuesta #3 en: Agosto 03, 2020, 15:56 »
el hardware es bastante sencillo
tengo resitencias de 22R con otras de 6k8 en pull-up y para la generacion de botones tengo entre resistencias de 4k7 con su comun a 5v

Desconectado germanmkurylo

  • Nuevo fichaje
  • *
  • Mensajes: 6
Re:AYUDA Teclado AT/PS2 Con PIC6f628a en ccs
« Respuesta #4 en: Agosto 04, 2020, 07:48 »
problema resuelto gracias..

Desconectado nocturno

  • Administrator
  • MicroPIC Gurú
  • *****
  • Mensajes: 1997
    • MicroPIC
Re:AYUDA Teclado AT/PS2 Con PIC6f628a en ccs
« Respuesta #5 en: Agosto 04, 2020, 14:35 »
¿Dónde estaba el fallo?
Un saludo desde Sevilla, España


 

login