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:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbev8fbJElb9gWkT59repT0HZa2YbMcTLPzshyphenhyphentZuySs4uGOYCtNIerDL-OxL71DhnzKswb_5Zr3Sut6DZhRL4oJIXhPuXM6pq4VdZSbMfzBU5toUmEfPR78OmbP6EjNQGAQ-2aROtbtY/w400-h314-rw/Generar+numeros+aleatorios+en+microcode.webp)
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
Publicar un comentario