NicoElec / Sistemas-Digitales

Laboratorios Sistemas Digitales
0 stars 0 forks source link

Laboratorio 2 Sistemas Digitales ( Secuencias en matriz de leds 4x4 con nombre de secuencias en LCD ) #1

Open NicoElec opened 1 month ago

NicoElec commented 1 month ago

Imagen de WhatsApp 2024-09-06 a las 12 58 01_e0708b3b Foto 1: Presentación de los integrantes del grupo con las iniciales del nombre de cada uno de los integrantes.

A continuación se encontrara el código y montaje utilizado para la elaboración de este laboratorio. Componentes utilizados : STM32F103T8C6, RES 2K, RES 1K, RES 330, TRIMER 2K, LEDS, BUFFER 74HC541, PANTALLA LCD, LM117- 3.3v, DIPSWITCH.

Link ( video evidencia del correcto funcionamiento ) : https://youtu.be/lP32Vv8qqdk

ESQUEMA END Foto 2: Esquema electrónico del montaje utilizado.

/*
David Santiago Guarin Enciso
Edwar Raul Carrero Alaya
Nicolas David Quiroga Villalba
*/

#include "mbed.h"
#include <cstdint>

BusOut MATRIZ();

//DECLARACIÓN BUS 1 SECUENCIA ****************

BusOut MATRIZ_S1(PA_9,PA_15,PB_6,PB_5,PA_12,PA_8,PB_12,PB_13,PB_14,PB_15,PA_11,PB_4,PB_8,PB_7,PB_3,PA_10);

//BUS 2 SECUENCIA ****************

BusOut MATRIZ_S2_SA(PB_13,PA_9,PA_8,PA_12,PB_5,PA_15);
BusOut MATRIZ_S2_SB(PB_7,PB_3,PB_4,PA_11,PB_15,PA_10);

//BUS 3 SECUENCIA ****************

BusOut MATRIZ_S3(PB_5,PB_6,PA_12,PB_7,PA_8,PA_15,PB_8,PB_12,PA_9,PB_3,PB_13,PA_10,PB_4,PB_14,PA_11,PB_15);

//BUS 4 SECUENCIA ****************

BusOut MATRIZ_S4(PA_11,PB_14,PB_13,PA_8,PA_12,PB_6,PB_7,PB_4,PA_10,PA_9,PA_15,PB_3);

//BUS 5 SECUENCIA ****************

BusOut MATRIZ_S5_SA(PA_8,PB_13,PA_10,PB_15);
BusOut MATRIZ_S5_S5B(PA_11,PB_14,PA_9,PB_12);
BusOut MATRIZ_S5_SB(PA_12,PB_6,PB_3,PB_8);
BusOut MATRIZ_S5_S5D(PB_4,PB_7,PA_15,PB_5);

//BUS DIPSWICHT ****************

BusIn DIPSW(PC_13,PC_14,PC_15,PA_0);

//BUS LCD ****************

BusOut DLCD(PA_3,PA_4,PA_5,PA_6,PA_7,PB_0,PB_1,PB_10);
DigitalOut RS(PA_1);
DigitalOut RW();
DigitalOut EN(PA_2);

uint8_t VLCD = 255;

//DECLARACIÓN DE FUNCIONES ****************

void INICIALIZAR(void);
void TLCD_0 (void);
void TLCD_1 (void);
void TLCD_2 (void);
void TLCD_3 (void);
void TLCD_4 (void);
void TLCD_5 (void);
void R_I (uint8_t COMANDO);
void R_D (uint8_t CARACTER);
void S1(void);
void S2(void);
void S3(void);
void S4(void);
void S5(void);

//DEFINICIÓN SECUENCIA 1 ****************

void S1(){
    if(VLCD !=1)
    {
        TLCD_1();
        VLCD=1;
    }
        uint16_t SA = 1;
        uint8_t i = 0;
        MATRIZ_S1 = 0;

        wait_us(400000);

        for (i=0; i<16;i++){
            MATRIZ_S1=SA;
            wait_us(400000);
            SA = (SA << 1)|1;
        }

    SA = 65534;

        for (i=0; i<16;i++){
            MATRIZ_S1=SA;
            wait_us(400000);
            SA = SA << 1;
        }

}

//SECUENCIA 2 ****************

