Ich weiss nicht, in welches Forum dies reingehört, im Elektronikforum
sind mehr Leute als im DS Forum, und es hat ja auch nix mit DS zu tun:
Ich möchte eine Serie aufeinanderfolgender manueller Conversions
durchführen, und nach jeder Conversion zwischen MUXA und MUXB wechseln.
Init Code ist wie folgt:
1 | void ADC_Init(void)
|
2 | {
|
3 | ADCON1bits.ADON = 0; // Turn ADC OFF
|
4 |
|
5 | ADPCFG = 0b1111111111110000; // AN0-AN3 configured as analog input
|
6 |
|
7 | ADCON1bits.FORM = 0b00; // integer form
|
8 | ADCON1bits.SAMP = 0; // Set sampling off at begin
|
9 | ADCON1bits.SSRC = 0b111; // clock based convert
|
10 | ADCON1bits.ASAM = 0; // no auto sampling
|
11 |
|
12 | ADCON2bits.VCFG = 0b111; // Reference AVdd, AVss
|
13 | ADCON2bits.CSCNA = 0; // No input scan
|
14 | ADCON2bits.SMPI = 0; // Interrupt every conversion
|
15 | ADCON2bits.BUFM = 0; // one 16 bit buffer
|
16 | ADCON2bits.ALTS = 1; // alternate MUXA/B sampling
|
17 |
|
18 | ADCHSbits.CH0NA = 0; // Vref- as negative reference
|
19 | ADCHSbits.CH0SA = 2; // MUXA = AN2
|
20 | ADCHSbits.CH0NB = 0; // Vref- as negative reference
|
21 | ADCHSbits.CH0SB = 0; // MUXB = AN0
|
22 |
|
23 | // TCY = 10MHZ * 4 / 4 = 10MHZ
|
24 | ADCON3bits.ADCS = 9; // Tad = (ADCS+1) * TCY/2
|
25 | ADCON3bits.SAMC = 2; // 2 Tad autosample time
|
26 | // 16 Tad cycles per channel = 8µs
|
27 |
|
28 | ADCON1bits.ADON = 1; // Turn ADC ON
|
29 |
|
30 |
|
31 |
|
32 |
|
33 | ADCInterrupt_Init();
|
34 |
|
35 |
|
36 | }
|
37 |
|
38 |
|
39 |
|
40 | void ADCInterrupt_Init(void)
|
41 | {
|
42 | IFS0bits.ADIF = 0; // clear the U2RXIF interrupt flag
|
43 | IPC2bits.ADIP = 6; // set ADC priority to 6
|
44 | IEC0bits.ADIE = 1; // enable ADC Interrupt Service Routine
|
45 | }
|
Leider sieht es so aus, als ob nur MUXA verwendet würde, jedenfalls
bekomme ich nur Messwerte von AN2, und keine von AN0. Beschaltung ist
richtig.
Konversionen starte ich mit ADCON1bits.SAMP = 1;
Wieso geht das nicht ???
Wieso geht ausserdem
ADCON2bits.SMPI = 1;
nicht? Hier sollte doch, wie beim Wert SMPI=0 jede Konversion zu einem
IR führen, oder? Leider passiert dies aber nur einmal (beim ersten mal),
dann nie mehr!
**** dsPIC-BUG ???