Forum: Mikrocontroller und Digitale Elektronik ADC einschalten..welche Reihenfolge?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Paul (Gast)


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
}

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Paul schrieb:
> while (SDADC1_ISR.B3 = 1)
Du solltest dein C-Buch mal auf den Unterschied zwischen = und == 
befragen.

Paul schrieb:
> Er führt nicht mal die While Schleife aus
Wie stellst du das fest? Er müsste die Schleife eigentlich dauernd 
ausführen...

: Bearbeitet durch Moderator
von Frank (Gast)


Lesenswert?

1
while (SDADC1_ISR.B3 = 1)
2
{
3
  ADC_regular = 99;//SDADC1_RDATAR;
4
}

Dreh mal die Bedingung um, dann fällt dir vllt was auf.

von Paul (Gast)


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)

von Paul (Gast)


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...

von Frank (Gast)


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.

von Paul (Gast)


Lesenswert?

ok, habe ich ja jetzt geändert in
while (REOCF_bit == 0); also mit == REOCF_bit ist das gleiche

von Paul (Gast)


Lesenswert?

da er offenbar nie auf 0 umspringt startet die Conversion offenbar gar 
nicht :-(

von Eric B. (beric)


Lesenswert?

Wird die Funktion adc_read() überhaupt aufgerufen? Wenn ja, wie und wo?
Vielleicht springt dein uP schon vorher in reset...

von Paul (Gast)


Lesenswert?

doch das geht, wenn ich die While Schleife rausnehme, zeigt er 99
wenn ich bei
ADC_regular = 99;

schreibe

von Paul (Gast)


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
}

von Paul (Gast)


Lesenswert?

niemand eine Idee?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.