void S2(){
    if(VLCD!=2)
    {
        TLCD_2();
        VLCD=2;
    }
            uint16_t SA = 1;
            uint16_t SB = 1;
            uint8_t i = 0;
            MATRIZ_S1 = 0;

            wait_us(400000);

            for (i=0; i<6;i++){
                MATRIZ_S2_SA=SA;
                MATRIZ_S2_SB=SB;
                wait_us(400000);
                SA = (SA << 1)|1;
                SB = (SB << 1)|1;
            }

        SA = 31;
        SB= 31;

            for (i=0; i<6;i++){
                MATRIZ_S2_SA=SA;
                MATRIZ_S2_SB=SB;
                wait_us(400000);
                SA = SA >> 1;
                SB = SB >> 1;

            }

}

//SECUENCIA 3 ****************

void S3() {
    if(VLCD!=3)
    {
        TLCD_3();
        VLCD=3;
    }
            uint16_t SA;
            uint8_t i;

            SA = 1;
            MATRIZ_S3 = SA;
            wait_us(400000);

            for (i = 1; i <= 2; i++) {//2do bit ON LED 2,3
                SA |= (1 << i);
            }
            MATRIZ_S3 = SA;
            wait_us(400000);

            for (i = 3; i <= 5; i++) {//3er bit ON LED 4, 5, 6
                SA |= (1 << i);
            }
            MATRIZ_S3 = SA;
            wait_us(400000);

            for (i = 6; i <= 9; i++) {//4to bit ON LED 7, 8, 9, 10
                SA |= (1 << i);
            }
            MATRIZ_S3 = SA;
            wait_us(400000);

            for (i = 10; i <= 12; i++) {//5to bit ON LED 11, 12, 13
                SA |= (1 << i);
            }
            MATRIZ_S3 = SA;
            wait_us(400000);

            for (i = 13; i <= 14; i++) {//6 bit - ON LED 14, 15
                SA |= (1 << i);
            }
            MATRIZ_S3 = SA;
            wait_us(400000);

            SA |= (1 << 15);//7mo bit ON LED 16
            MATRIZ_S3 = SA;
            wait_us(400000);

            SA &= ~(1 << 15);//OFF LED 16
            MATRIZ_S3 = SA;
            wait_us(400000);

            for (i = 13; i <= 14; i++) {//OFF LED 14, 15
                SA &= ~(1 << i);
            }
            MATRIZ_S3 = SA;
            wait_us(400000);

            for (i = 10; i <= 12; i++) {//OFF LED 11, 12, 13
                SA &= ~(1 << i);
            }
            MATRIZ_S3 = SA;
            wait_us(400000);

            for (i = 6; i <= 9; i++) {//OFF LED 7, 8, 9, 10
                SA &= ~(1 << i);
            }
            MATRIZ_S3 = SA;
            wait_us(400000);

            for (i = 3; i <= 5; i++) {//OFF LED 4, 5, 6
                SA &= ~(1 << i);
            }
            MATRIZ_S3 = SA;
            wait_us(400000);

            for (i = 1; i <= 2; i++) {//OFF LED 2, 3
                SA &= ~(1 << i);
            }
            MATRIZ_S3 = SA;
            wait_us(400000);

            SA &= ~1; //OFF LED 1
            MATRIZ_S3 = SA;
            wait_us(400000);

}

//SECUENCIA 4 ****************

void S4(){
    if(VLCD!=4)
    {
        TLCD_4();
        VLCD=4;
    }
            uint16_t SA = 1;
            uint8_t i = 0;
            MATRIZ_S4 = 0;

            wait_us(400000);

            for (i=0; i<12;i++){
                MATRIZ_S4=SA;
                wait_us(400000);
                SA = (SA << 1)|1;
            }

        SA = 2047;

            for (i=0; i<12;i++){
                MATRIZ_S4=SA;
                wait_us(400000);
                SA = SA >> 1;
            }

}

//SECUENCIA 5 ****************

void S5() {
    if(VLCD!=5)
    {
        TLCD_5();
        VLCD=5;
    }
            uint16_t SA = 1;
            uint16_t SB = 1;
            uint16_t S5B = 1;
            uint16_t S5D = 1;
            uint8_t i = 0;

            MATRIZ_S5_SA = 0;
            MATRIZ_S5_SB = 0;
            MATRIZ_S5_S5B = 0;
            MATRIZ_S5_S5D = 0;

            wait_us(400000);

            for (i = 0; i < 4; i++) {  
                MATRIZ_S5_SA = SA;
                MATRIZ_S5_SB = SB;
                wait_us(400000);
                SA = (SA << 1) | 1;
                SB = (SB << 1) | 1;
            }

            MATRIZ_S5_SA = 0;
            MATRIZ_S5_SB = 0;
            MATRIZ_S5_S5B = 0;
            MATRIZ_S5_S5D = 0;

            wait_us(1000000);  

            S5B = 1;  
            S5D = 1;  

            for (i = 0; i < 4; i++) {  
                MATRIZ_S5_S5B = S5B;
                MATRIZ_S5_S5D = S5D;
                wait_us(400000);
                S5B = (S5B << 1) | 1;
                S5D = (S5D << 1) | 1;
            }

}

// INZALIZACIÓN LCD ****************

void INICIALIZAR(void)

{
    wait_us(50000);
    R_I(0b00110000);

    wait_us(25000);
    R_I(0b00110000);

    wait_us(1000);
    R_I(0b00110000);

    R_I(0b00111000);
    R_I(0b00001100);
    R_I(0b00000001);
}

void R_I(uint8_t COMANDO) {
    RS = 0;  

    EN = 0;
    DLCD = COMANDO;

    EN = 1;
    wait_us(1); 
    EN = 0;

    wait_us(2000);  
}

void R_D(uint8_t CARACTER) {
    RS = 1;  
    EN = 0;
    DLCD = CARACTER;

    EN = 1;
    wait_us(1); 
    EN = 0;

    wait_us(2000);  
}

//FUNCIONES NOMBRES LCD ****************

void TLCD_0()
{
    R_I(1);
    if(VLCD!=0)
    {
        char POS[12] = {132,137,133,136,199,131,200,198,138,135,201,130};
        char Letras[13] = {"CGASDRQNEDVE"}; //ERCA DSGE NDQV

        for (uint8_t i = 0; i < 12; i++) {
            R_I(POS[i]);  
            R_D(Letras[i]); 
            wait_us(800000);        }
        VLCD=0; 
    }
}
void TLCD_1()
{
    R_I(1);
    wait_us(2000);
    char POS[13] = {128,129,200,130,131,201,132,133,202,134,135,203,136};  
    char Letras[14] = {"LAPBYARITNTHH"};   //LABYRINTH PATH

    for (uint8_t i = 0; i < 13; i++) {
        R_I(POS[i]);  
        R_D(Letras[i]);
        wait_us(1100000);
    }  
}
void TLCD_2()
{
    R_I(1);
    wait_us(20);
    char POS[8] = {132,197,131,198,130,199,129,200};  
    char Letras[9] = {"APTAETZH"};  //ZETA PATH

    for (uint8_t i = 0; i < 8; i++)
    {
        R_I(POS[i]);  
        R_D(Letras[i]);
        wait_us(900000);
    }
}
void TLCD_3()
{
    R_I(1);
    wait_us(20);
    char POS[12] = {128,134,200,129,131,199,130,132,133,202,135,201};  
    char Letras[13] = {"DAIIGLAONELN"};  //DIAGONAL LINE

    for (uint8_t i = 0; i < 12; i++) {
        R_I(POS[i]);  
        R_D(Letras[i]);
        wait_us(1100000);
    }
}
void TLCD_4()
{
    R_I(1);
    wait_us(20);
    char POS[6] = {196,194,128,195,129,197};
    char Letras[7] = {"GSAITN"};  //AT SIGN

    for (uint8_t i = 0; i < 6; i++) {
        R_I(POS[i]); 
        R_D(Letras[i]);
        wait_us(1100000);
    }
}   

void TLCD_5()
{
    R_I(1);
    wait_us(20);
    char POS[9] = {142,139,143,193,140,192,141,138,194}; 
    char Letras[10] = {"LOEAUWBDY"};  //DOUBLE WAY

    for (uint8_t i = 0; i < 9; i++) {
        R_I(POS[i]); 
        R_D(Letras[i]);
        wait_us(1100000);

    }
}

//EJECUCIÓN ****************

int main()
{
    INICIALIZAR();
    TLCD_0();
    while (true) {

        switch(DIPSW){
           case 0: S5(); break;
           case 1: S4(); break;
           case 2: S3(); break;
           case 3: S2(); break;
           case 4: S1(); break;

            default : MATRIZ_S1=MATRIZ_S2_SA=MATRIZ_S2_SB=MATRIZ_S3=MATRIZ_S4=
                MATRIZ_S5_SA=MATRIZ_S5_SB=0; break;
        }

    }
}

Imagen de WhatsApp 2024-09-05 a las 19 03 07_484fe86e Foto 3: Montaje.