Hallo Ich habe eine etwas speziellere Frage beim STM32L476RG Nucleo. Ich habe 2 differentielle Kanäle (insg. 4) wo ich einmal 20 Werte in einem Kanal konvertiere und und einmal 30 Werte im anderen Kanal. In welchem Register gebe ich denn an in welchem Kanal der ADC (es gibt bei mir nur einen ADC) jetzt konvertieren soll mit DMA? Das sehe ich nirgends. Kann jemand helfen?
:
Bearbeitet durch User
Ich versteh das einfach nicht, zB. steht hier beim stm32L431RC: im manual Select the ADC1_IN17 input channels (with the appropriate sampling time) Wie wähle ich das aus, sprich mit welchem Register? Wie kann ich denn wenn ich die Kanäle IN1, IN2 und IN11 und IN12 verwende sagen, dass nun der ADC im Kanal 1 Werte wandeln soll? Also geschieht das über das ADCx_SMPR1 bzw. ADCx_SMPR2 Register, wenn ich für den Kanal die sample time gewählt habe? Heisst das dann, dass ich die sample time nicht für alle Kanäle zugleich wählen darf?
:
Bearbeitet durch User
Das wissen nur die wenigen, die sich mit dem STM32L476RG Nucleo beschäftigt haben - also das Datenblatt zielgerichtet gelesen haben. Steck die Nase rein, dann gehörst du auch zu diesen Experten! Ja, da muss man manchmal vor- und zurückblättern, bis man es kapiert hat. Da gibt es keinen Abschnitt für GENAU DEIN PROBLEM. Gibt es so gut wie nie!
danke fuer deine Antwort. Und wo sind die Experten wo das wissen? Ich nehme an da bin ichnin diesem Forum sicher nicht falsch. ? Demfall bitte ich um Expertenrat. Ich habe mittlerweile 110 Seiten (ADC Kapitel) gelesen und bin immer noch micht schlauer wie man das jetzt macht..
D. I. schrieb: > Wie kann ich denn wenn ich die Kanäle IN1, IN2 und IN11 und IN12 > verwende sagen, dass nun der ADC im Kanal 1 Werte wandeln soll? Wenn du nur einen einzelnen Kanal, z.B. Kanal 1 wandeln willst, dann schreibst du in ADC_SQR1 in SQ1[4:0] ("1st conversion in regular sequence") deine Kanalnummer rein und setzt bzw. belässt L[3:0] ("Regular channel sequence length") auf 0 ("0000: 1 conversion"). Dann triggerst du den ADC, entweder durch Hardware (Timer TRGO oder CC, EXTI, usw) oder einfach durch Software indem du das ADSTART Bit im ADC_CR setzt. Dann kannst du im ADC_DR (nach erfolgter Konvertierung) deinen Wert auslesen. Vorher solltest du noch den ADC einschalten (ADEN in ADC_CR) und kalibrieren (ADCAL in ADC_CR) und natürlich den Prescaler für den ADC richtig konfigurieren (in RCC) und den Takt einschalten (in RCC). Wenn du nun vier Kanäle hintereinander wandeln willst, dann schreibst du die entsprechend im ADC_SQRx in SQ1, SQ2, SQ3 und SQ4 und setzt L entsprechend auf drei (für vier Wandlungen). Da du bei "regular sequence" pro ADC nur ein Datenregister für alle Kanäle hast, musst du die Daten jeweils nach erfolgter Konvertierung per DMA wegschaufeln. Bei den "injected channels" hast du scheinbar vier Datenregister und brauchst nicht zwingend DMA benutzen. Dort hat das "sequence register" auch nur vier Plätze, also für jeden Platz ein eigenes Register. Das habe ich aber selber auch noch nie ausprobiert, sieht aber komfortabler aus. Jakobus schrieb: > Ja, da muss man manchmal vor- und zurückblättern, bis man es > kapiert hat. Da wirst du wohl nicht drum herum kommen ;) D. I. schrieb: > Also geschieht das über das ADCx_SMPR1 bzw. ADCx_SMPR2 Register, wenn > ich für den Kanal die sample time gewählt habe? > Heisst das dann, dass ich die sample time nicht für alle Kanäle zugleich > wählen darf? Die sample time kannst du für jeden Kanal separat einstellen, hat aber nichts damit zu tun ob der Kanal nun gewandelt wird oder nicht (siehe oben).
:
Bearbeitet durch User
Vielen Dank Christopher. Das ist top erklaert?. Eine letzte Frage noch: Wenn alle Einstellungen gemacht wurden wie du erklaert hast und ich habe pro Kanal 20 Werte zum Konvertieren. ADC ist so eingestellt, dass dieser auf fallende Flanken reagiert zb. Das heisst beim Triggern kommen also 20 solcher flanken. Wann weiss der ADC dann, dass er nicht auf den naechsten Kanal darf, bevor alle 20 komvertiert wurden? vielen Dank
ziegler schrieb: > Wann weiss der ADC dann, dass er nicht auf den > naechsten Kanal darf, bevor alle 20 komvertiert wurden? Der ADC konvertiert sequentiell die Kanäle die du in die "regular/injected sequence register" reinschreibst. Bei "regular channels" sind das maximal 16 Stück und bei "injected channels" sind es vier. Du kannst also nicht 20 Konvertierungen in einer Sequenz durchlaufen lassen, d.h. du musst die Sequenz wiederholen. Willst du unbedingt erst 20 mal bei einem Kanal und dann 20 mal bei einem anderen Kanal konvertieren musst du (soweit ich es verstehe) zwischendurch den AD-Wandler anhalten, dein Sequenzregister umkonfigurieren und anschließend wieder neu starten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.