proyecto de seguridad del microcontrolador PIC16F877A

0

Recientemente estuve trabajando en un proyecto de seguridad utilizando PIC16F877A. El programa funciona bien en Proteus, pero cuando construyo mi circuito en una placa de pruebas, da oraciones al azar. Debería esperar la entrada a través del teclado, pero en su lugar ingresa entradas aleatorias y muestra una contraseña incorrecta.

Aquí está el código:

char keypadPort at PORTb;
// Lcd pinout settings
sbit LCD_RS at Rd4_bit;
sbit LCD_EN at Rd5_bit;
sbit LCD_D7 at Rd3_bit;
sbit LCD_D6 at Rd2_bit;
sbit LCD_D5 at Rd1_bit;
sbit LCD_D4 at Rd0_bit;

// Pin direction
sbit LCD_RS_Direction at TRISd4_bit;
sbit LCD_EN_Direction at TRISd5_bit;
sbit LCD_D7_Direction at TRISd3_bit;
sbit LCD_D6_Direction at TRISd2_bit;
sbit LCD_D5_Direction at TRISd1_bit;
sbit LCD_D4_Direction at TRISd0_bit;
int kp;
int password[5];
int DefaultPassword[5]={1,2,3,4,5};
int i;
void main() {
     trisc.f0=0;
     portc.f0=0;
    Keypad_Init();
    lcd_init();
    lcd_cmd(_lcd_cursor_off);
    lcd_out(1,1,"Welcome");
    delay_ms(2000);
    lcd_cmd(_lcd_clear);
    Begin:


     lcd_out(1,1,"Enter Password");
     for(i = 0 ; i<= 4 ; i++)
     {
     kp = 0;
     do
      kp = Keypad_Key_Click();
      while (!kp);


     switch(kp)
     {

      case  1: kp = 1; break;
      case  2: kp = 2; break;
      case  3: kp = 3; break;
      case  4: kp = 'A'; break;
      case  5: kp = 4; break;
      case  6: kp = 5; break;
      case  7: kp = 6; break;
      case  8: kp = 'B'; break;
      case  9: kp = 7; break;
      case 10: kp = 8; break;
      case 11: kp = 9; break;
      case 12: kp = 'C'; break;
      case 13: kp = '*'; break;
      case 14: kp = 0; break;
      case 15: kp = '#'; break;
      case 16: kp = 'D'; break;


     }
      password[i]=kp;
      lcd_out(2,i+1,"*");
     }
     if( strcmp(password,DefaultPassword) ==0)
     {
     lcd_cmd(_lcd_clear);
     lcd_out(1,1,"Welcome");
     portc.f0=1;
     }
     else
     {
     lcd_cmd(_lcd_clear);
     lcd_out(1,1,"Wrong Password");
     delay_ms(2000);
     goto Begin;
     }

    }

y esta es la salida:

Añadido:Esteeselesquema:

    
pregunta Mahmoud Mansour

1 respuesta

1

De las fotos hasta ahora, veo 3 problemas de hardware:

  1. No Vdd & Conexiones Vss a los pines 32 y amp; 31. Esto es necesario para la operación confiable . No puede asumir que el PIC se comportará correctamente en todo momento, si solo se conecta a los pines de alimentación 11 & 12. Debe conectarse a los pines 32 y amp; 31 también.

  2. No hay condensadores de desacoplamiento cerca del PIC para Vdd & Vss pines 11 y amp; 12 ni 32 & 31. Estos son necesarios para la operación confiable .

  3. No hay signos de resistencia de pull-up cerca del conector del teclado en el Puerto B, cerca de los pines 40-33. Sin estos, es probable que obtenga una detección esporádica de falsas pulsaciones de teclas, que se ajuste a sus síntomas.

Por lo tanto:

  • Proporcione su esquema, como ya lo solicitó Eugene Sh . Debido a su baja "rep" (puntos), no puede agregar otro enlace a su pregunta, pero puede agregar el enlace a la imagen en los comentarios de su pregunta, y alguien agregará la imagen en su pregunta.

  • Por favor, suministre otra foto que incluya todas de la placa de pruebas, preferiblemente tomada directamente sobre la misma.

Actualizado para agregar:

Gracias por tu esquema. Eso confirma que faltan las resistencias de pull-up que se muestran en esta página de la Biblioteca del teclado MikroC . Aquí está el ejemplo del esquema de esa página:

Observelasresistenciasdepull-upde10kΩenlasconexionesde"columna". Necesitas esas resistencias pull-up en cualquiera de los pines equivalentes o tu teclado.

Su esquema también muestra que no hay condensadores de desacoplamiento. Te recomiendo que investigues sobre ellos y por qué son necesarios. Encontrará mucha información aquí en EE.SE y en otros lugares.

Como ya ha aprendido, una simulación de Proteus no significa que el mismo esquema funcionará "en el mundo real". Proteus no simula real fenómenos electrónicos, por ejemplo. Entradas flotantes, ruido de fuente de alimentación / picos, etc. etc.

    
respondido por el SamGibson

Lea otras preguntas en las etiquetas