Problema de cambio de datos para Q6 y Q7 (a partir de Q0) al usar el 4094 I.C con un microcontrolador

1

Actualmente estoy usando un microcontrolador PIC con un 4094 IC pero cuando QUIERO para cambiar los datos a Q6 o Q7, los cambia a Q0 & Q1 y cuando lo cambio a Q0 & Q1 enciende Q6 y amp; Q7. Entonces, no tengo problemas para operar la salida que quiero, pero ¿por qué sucede esto?

Debajo están los códigos:

    void ShiftData(unsigned char Data)
{
        unsigned char i;
//        OUTEN=1;
        LED_A = 0;  //STROBE = 0;
        LED_C = 0;  //DISPCLK = 0;

        LED_B = 0;  //DISPDATA = 0;

        for(i = 0;i < 8;i++)
            {
                if(Data & 0x01) 
                   LED_B = 1;   //DISPDATA = 1;
                else 
                   LED_B = 0;   //DISPDATA = 0;

                LED_C = 1;  //DISPCLK = 1; 
                NOP(); 
                NOP(); 
                NOP(); 
                NOP(); 
                NOP(); 
                NOP(); 
                NOP(); 
                NOP(); 
                LED_C = 0;  //DISPCLK = 0;
                Data = Data >> 1;
            }

        LED_A = 1;  //STROBE = 1;
        NOP(); 
        NOP(); 
        NOP(); 
        NOP(); 
        NOP(); 
        NOP(); 
        NOP(); 
        NOP(); 

        LED_A = 0;  //STROBE = 0;
//      OUTEN=0;
}

Lo que hago es:

Reg_Data = 0x00;
Reg_Data |= (1 << 1);
ShiftData(Reg_Data);

Esto debería hacer que Q1 sea alto pero que Q6 sea alto.

Alternativamente:

Reg_Data = 0x00;
Reg_Data |= (1 << 0);
ShiftData(Reg_Data);

Esta acción cambia Q0 en lugar de Q7.

¡La ayuda sería muy apreciada!

Enlace a 4094 I.C: enlace

    
pregunta Ameer Usman

1 respuesta

1

Lo que estás viendo es la diferencia entre MSB first y LSB first serial.

El HEF4094 espera que los datos se desplacen en MSB primero , es decir, el bit 7 es el primer bit de datos que se le envía.

Sin embargo, su código está cambiando los datos LSB primero. Tenga en cuenta que Data & 0x01 extrae el LSB, y Data = Data >> 1; desplaza el siguiente LSB hacia abajo para ser enviado.

Para convertir su código a MSB primero, es una tarea sencilla cambiar esas dos líneas a Data & 0x80 (extraer MSB) y Data = Data << 1; (cambiar el siguiente MSB).

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas