PIC MCU: dos entradas ADC ayudan

Así que actualmente jugando con el ADC en mi PIC16F917. Tengo funciones de un solo botón y todo funciona bien.

En lo que realmente me encantaría ayudar es cómo hacer que la MCU acepte 2 entradas, sin que la segunda sea un ISR.

¿Cómo puedo modificar este código para que sea así cuando, por ejemplo, AN1 pasa a > 512, PORTDbits.RD1 pasa a nivel alto, junto con AN0 y RD0? Actuando como dos sistemas separados, pero trabajando simultáneamente. ¿Es realmente posible?

Gracias de nuevo, Ezra

#include <xc.h>
#include "config-bits.h"

#define _XTAL_FREQ 4000000

void delay()
{
    int i;

    for(i=0; i<5000; i++)
    {
        /*Timer Stuff*/
    }
}

int main()
{
    TRISD=1;                    //Set all D pins to input

    TRISDbits.TRISD0 = 0;       //LED output
    ANSELbits.ANS0 = 1;         //Select ADC input

    ADCON0bits.ADFM = 1;        //ADC result is right justified
    ADCON0bits.VCFG = 0;        //Vdd is the +ve reference
    ADCON1bits.ADCS = 0b001;    //Fosc/8 is the conversion clock
                                //This is selected because the conversion
                                //clock period (Tad) must be greater than 1.5us.
                                //With a Fosc of 4MHz, Fosc/8 results in a Tad
                                //of 2us.
    ADCON0bits.CHS =  0;        //select analog input, AN2
    ADCON0bits.ADON = 1;        //Turn on the ADC

    int result;

    while(1)
    {
        __delay_us(5);                  //Wait the acquisition time (about 5us).

        ADCON0bits.GO = 1;              //start the conversion
        while(ADCON0bits.GO==1){};      //wait for the conversion to end

        result = (ADRESH<<8)+ADRESL;    //combine the 10 bits of the conversion

        if(result > 512)
        {
            PORTDbits.RD0 = 1;
            delay();
            PORTDbits.RD0 = 0;
            delay();
        }
        else
        {
            PORTDbits.RD0 = 0;
        }
    }
}

Respuestas (1)

Con este PIC, la verdadera simultaneidad no es posible, ya que solo hay una muestra y retención y un convertidor. Si casi es lo suficientemente bueno, entonces ajustar su código para simplemente cambiar entre entradas funcionaría. Si no, entonces un PIC con más de un ADC/Muestra y retenciones sería el camino a seguir, por ejemplo, un dsPIC como el dsPIC33FJ128GP802 . O, por supuesto, podría agregar un ADC externo.

¡Genial! No pensé en eso, ¿así que sugeriría una función similar a la multiplexación para verificar las entradas y ejecutarlas a través del ADC? ¿Los puertos accesibles del ADC solo están limitados desde AN0 hasta AN7 o puede dirigir cualquier entrada al ADC?
Sí, ese tipo de cosas: simplemente alterne una variable y verifique el valor en el código, luego cambie a la entrada adecuada (o para más entradas incremente un valor y luego cambie el caso) Solo puede usar las entradas analógicas (AN *)
Entonces, digamos para 3 entradas, un contador que solo cuenta hasta tres, y en el camino verificando las entradas 1, 2 y tres 3 en el número correspondiente. Y la frecuencia de la comprobación está limitada al tiempo de conversión A/D de 5 us, ¿verdad?
Sí, ese es el tipo de cosas a las que me refiero.