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
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
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
Sebastian R. schrieb: > Püh. Ich weiß gar nicht, wo ich anfangen soll. Püh. Mein Trolldetektor und mein ChatGPT-Detektor machen Radau.
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...
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.
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; |
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.
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
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"
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
Als faktische Ergänzung zu Ihrem Quellcode: Ist es notwendig eine so mächtige "Uhr" hier zu integrieren in den Quellcode?
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!
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 :)
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.
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…
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!
FREITAG!!!! ...ist der ADC im Troll-Modus...
So, na dann, der Quellcode funktioniert bei mir auch nicht - Aber ich sehe noch Defizite, ich mache am Montag erst einmal eine Weiterbildung.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.