Ich möchte mit dem folgenden Testprogramm den analogen Eingang PA4 lesen. Problem: Der ADC liefert mir auf allen Kanälen immer Werte von 88-91, egal welche Spannung ich anlege. Nur bei den beiden internen Kanäle (12 und 13) liefert der ADC plausible Werte. Vref+ liegt bei meinem gekauften Board auf 3,3 Volt. Aber irgendwas fehlt noch. Erkennt jemand den Fehler?
Ich habe nochmal einen Gegentest gemacht: Das prinzipiell gleiche Programm funktioniert auf einem STM32G431 Board vom selben Hersteller erfolgreich.
Poste mal deinen Schaltplan und den vom Hersteller. Eventuell hat dein Board eine kalte Lötstelle? Oder defekter DK?
GPIO und Clock init, V-ref Buffer... Default als analog reicht nicht, der Pin hängt noch auf digital und daher bekommst du irgendwas um ~80-90 angezeigt. RCC_AHB2ENR_GPIOAEN und GPIOA->MODER =0b11 vor init_analog. VREFBUF->CSR_ENVR = 1 in der init.
Alexander W. schrieb: > Poste mal deinen Schaltplan und den vom Hersteller. Gibts leider nicht. Das PDF ist defekt. > Eventuell hat dein Board eine kalte Lötstelle? Oder defekter DK? Irgendwas in der Art befürchte ich auch. Spielt der Vref- Pin eine Rolle?
Link zum kaputten Schaltplan: https://github.com/WeActStudio/WeActStudio.STM32C5_100Pin_CoreBoard/blob/master/Doc/stm32c552ve.pdf Kilo S. schrieb: > Default als analog reicht nicht, der Pin hängt noch auf digital und > daher bekommst du irgendwas um ~80-90 angezeigt. Ich habe PA4 auf analoge Eingabe konfiguriert - denke ich. Was siehst du dort, was ich nicht sehe?Habe das auch mit PA3 und PA5 versucht. Bekomme trotzdem auf allen 12 Kanälen den selben Wert. Nur die internen Kanäle 12 und 13 funktionieren. > VREFBUF->CSR_ENVR = 1 in der init. Danke, das versuche ich heute Abend.
:
Bearbeitet durch User
Mal mit STM32 MX Cube gearbeitet? Der Code-Generator hat mich nur selten enttäuscht, fast immer kommt da etwas Brauchbares bei raus. Vlt. mal 15min investieren und vergleichen (oder gleich direkt nutzen)
Nemopuk schrieb: > Link zum kaputten Schaltplan: Link zum Original (ist auch 2 Revisionen neuer): https://www.st.com/resource/en/datasheet/stm32c551cc.pdf https://www.st.com/resource/en/reference_manual/rm0522-stm32c5-series-armbased-32bit-mcus-stmicroelectronics.pdf
:
Bearbeitet durch User
Das gab's früher nicht (RM0522):
1 | 21.4.11 Channel preselection register (ADC_PCSEL) |
2 | The PCSEL bit of the ADC_PCSEL register controls the analog switch |
3 | integrated in the I/O. For each channel selected through SQRx or JSQRx |
4 | bits, the corresponding PCSEL bit must be configured in advance in the |
5 | ADC_PCSEL register. The ADC input multiplexer selects the ADC input |
6 | according to SQRx and JSQRx configuration with very high speed. |
7 | The analog switch integrated in the I/O cannot react as fast as the |
8 | ADC multiplexer. To avoid the delay due to the analog switch control |
9 | on the I/O, it is necessary to preselect the input channels that are |
10 | selected through the SQRx and JSQRx. The selection is based on the VIN |
11 | of each ADC input. For example, if the ADC converts ADCx_IN1, PCSEL1 bit |
12 | must also be set in ADC_PCSEL register. |
13 | Note: Configuring the PCSEL bit is not necessary for the internal |
14 | channels (such as VREFINT). |
Nemopuk schrieb: > Was siehst du dort, was ich nicht sehe? Der Pin war noch Digital statt Analog GPIOA->MODER hat pro Pin 2 Bits: - 00 = Input - 01 = Output - 10 = Alternate Function - 11 = Analog Nach Reset ist PA4 zwar oft 00 = Input. Das Problem: Im Digital-Input ist der Schmitt-Trigger + Pullup/Pulldown + ESD-Dioden aktiv. Erst mit MODER = 0b11 wird die komplette Digital-Logik abgeschaltet. Dann geht der Pin direkt auf den ADC-Multiplexer. Die GPIO-Clock war zu spät an RCC->AHB2ENR_GPIOAEN muss an sein bevor du GPIOA->MODER schreibst. Ich hab bisher gelernt das man immer so vorgeht:Clock an -> Pin konfigurieren -> Peripherie starten.
Kilo S. schrieb: > VREFBUF->CSR_ENVR = 1 in der init. Gibt's bei diesem Modell nicht. Kilo S. schrieb: > Der Pin war noch Digital statt Analog > Die GPIO-Clock war zu spät an Wie meist du das, war das bei dir mal der Knackpunkt? Die Punkte sind bei mir beide in Ordnung. Harald A. schrieb: > Mal mit STM32 MX Cube gearbeitet? Ja, das hilft mir aber nicht dabei, diese Grundlagen zu lernen. Und glaube mir, ich habe viele Stunden lang versucht, durch dessen ADC Implementierung durch zu blicken. Allerdings wäre ich notfalls darauf zurück gekommen, um wenigstens die Hardware defekt ist. Mit Arduino wäre es noch einfacher gewesen, aber Arduino unterstützt die C5 Serie noch nicht. Bauform B. schrieb: > Link zum Original (ist auch 2 Revisionen neuer) Datenblatt und Reference Manual habe ich gefunden. Der Schaltplan von dem Board fehlt. Bauform B. schrieb: > Das gab's früher nicht (RM0522) > 21.4.11 Channel preselection register (ADC_PCSEL) Du bist ein Schatz! Das war der Knackpunkt. Ich hatte also wirklich etwas übersehen. Damit ging es dann sofort:
1 | // Pre-Select all 14 input channels
|
2 | STM32_MODIFY_REG(ADC1->PCSEL, ADC_PCSEL_PCSEL, 0b0011111111111111); |
Vielen lieben Dank!
Nemopuk schrieb: > Wie meist du das, war das bei dir mal der Knackpunkt? Ja, lange Geschichte kurz gehalten, ich hatte häufiger Probleme mit sowas. Wenn die Reihenfolge nicht gepasst hat, gab es häufig Schluckauf.
https://github.com/WeActStudio/WeActStudio.STM32C5_100Pin_CoreBoard/blob/master/Hardware/WeAct-STM32C5xxVxTxCoreBoard_V10%20SchDoc.pdf Der Schaltplan ist doch da …
Nemopuk schrieb: > > Ja, das hilft mir aber nicht dabei, diese Grundlagen zu lernen. Der reine Vergleich des eigenen Ansatzes mit einer funktionierenden Lösung hilft nicht beim Lernen? Da kommt ja kein kryptischer Binärblob raus sondern Zeile für Zeile wie bei Dir.
Harald A. schrieb: > Da kommt ja kein kryptischer Binärblob raus sondern Zeile für Zeile wie > bei Dir. Leider nicht. Ich habe bisher öfters von der HAL abgeguckt, aber in diesem Fall ist es mir nicht gelungen, den stark verschachtelten Code zu durchblicken.
Uwe G. schrieb: > Der Schaltplan ist doch da … Kannst du ihn für in ein anderes Format konvertieren? Ich kann die Datei nämlich nicht öffnen.
Nemopuk schrieb: > Uwe G. schrieb: >> Der Schaltplan ist doch da … > > Kannst du ihn für in ein anderes Format konvertieren? Ich kann die Datei > nämlich nicht öffnen. Das ist ein stinknormales PDF. Warum kannst du das nicht öffnen? PDF-Viewer gibts doch auf so ziemlich jedem System, sogar aufm Smartphone.
Thorsten S. schrieb: > Das ist ein stinknormales PDF. Warum kannst du das nicht öffnen? Weil ich eine HTML (aber mit Endung PDF) erhalte, wenn ich sie herunterlade. Auch die eingebettete Ansicht in der Webseite funktioniert bei mir nicht, sowohl auf dem PC als auch Smartphone. Auf der Arbeit geht es auch nicht. Aber du hast mich auf eine Idee gebracht: Meine Frau konnte den Schaltplan mit ihrem Windows Laptop herunter laden. Sie hat ein png erhalten, kein PDF.
:
Bearbeitet durch User
Nemopuk schrieb: > Auf der Arbeit geht es auch nicht. Ein Trick wäre, das ganze Archiv herunterzuladen und dort aus dem *.zip die gewünschte *.pdf zu extrahieren. Dazu muss man halt zurück auf die Projektebene des GIT Archivs gehen um dort herunterzuladen.
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.
