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