Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
#include <p33fj16gp304.h>
_FBS(0xFFFF);
_FGS(0x0007);
_FOSCSEL(0x0003);
_FOSC(0x00E1);
_FWDT(0x0000);
_FPOR(0x00F0);
_FICD(0x00C1);
void delay (void)
{ T3CONbits.TON = 1;
while (!_T3IF);
}// end sub
void main (void)
{ TRISAbits.TRISA0 = 1;
TRISAbits.TRISA1 = 1;
TRISCbits.TRISC0 = 1;
TRISB = 0;
T3CON = 0x8030;
PR3 = 12500;
//ADC Configuration:
AD1CON1bits.AD12B = 0; //10-bit
AD1CON2bits.CHPS = 1; //CH0 and CH1
AD1CON2bits.VCFG = 0; //AVDD-AVSS
AD1CON3bits.ADCS = 2; //ADCS = 2, TAD = 75n
AD1CON1bits.FORM1 = 0; //integer
AD1CON1bits.SSRC = 7; //auto convert
AD1PCFGL = 0xFFFC; //CH0, CH1
AD1CON1bits.SIMSAM = 1; //Simultaneous scanning
AD1CON2bits.ALTS = 0; //Dont' alternate between MuxA and MuxB
AD1CHS0bits.CH0NA = 0; //AVss
AD1CHS0bits.CH0NB = 0; //AVss
AD1CHS0bits.CH0SA = 6; //For Ch0, MuxA, AN6
AD1CHS123bits.CH123NA = 0; //VREF-
AD1CHS123bits.CH123NB = 0; //VREF-
AD1CON1bits.ADON = 1; //Start ADC Module
//done with ADC config
while (1)
{ AD1CON1bits.SAMP = 1;
while (!AD1CON1bits.DONE);
LATB = ADC1BUF0 >> 2;
delay;
LATB = ADC1BUF1 >> 2;
delay;
}//wend
}//end.
program multisampleADC
dim ADCValue as word
main:
AD1PCFG = $0000 ' All channels are Analog
AD1CSSL = $FFFF ' Scan all channels
AD1CHS = $0000 ' Start with AN0 (dont matter coz o' samplin)
AD1CON1 = $00E0
'====================================================================='
' bit 15: ADON = 0; ADC Module off to allow write to all other registers; recommended in datasheet
' bit 14: Unimplemented
' bit 13: ADSIDL = 0; Stop in idle mode
' bit 12: Unimplemented
' bit 11: Unimplemented
' bit 10: Unimplemented
' bit 9: Form1 = 0; For decimal value
' bit 8: Form0 = 0; For decimal value
' bit 7: SSRC2 = 1; For autoconvert
' bit 6: SSRC1 = 1; For autoconvert
' bit 5: SSRC0 = 1; For autoconvert
' bit 4: Unimplemented
' bit 3: Unimplemented
' bit 2: ASAM = 0; Autosample off
' bit 1: SAMP = 0;
' bit 0: DONE = 0;
'====================================================================='
AD1CON2 = $043C
'====================================================================='
' bit 15: VCFG2 = 0; For Vr+ = Vdd, Vr- = Vss
' bit 14: VCFG1 = 0; For Vr+ = Vdd, Vr- = Vss
' bit 13: VCFG0 = 0; For Vr+ = Vdd, Vr- = Vss
' bit 12: Reserved
' bit 11: Unimplemented
' bit 10: CSCNA = 1; Scan inputs
' bit 9: Unimplemented
' bit 8: Unimplemented
' bit 7: BUFS = 0
' bit 6: Unimplemented
' bit 5: SMPI3 = 1; Interrupt after conversion of all channels (16th sample)
' bit 4: SMPI2 = 1; Interrupt after conversion of all channels (16th sample)
' bit 3: SMPI1 = 1; Interrupt after conversion of all channels (16th sample)
' bit 2: SMPI0 = 1; Interrupt after conversion of all channels (16th sample)
' bit 1: BUFM = 0; Buffer configured as 16bit register
' bit 0: ALTS = 0; Always use MUXA
'====================================================================='
AD1CON3 = $0C02
'====================================================================='
' bit 15: ADRC = 0; Clock derived from System Clock
' bit 14: Unimplemented
' bit 13: Unimplemented
' bit 12: SAMC4 = 0; Set for 12Tad
' bit 11: SAMC3 = 1; Set for 12Tad
' bit 10: SAMC2 = 1; Set for 12Tad
' bit 9: SAMC1 = 0; Set for 12Tad
' bit 8: SAMC0 = 0; Set for 12Tad
' bit 7: ADCS7 = 0; Set for 2Tcy
' bit 6: ADCS6 = 0; Set for 2Tcy
' bit 5: ADCS5 = 0; Set for 2Tcy
' bit 4: ADCS4 = 0; Set for 2Tcy
' bit 3: ADCS3 = 0; Set for 2Tcy
' bit 2: ADCS2 = 0; Set for 2Tcy
' bit 1: ADCS1 = 0; Set for 2Tcy
' bit 0: ADCS0 = 1; Set for 2Tcy
'====================================================================='
TRISA = $FF00
TRISB = $FFFF
TRISD = $0000
AD1CON1.15 = 1 'Start ADC [AD1CON1.15 = AD1CON1.ADON]
while TRUE
AD1CON1.1 = 1 'Start Sampling
while (AD1CON1.0 = 0)
if (AD1CON1.1 = 0) then
AD1CON1.2 = 1 'Sampling has started and first sampling is done so start autosampling
end if
wend
ADCValue = ADC1BUF0 >> 2
PORTA = ADCVALUE
delay_ms(500)
LATA = 0
LATD = 0
LATD.0 = 1
ADCValue = ADC1BUF1 >> 2
PORTA = ADCVALUE
delay_ms(500)
LATA = 0
PORTD = 1
LATD.1 = 1
ADCValue = ADC1BUF2 >> 2
PORTA = ADCVALUE
delay_ms(500)
LATD = 0
LATD.2 = 1
ADCValue = ADC1BUF3 >> 2
PORTA = ADCVALUE
delay_ms(500)
LATA = 0
LATD = 0
LATD.3 = 1
ADCValue = ADC1BUF4 >> 2
PORTA = ADCVALUE
delay_ms(500)
LATA = 0
LATD = 0
LATD.4 = 1
ADCValue = ADC1BUF5 >> 2
PORTA = ADCVALUE
delay_ms(500)
LATA = 0
LATD = 0
LATD.5 = 1
ADCValue = ADC1BUF6 >> 2
PORTA = ADCVALUE
delay_ms(500)
LATA = 0
LATD = 0
LATD.6 = 1
ADCValue = ADC1BUF7 >> 2
PORTA = ADCVALUE
delay_ms(500)
LATA = 0
LATD = 0
LATD.7 = 1
ADCValue = ADC1BUF8 >> 2
PORTA = ADCVALUE
delay_ms(500)
LATA = 0
LATD = 0
LATD.8 = 1
ADCValue = ADC1BUF9 >> 2
PORTA = ADCVALUE
delay_ms(500)
LATA = 0
LATD = 0
LATD.9 = 1
ADCValue = ADC1BUFA >> 2
PORTA = ADCVALUE
delay_ms(500)
LATA = 0
LATD = 0
LATD.10 = 1
ADCValue = ADC1BUFB >> 2
PORTA = ADCVALUE
delay_ms(500)
LATA = 0
LATD = 0
LATD.11 = 1
ADCValue = ADC1BUFC >> 2
PORTA = ADCVALUE
delay_ms(500)
LATA = 0
LATD = 0
LATD.12 = 1
ADCValue = ADC1BUFD >> 2
PORTA = ADCVALUE
delay_ms(500)
LATA = 0
LATD = 0
LATD.13 = 1
ADCValue = ADC1BUFE >> 2
PORTA = ADCVALUE
delay_ms(500)
LATD = 0
LATD.14 = 1
ADCValue = ADC1BUFF >> 2
PORTA = ADCVALUE
delay_ms(500)
LATA = 0
LATD = 0
LATD.15 = 1
wend
end.