From ac80b32a5f4075baff9124b391fc51fabe777afc Mon Sep 17 00:00:00 2001 From: mstroh76 Date: Fri, 27 Sep 2024 18:01:36 +0200 Subject: [PATCH] #259 --- documentation/deutsch/functions.md | 90 +++++++++++++++----------------------- 1 file changed, 35 insertions(+), 55 deletions(-) diff --git a/documentation/deutsch/functions.md b/documentation/deutsch/functions.md index edea15d..c14553c 100644 --- a/documentation/deutsch/functions.md +++ b/documentation/deutsch/functions.md @@ -34,7 +34,7 @@ sudo apt purge wiringpi ## Pin-Nummerierung und Raspbery Pi Modelle -Pins: https://pinout.xyz/pinout/wiringpi +GPIOs: https://pinout.xyz/pinout/wiringpi **Raspberry Pi Modelle mit 40-Pin GPIO J8 Header:** @@ -101,8 +101,7 @@ Pins: https://pinout.xyz/pinout/wiringpi | | | GND | 25 I 26 | CE1 | 11 | 7 | -**Hinweise** - +**Hinweise** Beachten Sie die abweichende Pin-Nummern und den I2C0 bei Raspberry Pi 1B Rev. 1! @@ -194,22 +193,21 @@ void pinMode(int pin, int mode) pinMode(17, OUTPUT); ``` -**Support:** +**Support:** PM_OFF setzt den GPIO zurück (Input) und gibt ihn frei. PWM wird beendet. Raspberry Pi 5 unterstützt den PWM BAL (Balanced) Modus nicht. Bei PWM_OUTPUT wird der MS Modus aktiviert. GPIO_CLOCK wird bei Raspberry Pi 5 (RP1) aktuell noch nicht unterstützt. -** PWM Ausgang ** +**PWM Ausgang** PWM_OUTPUT aktiviert den angegeben PWM Ausgang mit den Einstellungen: - - Modus: Balanced (Pi0-4), MS (Pi 5) + - Modus: BAL-Balanced (Pi0-4), MS-Mark/Space (Pi 5) - Range: 1024 - - Clock: 32 + - Divider: 32 Um sicher zu stellen, dass der Ausgang ohne aktiver Frequenz startet, sollte man vor der Aktivierung ``pwmWrite(PWM_GPIO, 0);`` ausführen. Danach können die entsprechenden Clock und Range Werte angepasst werden, ohne das bereits ungewollt eine Frequenz ausgegeben wird. - ### pinMode @@ -281,11 +279,11 @@ if (value==HIGH) ``` -## Verwendung ISR +## Interrupts ### wiringPiISR -Registriert eine Interrupt Service Routine (ISR) die bei Flankenwechsel ausgeführt wird. +Registriert eine Interrupt Service Routine (ISR) bzw. Funktion die bei Flankenwechsel ausgeführt wird. >>> ```C @@ -293,13 +291,14 @@ int wiringPiISR(int pin, int mode, void (*function)(void)); ``` ``pin``: Der gewünschte Pin (BCM-, WiringPi- oder Pin-Nummer). -``mode``: Der Widerstand. -> INT_EDGE_RISING ... Steigende Flanke -> INT_EDGE_FALLING ... Fallende Flanke -> INT_EDGE_BOTH ... Steigende und fallende Flanke -> *function .. Funktionspointer für ISR +``mode``: Auslösende Flankenmodus + - INT_EDGE_RISING ... Steigende Flanke + - INT_EDGE_FALLING ... Fallende Flanke + - INT_EDGE_BOTH ... Steigende und fallende Flanke + +``*function``: Funktionspointer für ISR ``Rückgabewert``: -> 0 ... Erfolgreich + > 0 ... Erfolgreich Beispiel siehe wiringPiISRStop. @@ -339,24 +338,6 @@ int main (void) { } ``` -**Beispiel:** - -```C -static volatile int edgeCounter; - -static void isr(void) { - edgeCounter++; -} - -int main (void) { - wiringPiSetupPinType(WPI_PIN_BCM); - edgeCounter = 0; - wiringPiISR (17, INT_EDGE_RISING, &isr); - Sleep(1000); - wiringPiISRStop(17); - printf("%d rinsing edges\n", edgeCounter) -} -``` ### waitForInterrupt @@ -368,16 +349,16 @@ int waitForInterrupt (int pin, int mS) ``` ``pin``: Der gewünschte Pin (BCM-, WiringPi- oder Pin-Nummer). -``mS``: Timeout in Milisekunden. +``mS``: Timeout in Milisekunden. ``Rückgabewert``: Fehler > 0 ... Erfolgreich > -1 ... GPIO Device Chip nicht erfolgreich geöffnet > -2 ... ISR wurde nicht registriert (wiringPiISR muss aufgerufen werden) -## PWM (Pulsweitenmodulation) +## Hardware PWM (Pulsweitenmodulation) -Verfügbare pins: https://pinout.xyz/pinout/pwm +Verfügbare GPIOs: https://pinout.xyz/pinout/pwm ### pwmWrite @@ -393,51 +374,51 @@ pwmWrite(int pin, int value) ### pwmSetRange -Setzt den Bereich für den PWM-Wert. Haupt eine Auswirkung auf die PWM Frequenz. -Gilt für alle PWM Pins und PWM Kanäle. +Setzt den Bereich für den PWM-Wert für alle PWM Pins bzw. PWM Kanäle. +Für die Berechnung der PWM Frequenz (M/S Mode) gilt 19200/divisor/range. +Bei Befehl ``pinMode(pin,PWM_OUTPUT)`` wird automatisch der Wert 1024 für den Teiler gesetzt. >>> ```C pwmSetRange (unsigned int range) ``` -``pin``: Der gewünschte Pin (BCM-, WiringPi- oder Pin-Nummer). ``range``: PWM Range ### pwmSetMode -Setzt den PWM Modus auf +Setzt den PWM Modus für alle PWM Pins bzw. PWM Kanäle. >>> ```C pwmSetMode(int mode); ``` -``mode``: Teiler (0-4095) -> PWM_MODE_MS ... Mark/Space Modus (PWM Frequenz fix) -> PWM_MODE_BAL ... Balanced Modus (PWM Frequenz variabel) +``mode``: PWM Modus + - PWM_MODE_MS ... Mark/Space Modus (PWM Frequenz fix) + - PWM_MODE_BAL ... Balanced Modus (PWM Frequenz variabel) -**Support:** +**Support:** Raspberry Pi 5 unterstützt den Balanced Modus nicht! ### pwmSetClock -Setzt den Teiler für den PWM Basistakt. Der Basistakt ist für alle Raspberry Pis auf 1900 kHz normiert. -Der Raspberry Pi 4 max divisor is 1456, - +Setzt den Teiler für den PWM Basistakt. Der Basistakt ist für alle Raspberry Pis auf 1900 kHz normiert. +Für die Berechnung der PWM Frequenz (M/S Mode) gilt 19200/divisor/range. +Bei Befehl ``pinMode(pin,PWM_OUTPUT)`` wird automatisch der Wert 32 für den Teiler gesetzt. >>> ```C pwmSetClock(int divisor) ``` -``divisor``: Teiler (Raspberry Pi 4: 0-4095, alle anderen 0-4095) -> 0 ... Deaktivert den PWM Takt bei Raspberry Pi 5, bei anderen Pi's wird divisor 1 benutzt +``divisor``: Teiler (Raspberry Pi 4: 1-1456, alle anderen 1-4095) +- 0 ... Deaktivert den PWM Takt bei Raspberry Pi 5, bei anderen Pi's wird divisor 1 benutzt -**Support:** -Der Raspberry Pi 4 hat aufgrund seines höheren internen Basistakt nur einen Einstellbereich von 0-1456. -Ansonsten gilt 1-4095 für einen gültigen Teiler. +**Support:** +Der Raspberry Pi 4 hat aufgrund seines höheren internen Basistakt nur einen Einstellbereich von 1-1456. +Ansonsten gilt 0-4095 für einen gültigen Teiler. **Beispiel:** @@ -453,7 +434,6 @@ int main (void) { double freq = 19200.0/(double)pwmc/(double)pwmr; printf("PWM 50%% @ %g kHz", freq); delay(250); - pinMode(18, PM_OFF); } -``` \ No newline at end of file +```