es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿No se pueden combinar dos valores juntos?

Estoy usando el PIC18lF47k42 con el compilador XC8.
Estoy tratando de obtener este valor completo del ADC de 12 bits, para tener la resolución completa, sin embargo, no puedo hacer que los 4 bits de datos de ADRESL se agreguen a “result” junto con los datos de ADRESH.
“Result” es una variable de 16 bits para que pueda almacenar los 12 bits. ¿Alguna idea?

Ejemplo:

ADRESH = 00110101 ADRESL = 10100000, quiero que “result” sea igual a 0000001101011010.

imagen de la salida durante la simulación

#include "myIncludes.h"

volatile unsigned char ZCDSoftwareFlag = 0;
volatile unsigned char switchValue = 0;

void main(void) 
{
    portInit();
    adcInit();
    uint16_t result;
    while (1)
    {
        ADCON0bits.GO = 1; // Iniciar la conversión
        while (ADCON0bits.GO); // Esperar a que la conversión termine

        result = 0b0000000000000000;
        result = ADRESH << 4;
        result = (result)  | ADRESL;
        //result = (ADRESH << 4) | ADRESL;
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener el valor completo de 12 bits del ADC en la variable result, es necesario concatenar los bits ADRESL con los bits ADRESH.

    Aquí tienes un ejemplo de código que logra esto:

    #include "myIncludes.h"
    
    volatile unsigned char ZCDSoftwareFlag = 0;
    volatile unsigned char switchValue = 0;
    
    void main(void)
    {
        portInit();
        adcInit();
        uint16_t result;
        while (1)
        {
            ADCON0bits.GO = 1; // Iniciar la conversión
            while (ADCON0bits.GO); // Esperar a que termine la conversión
    
            result = 0b0000000000000000;
            result = ADRESH << 8; // Desplazar ADRESH 8 bits hacia la izquierda
            result |= ADRESL; // Realizar una operación OR entre result y ADRESL
        }
    }
    

    En este código, el valor de ADRESH se desplaza 8 bits hacia la izquierda para dar espacio a los bits ADRESL, los cuales se OR’d con el valor desplazado para crear la variable de 16 bits result.

    Es importante tener en cuenta que este código asume que los bits más significativos del valor del ADC se almacenan en ADRESH y los bits menos significativos se almacenan en ADRESL. Si esto no es así, las operaciones de desplazamiento y OR deberán ajustarse en consecuencia.

Comments are closed.