mikrocontroller.net

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


Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
void adc_read_(int n){
ADC_CR2.B0 = 1;     //SIgma Delta ADC einschalten
SDADC1_CR1.B31 = 1; // Init ADC1
ADC_CR2.B0 = 1;     //SIgma Delta ADC einschalten
delay_ms(10);
ADC_CR2.B0 = 0;     //SIgma Delta ADC ausschalten
delay_ms(10);  // 100 Microsekunden Stabilisierung
SDADC1_CR2.B19=0;
SDADC1_CR2.B18=0;
SDADC1_CR2.B17=0;
SDADC1_CR2.B16=0;  //Wähle Kanal 1 von SDADC 1
SDADC1_CONF0R.B27 = 0; // set  26/26 auf 0 / 1 für single ended mode
SDADC1_CONF0R.B26 = 1; // set  26/26 auf 0 / 1 für single ended mode
// auf 11 setzten für Single endes Zero mode negativ ist dann auf GND
SDADC1_CR1.B17 = 1;
SDADC1_CR1.B31 = 0; // Init ADC1
SDADC1_CR1.B17 = 1;
delay_ms(10);
ADC_CR2.B0 = 1;     //SIgma Delta ADC einschalten
delay_ms(10);  // 100 Microsekunden Stabilisierung
SDADC1_ISR.B3=1;
SDADC1_CR2.B23=1; //Starte ADC Wandlung
while (SDADC1_ISR.B3 = 1) {
ADC_regular = 99;//SDADC1_RDATAR;
 }
}

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
while (SDADC1_ISR.B3 = 1)
{
  ADC_regular = 99;//SDADC1_RDATAR;
}

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

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void adc_read_(int n){
ADC_CR2.B0 = 1;     //SIgma Delta ADC einschalten
SDADC1_CR1.B31 = 1; // Init ADC1
SDADC1_CR1.B10=1;
ADC_CR2.B0 = 1;     //SIgma Delta ADC einschalten
SDADC1_CR2.B23=1; //Starte ADC Wandlung
delay_ms(10);
SDADC1_CR2.B22=1; //CONTINOUS rEADING
delay_ms(10);  // 100 Microsekunden Stabilisierung
SDADC1_CR2.B19=0;
SDADC1_CR2.B18=0;
SDADC1_CR2.B17=0;
SDADC1_CR2.B16=0;  //Wähle Kanal 1 von SDADC 1
SDADC1_CONF0R.B27 = 0; // set  26/26 auf 0 / 1 für single ended mode
SDADC1_CONF0R.B26 = 1; // set  26/26 auf 0 / 1 für single ended mode
// auf 11 setzten für Single endes Zero mode negativ ist dann auf GND
SDADC1_CR1.B17 = 1;
SDADC1_CR1.B31 = 0; // Init ADC1
SDADC1_CR1.B17 = 1;
delay_ms(10);
ADC_CR2.B0 = 1;     //SIgma Delta ADC einschalten
delay_ms(10);  // 100 Microsekunden Stabilisierung
SDADC1_CR2.B23=1; //Starte ADC Wandlung
while (REOCF_bit == 0);
ADC_regular = SDADC1_RDATAR;

}
so gehts auch nach wie vor nicht...

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
while (1=SDADC1_ISR.B3)
{}

Dann würdest du vom Compiler hingewiesen werden dass da was nicht 
stimmen kann.

Autor: Paul (Gast)
Datum:

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

Autor: Paul (Gast)
Datum:

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

Autor: Eric B. (beric)
Datum:

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

Autor: Paul (Gast)
Datum:

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

schreibe

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so gehts auch nicht :-(
void adc_init_16Bit(int n){
  ADON_bit =0; // ADC on/off
 SDAD1EN_bit =1;
INIT_SDADC1_CR1_bit = 1; // Init ADC1
delay_ms(10);
   SDADC1_CR2  = 0b00001100000000000000000000000001;

 //RCONT_bit =1; // use continius measurement
 //ADC1_CR1  := %00000000000000000000000000000000;
 REOCIE_bit=0;
 INIT_SDADC1_CR1_bit = 0; // Init ADC1
ADON_bit =1; // ADC on/off
}

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

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.