PIC MCU: dos entradas de ADC ayudan

1

Por lo tanto, actualmente estoy jugando con el ADC en mi PIC16F917. Tengo funciones de un solo botón y todo funciona bien.

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

¿Cómo puedo modificar este código para hacerlo cuando, digamos, AN1 se va > 512, PORTDbits.RD1 va 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;
        }
    }
}
    
pregunta ezra_vdj

1 respuesta

2

Con este PIC, la verdadera simultaneidad no es posible, ya que solo hay una muestra y retención y un convertidor. Si es lo suficientemente bueno, entonces el ajuste de su código para simplemente cambiar entre las 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 tal como el dsPIC33FJ128GP802 . O, por supuesto, podría agregar un ADC externo.

    
respondido por el Oli Glaser

Lea otras preguntas en las etiquetas