▷ Generar números pseudo-aleatorios - PIC/Microcode

En este post vamos a ver como generar números pseudo-aleatorios e imprimirlos en un lcd 16x2 utilizando el micro-controlador PIC 16F628A

¿QUE ES UN NUMERO PSEUDO-ALEATORIO?

Un número pseudo-aleatorio es un número generado en un proceso que parece producir números al azar, pero no lo hace realmente. Las secuencias de números pseudo-aleatorios no muestran ningún patrón o regularidad aparente desde un punto de vista estadístico, a pesar de haber sido generadas por un algoritmo completamente determinista, en el que las mismas condiciones iniciales producen siempre el mismo resultado.

MATERIALES:

Los materiales utilizados para este proyecto son los siguientes:

  • PIC 16F628A
  • LCD 16*2

DIAGRAMA DE CONEXIONES:

FUNCIONAMIENTO:

Al energizar el micro-contolador nos aparecerán números aleatorios en el LCD, en este caso los números que nos aparecerán irán de 0 a 50, si queremos obtener valores mayores a 50 debemos modificar los siguientes valores.

X = (((7*X)+5) Mod 99)
N = X Mod 51

Ejemplo:

Si queremos generar números aleatorios con valores que vayan de 0 a 100 modificamos:

X = (((7*X)+5) Mod 199)
N = X Mod 101

Para la generación de los números pseudo-aleatorios nos basamos en el siguiente algoritmo: Generador de congruencia lineal

CÓDIGO:

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Esteban Carrillo - www.edeptec.com                *
'*  Notice  : Copyright (c) 2022                                *    
'*          : All Rights Reserved                               *
'*  Date    : 18/03/2021                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
DEFINE LCD_DREG PORTB 
DEFINE LCD_DBIT 0 
DEFINE LCD_RSREG PORTB 
DEFINE LCD_RSBIT 4 
DEFINE LCD_EREG PORTB 
DEFINE LCD_EBIT 5

x VAR BYTE
y VAR BYTE
n VAR BYTE

y = 5
CICLO: 
    x = (((7*x)+5) Mod 99)
    n = x Mod 50

    LCDOUT $fe, 1
    LCDOUT $fe, $80 + y, "Num:" ,DEC n
    PAUSE 500
GOTO CICLO

0/Post a Comment/Comments