ADC einschalten..welche Reihenfolge?

Gast #4709224
Lesenswert?

Hallo,
ich bekomme den ADC vom STM32F373 nicht zum laufen..
Muss ein der globale Interrupt eingeschaltet sein oder sowas oder stimmt 
die Reihenfolge nicht?
Er führt nicht mal die While Schleife aus, das Ergebnis ist immer 0 
statt 99
1
void adc_read_(int n){
2
ADC_CR2.B0 = 1;     //SIgma Delta ADC einschalten
3
SDADC1_CR1.B31 = 1; // Init ADC1
4
ADC_CR2.B0 = 1;     //SIgma Delta ADC einschalten
5
delay_ms(10);
6
ADC_CR2.B0 = 0;     //SIgma Delta ADC ausschalten
7
delay_ms(10);  // 100 Microsekunden Stabilisierung
8
SDADC1_CR2.B19=0;
9
SDADC1_CR2.B18=0;
10
SDADC1_CR2.B17=0;
11
SDADC1_CR2.B16=0;  //Wähle Kanal 1 von SDADC 1
12
SDADC1_CONF0R.B27 = 0; // set  26/26 auf 0 / 1 für single ended mode
13
SDADC1_CONF0R.B26 = 1; // set  26/26 auf 0 / 1 für single ended mode
14
// auf 11 setzten für Single endes Zero mode negativ ist dann auf GND
15
SDADC1_CR1.B17 = 1;
16
SDADC1_CR1.B31 = 0; // Init ADC1
17
SDADC1_CR1.B17 = 1;
18
delay_ms(10);
19
ADC_CR2.B0 = 1;     //SIgma Delta ADC einschalten
20
delay_ms(10);  // 100 Microsekunden Stabilisierung
21
SDADC1_ISR.B3=1;
22
SDADC1_CR2.B23=1; //Starte ADC Wandlung
23
while (SDADC1_ISR.B3 = 1) {
24
ADC_regular = 99;//SDADC1_RDATAR;
25
 }
26
}
Gast #4709247
Lesenswert?

Wieso fühlt man sich in diesem Forum eigentlich immer wie bei jeopardy?

Ok, a
slo müßte es wohl richtig heiteßn
while (SDADC1_ISR.B3 == 1) anstelle von while (SDADC1_ISR.B3 = 1)

Habe ich korrigiert..es kommt dennoch 0....

@Frank
Du meinst
while (SDADC1_ISR.B3 != 1)

Dann bleibt das Dispaly leer, hängt also in der While Schlefie 
fest..vermutlich(C Anfänger)
Gast #4709261
Lesenswert?

1
void adc_read_(int n){
2
ADC_CR2.B0 = 1;     //SIgma Delta ADC einschalten
3
SDADC1_CR1.B31 = 1; // Init ADC1
4
SDADC1_CR1.B10=1;
5
ADC_CR2.B0 = 1;     //SIgma Delta ADC einschalten
6
SDADC1_CR2.B23=1; //Starte ADC Wandlung
7
delay_ms(10);
8
SDADC1_CR2.B22=1; //CONTINOUS rEADING
9
delay_ms(10);  // 100 Microsekunden Stabilisierung
10
SDADC1_CR2.B19=0;
11
SDADC1_CR2.B18=0;
12
SDADC1_CR2.B17=0;
13
SDADC1_CR2.B16=0;  //Wähle Kanal 1 von SDADC 1
14
SDADC1_CONF0R.B27 = 0; // set  26/26 auf 0 / 1 für single ended mode
15
SDADC1_CONF0R.B26 = 1; // set  26/26 auf 0 / 1 für single ended mode
16
// auf 11 setzten für Single endes Zero mode negativ ist dann auf GND
17
SDADC1_CR1.B17 = 1;
18
SDADC1_CR1.B31 = 0; // Init ADC1
19
SDADC1_CR1.B17 = 1;
20
delay_ms(10);
21
ADC_CR2.B0 = 1;     //SIgma Delta ADC einschalten
22
delay_ms(10);  // 100 Microsekunden Stabilisierung
23
SDADC1_CR2.B23=1; //Starte ADC Wandlung
24
while (REOCF_bit == 0);
25
ADC_regular = SDADC1_RDATAR;
26

27
}
so gehts auch nach wie vor nicht...
Gast #4709268
Lesenswert?

Paul schrieb:
> Du meinst
> while (SDADC1_ISR.B3 != 1)
> Dann bleibt das Dispaly leer, hängt also in der While Schlefie
> fest..vermutlich(C Anfänger)

Das ist negieren.
Nein, ich meine so
1
while (1=SDADC1_ISR.B3)
2
{}

Dann würdest du vom Compiler hingewiesen werden dass da was nicht 
stimmen kann.
Gast #4709830
Lesenswert?

so gehts auch nicht :-(
1
void adc_init_16Bit(int n){
2
  ADON_bit =0; // ADC on/off
3
 SDAD1EN_bit =1;
4
INIT_SDADC1_CR1_bit = 1; // Init ADC1
5
delay_ms(10);
6
   SDADC1_CR2  = 0b00001100000000000000000000000001;
7

8
 //RCONT_bit =1; // use continius measurement
9
 //ADC1_CR1  := %00000000000000000000000000000000;
10
 REOCIE_bit=0;
11
 INIT_SDADC1_CR1_bit = 0; // Init ADC1
12
ADON_bit =1; // ADC on/off
13
}

1
int adc_read_16Bit(int n){
2
/*SDADC1_CR2.B19=0;
3
SDADC1_CR2.B18=0;
4
SDADC1_CR2.B17=0;
5
SDADC1_CR2.B16=0;  //Wähle Kanal 1 von SDADC 1 */
6
delay_ms(1);  // 100 Microsekunden Stabilisierung
7
RSWSTART_bit=1; //Starte ADC Wandlung
8
while (REOCF_bit == 0);
9
delay_ms(5);
10
adc16bit = SDADC1_RDATAR;
11
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren