Moin,
Mein ADC vom dsPIC30F4011 kommt nicht über 0,5MSPS, für meine Anwendung
benötige ich aber rund 1MSPS.
Bin duzende Datenblätter durch, habe die Mikrochip Referenzen
durchforstet usw..
"alle" möglichen Einstellungen probiert und bekomme die fu** 1MSPS nicht
hin.
Daten:
1 | //AVDD=4.25V+
|
2 | //AVSS=GND
|
3 | //sAN0: VREF+=5V+
|
4 | //sAN1: VREF-=GND
|
5 | //sAN3: Analog
|
6 |
|
7 | ADPCFG = 0b1111111111110000; //-------(8)(7)(6)(5)(4)(3)(2)(1)(0)
|
8 | ADCON1 = 0b0000000011100100; //ADON(0)-ADSIDL(0)---FORM(00):SSRC(111)-SIMSAM:ASAM:SAMP:DONE
|
9 | ADCHS = 0b0000000000100011; //CH123NB(00):CH123SB(0):CH0NB(0):CH0SB(000):CH123NA(00):CH123SA(1):CH0NA(0):CH0SA(0000)
|
10 | ADCSSL = 0x00;
|
11 | ADCON3 = 0b0000001000000100; // ---SAMC(00010):ADRC(0)-ADCS(000100)
|
12 | ADCON2 = 0b0110000100111100; // VCFG(011)--CSCNA(0):CHPS(01):BUFS(0)-SMPI(1111):BUFM(0):ALTS(0)
|
13 | ...
|
14 |
|
15 |
|
16 | adc_on=1;
|
17 | ADIE=0;
|
18 | ADIF=0;
|
19 |
|
20 | void adc_read() {
|
21 | while(!ADIF);
|
22 | while(!adc_done);
|
23 |
|
24 | puffer[0]=adbuff0;
|
25 | ...
|
26 | puffer[15]=adbuff15;
|
27 |
|
28 | for(i=0; i<16; i++) {
|
29 | printf("adc%u : %lu \n\r",i,puffer[i]);
|
30 | }
|
31 | }
|
1 | Ausgabe:
|
2 |
|
3 | adc0 : 956 // Richtiger wert von CH0
|
4 | adc1 : 354 // Falscher wert von CH1
|
5 | adc2 : 955
|
6 | adc2 : 354
|
7 | adc4 : 955
|
8 | adc5 : 345
|
9 | adc6 : 959
|
10 | ...
|
Mit dem Oszi schaut das Sampling auf 1MSPS einiger maßen gescheit aus..
aber das Ergebnis im Puffer ist Müll.. (Bild==Anhang)
Wäre über jeden Tipp/Rat/Lößung sher dankbar...
lg