Forum: Mikrocontroller und Digitale Elektronik STM32F411CEU + Thermoelement - Erster Versuch eines Datenauslesens -


von Timbo2023 (timbo2023)


Lesenswert?

Hallo,



Software:
STM32CubeIDE unter Linux.


Hardware:
Thermoelement, Typ K an PA12 von STM32.


Aufgabe:
Möchte über PA12 Signal von Thermoelement aufnehmen.


Ausschnitt des Quellcodes der main.c:
...

    GPIO_InitTypeDef GPIO_InitStructure;

    SystemInit();

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    dataByte = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12);
    while (1){
    printf("Daten: %d\n", dataByte);
    delay(1000);}
...


Randinformationen:
Ich bin Anfänger, ich sitze an Tag 2 vor meinem neuen STM32F411 und 
wollte ein Signal "schnell und unsauber" über PA12 aufnehmen.

Wo liege ich hier falsch in meinen Programm-Annahmen?



Mit besten Grüßen
timbo

von Sebastian R. (sebastian_r569)


Lesenswert?

Timbo2023 schrieb:
> Wo liege ich hier falsch in meinen Programm-Annahmen?

Püh. Ich weiß gar nicht, wo ich anfangen soll.

1. Ist das kein Pin, der die Möglichkeit hat, analoge Signale einzulesen
2. Liest du den Pin digital ein. Also mehr als 0 oder 1 kommt da nicht 
raus
3. Thermoelemente liefern eine sehr, sehr kleine Spannung, da brauchst 
du vermutlich ein bisschen analoges Frontend, bevor etwas Verwertbares 
bei herauskommt.

Ich denke, du solltest noch ein paar Schritte in Sachen Grundlagen 
zurück gehen, bevor du dich um dein Thermoelement kümmerst.

Es gibt dann auch entsprechende ICs, die "Thermoelement auf I2C" machen. 
Inkl. Kaltstellenkompensation und Linearisierung.

: Bearbeitet durch User
von Timbo2023 (timbo2023)


Lesenswert?

Dankeschön Herr S. R. erst einmal für die "kurze" Grundlagenvermittlung 
und den verweis verständlicherweise wieder einmal darauf.


(1) Absolute Annahme - Nehmen wir PA10 einmal an, als korrigierende 
Veränderung
(2) Verstehe ich bedingt
(3) Sehe ich eigentlich nicht so, oder könnten Sie das kurz genauer 
erläutern, was Sie mit der englischen Bezeichnung "Frontend" meinen?


Kennen Sie hierzu eine Quellenangabe für die Grundlagenvermittlung und 
den grundsätzlichen Kompetenzaufbau für meine Person?


ABER:
Ihre letzten beiden Kurzsätze machen Lust auf mehr -
könnten Sie dahingehend auch noch kurz ergänzend werden?


Ihr
timbo2023

von Wastl (hartundweichware)


Lesenswert?

Sebastian R. schrieb:
> Püh. Ich weiß gar nicht, wo ich anfangen soll.

Püh. Mein Trolldetektor und mein ChatGPT-Detektor machen Radau.

von Timbo2023 (timbo2023)


Lesenswert?

ChatGPT soll ja mittlerweile sogar Schimpfwörter und Anzüglichkeiten 
filtern können.

Wir haben damals Grundlagenforshcung betrieben als Anekdote dazu, wo 
einmal geheime Regierungsdaten falsch "rausgegangen" sind.

Ist bisher nur bedingt zu empfehlen...

von Sebastian R. (sebastian_r569)


Lesenswert?

Timbo2023 schrieb:
> (1) Absolute Annahme - Nehmen wir PA10 einmal an, als korrigierende
> Veränderung

Ändert nichts. Auch dieser Pin hängt nicht am ADC.

Timbo2023 schrieb:
> (3) Sehe ich eigentlich nicht so, oder könnten Sie das kurz genauer
> erläutern, was Sie mit der englischen Bezeichnung "Frontend" meinen?

Verstärker. Bei Raumtemperatur kommt aus einem Typ K ~800µV. Bei 100°C 
sind es 4.1mV - Die kannst du schlichtweg nicht mit deinem Controller 
direkt messen.

Timbo2023 schrieb:
> Kennen Sie hierzu eine Quellenangabe für die Grundlagenvermittlung

http://stefanfrings.de/stm32/stm32f3.html#analog

Timbo2023 schrieb:
> und
> den grundsätzlichen Kompetenzaufbau für meine Person?

Wenn du seit zwei Tagen versuchst, ein Thermoelement an einem digitalen 
Pin einzulesen, kann ich mir deinen Kompetenzaufbau einigermaßen denken.

Timbo2023 schrieb:
> könnten Sie dahingehend auch noch kurz ergänzend werden?

Kann ich nicht - Bzw. will ich nicht. Aber Google kann.

von Sebastian R. (sebastian_r569)


Angehängte Dateien:

Lesenswert?

Wastl schrieb:
> mein ChatGPT-Detektor machen Radau.

Um ehrlich zu sein, erledigt ChatGPT keine schlechte Arbeit...
1
#include "stm32f4xx_hal.h"
2
3
ADC_HandleTypeDef hadc1;
4
5
void SystemClock_Config(void);
6
static void MX_GPIO_Init(void);
7
static void MX_ADC1_Init(void);
8
9
int main(void)
10
{
11
  HAL_Init();
12
  SystemClock_Config();
13
  MX_GPIO_Init();
14
  MX_ADC1_Init();
15
16
  uint32_t adc_value = 0;
17
18
  while (1)
19
  {
20
    // Start ADC conversion
21
    HAL_ADC_Start(&hadc1);
22
23
    // Wait for conversion to complete
24
    if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK)
25
    {
26
      // Read ADC value
27
      adc_value = HAL_ADC_GetValue(&hadc1);
28
    }
29
30
    // Stop ADC conversion
31
    HAL_ADC_Stop(&hadc1);
32
33
    // Convert ADC value to voltage
34
    float voltage = (3.3f * adc_value) / 4096; // Assuming 3.3V reference voltage and 12-bit resolution (4096 levels)
35
36
    // TODO: Do something with the voltage value (e.g., output it via UART or display on an LCD)
37
38
    HAL_Delay(1000); // Delay for 1 second
39
  }
40
}
41
42
void SystemClock_Config(void)
43
{
44
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
45
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
46
47
  /** Configure the main internal regulator output voltage 
48
  */
49
  __HAL_RCC_PWR_CLK_ENABLE();
50
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
51
  /** Initializes the CPU, AHB and APB busses clocks 
52
  */
53
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
54
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
55
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
56
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
57
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
58
  {
59
    Error_Handler();
60
  }
61
  /** Initializes the CPU, AHB and APB busses clocks 
62
  */
63
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
64
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
65
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
66
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
67
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
68
69
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
70
  {
71
    Error_Handler();
72
  }
73
}
74
75
static void MX_ADC1_Init(void)
76
{
77
  ADC_ChannelConfTypeDef sConfig = {0};
78
79
  /* Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) */
80
  hadc1.Instance = ADC1;
81
  hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
82
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
83
  hadc1.Init.ScanConvMode = DISABLE;
84
  hadc1.Init.ContinuousConvMode = DISABLE;
85
  hadc1.Init.DiscontinuousConvMode = DISABLE;
86
  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
87
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;

von Wastl (hartundweichware)


Angehängte Dateien:

Lesenswert?

Sebastian R. schrieb:
> Um ehrlich zu sein, erledigt ChatGPT keine schlechte Arbeit...

Um ehrlich zu sein scheinst du - trotz deiner langen Zugehörigkeit
zum Forum - noch nicht in der Lage zu sein zu erkennen was ein
"Längerer Sourcecode" ist und was man damit vernünftigerweise und
höflicherweise tut. Oder du bist schlichtweg beratungsresistent.

von Sebastian R. (sebastian_r569)


Lesenswert?

Wastl schrieb:
> Oder du bist schlichtweg beratungsresistent.

Das wird es wohl sein.

Wastl schrieb:
> noch nicht in der Lage zu sein zu erkennen was ein
> "Längerer Sourcecode" ist

Ab wie vielen Zeilen ist der Sourcecode denn "länger"? Wo ist da die 
Grenze? Erleuchte mich bitte mit deiner Weisheit!

: Bearbeitet durch User
von Rahul D. (rahul)


Lesenswert?

Sebastian R. schrieb:
> Um ehrlich zu sein, erledigt ChatGPT keine schlechte Arbeit...

Schließende Klammern kann ich auch ChatGPT vergessen... ;)

@TO: Einfach mal hier spicken:
Beitrag "Thermoelement Typ K, LM335, OpAmp"

von Timbo2023 (timbo2023)


Lesenswert?

Moin meine Herrschaften,


trotz launischer Antworten, erst einmal Dank.

zu (1)
Welcher PIN "hängt" den Ihres Erachtens am "ADC", wie Sie das 
bezeichnen?
zu (2)
Ich werde es dennoch ohne Verstärker versuchen.

In Ergänzung werde ich ersteinmal Ihre Quellenangabe prüfen, die ich 
aufgrund von Namensnennungen erst einmal kritisch bewerte, jedoch 
inhaltlich scheint es lern-orientiert zu sein.
Bin nach wie vor offen für weitere Quellen.

Ich werde zudem einmal den längeren Quellcode versuchen, auch wenn ich 
hier noch nicht weiß, wie ich den genau einbinden soll.


Angenehmen Tag Ihnen beiden


Als Randbemerkung:
Mit ChatGPT habe ich auch nix zu tun, aber selbst staatliche 
Grundlagenforschung dahingehend, ging nach eigenen Erfahrungen beinahe 
Richtung "Knast".
Ich kann Ihnen Dinger zu der hinterlegten Technologie erzählen, danach 
glauben Sie gar nix mehr...

: Bearbeitet durch User
von Timbo2023 (timbo2023)


Lesenswert?

Als faktische Ergänzung zu Ihrem Quellcode:

Ist es notwendig eine so mächtige "Uhr" hier zu integrieren in den 
Quellcode?

von Sebastian R. (sebastian_r569)


Lesenswert?

Timbo2023 schrieb:
> zu (1)
> Welcher PIN "hängt" den Ihres Erachtens am "ADC", wie Sie das
> bezeichnen?

Alle die, die im Datenblatt als alternative Funktion entsprechend 
gekennzeichnet sind.

Timbo2023 schrieb:
> zu (2)
> Ich werde es dennoch ohne Verstärker versuchen.

Bitte. Und viel Erfolg dabei. 1.21V interne Referenzspannung, 12bit. 
Macht 1.2mv/Digit. Damit kannst du immerhin in 33°C-Schritten auflösen. 
Das wird super!

Timbo2023 schrieb:
> In Ergänzung werde ich ersteinmal Ihre Quellenangabe prüfen, die ich
> aufgrund von Namensnennungen erst einmal kritisch bewerte, jedoch
> inhaltlich scheint es lern-orientiert zu sein.

Prüf so viel du magst. Stefan ist auch hier im Forum vertreten.

Timbo2023 schrieb:
> auch wenn ich
> hier noch nicht weiß, wie ich den genau einbinden soll.

Du schaffst das schon!

von Sebastian R. (sebastian_r569)


Lesenswert?

Timbo2023 schrieb:
> Ist es notwendig eine so mächtige "Uhr" hier zu integrieren in den
> Quellcode?

Wer es schafft, ein Thermoelement mit einem digitalen Pin auszulesen, 
der schafft es auch, den ADC ohne Clock laufen zu lassen :)

von Rahul D. (rahul)


Lesenswert?

Sebastian R. schrieb:
> Wer es schafft, ein Thermoelement mit einem digitalen Pin auszulesen,
> der schafft es auch, den ADC ohne Clock laufen zu lassen :)

Wenn man die Temperatur als Frequenz vorliegen hat, könnte das was 
werden.

von Norbert (der_norbert)


Lesenswert?

Sebastian R. schrieb:
> 1.21V interne Referenzspannung, 12bit.
> Macht 1.2mv/Digit.

Hmmm. Ich komm' da auf 295µV.
Nicht das es ihm bei dem Wissensstand etwas nützen würde…

von Sebastian R. (sebastian_r569)


Lesenswert?

Norbert schrieb:
> Hmmm. Ich komm' da auf 295µV.
> Nicht das es ihm bei dem Wissensstand etwas nützen würde…

Stimmt. Ich hatte mit 10bit gerechnet. Mea Culpa!

von Thomas T. (runout)


Lesenswert?

FREITAG!!!!

...ist der ADC im Troll-Modus...

von Timbo2023 (timbo2023)


Lesenswert?

So, na dann, der Quellcode funktioniert bei mir auch nicht -

Aber ich sehe noch Defizite, ich mache am Montag erst einmal eine 
Weiterbildung.

von Sebastian R. (sebastian_r569)


Lesenswert?

Timbo2023 schrieb:
> So, na dann, der Quellcode funktioniert bei mir auch nicht

Das ist wenig überraschend. Immerhin wird mit dem ADC-Wert nichts 
gemacht. Und vielleicht hast du dein Thermoelement ja auch nicht an den 
richtigen Pin angeschlossen. Und vielleicht klappt das so direkt auch 
einfach nicht.

Timbo2023 schrieb:
> Aber ich sehe noch Defizite, ich mache am Montag erst einmal eine
> Weiterbildung.

Gute Idee!

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
Noch kein Account? Hier anmelden.