▷ 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/Deja un comentario/Comentarios

¡Hola! Nos alegra mucho que hayas llegado hasta aquí y que estés leyendo este artículo en Edeptec.
Este formulario es un espacio abierto para ti: puedes dejar un comentario con tus dudas, sugerencias, experiencias o simplemente tu opinión sobre el tema tratado.

» ¿Te resultó útil la información?
» ¿Tienes alguna experiencia personal que quieras compartir?
» ¿Se te ocurre algún tema que te gustaría ver en próximos artículos?

Recuerda que este espacio es para aprender y compartir, por eso te animamos a participar de manera respetuosa y constructiva. Tus comentarios pueden ayudar a otros lectores que están en el mismo camino, ya sea en electrónica, programación, deportes o tecnología.

¡Gracias por ser parte de esta comunidad de aprendizaje! Tu participación es lo que hace crecer este proyecto.