PWM mit dem Raspberry Pi erzeugen
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
PWM mit dem Raspberry Pi erzeugen
Hallo,
hat das schonmal jemand hinbekommen? Ich hab gestern den ganzen Tag versucht dem Raspberry Pi eine 30 Khz PWM zu entlocken. Es ist mir nicht gelungen.
hat das schonmal jemand hinbekommen? Ich hab gestern den ganzen Tag versucht dem Raspberry Pi eine 30 Khz PWM zu entlocken. Es ist mir nicht gelungen.
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: PWM mit dem Raspberry Pi erzeugen
Auf welchem Pin ?fliegermichl hat geschrieben: Ich hab gestern den ganzen Tag versucht dem Raspberry Pi eine 30 Khz PWM zu entlocken. Es ist mir nicht gelungen.
Mit welcher Chip-internen Hardware (per GPIO und Software wird es nicht sinnvoll funktionieren) ?
-Michael
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: PWM mit dem Raspberry Pi erzeugen
So wie ich das gelesen habe, gibt es nur einen PWM Pin. GPIO18 (Pin 12 am GPIO Adapter)
Wenn ich
schreibe (oder das über die virtuellen Dateien in /sys/class/gpio) in meinem Lazarusprogramm mache) kann ich den Pegel am Pin mit High und Low messen (bzw. sehe es am Oszilloskop)
aber keines der Beispiele die ich finden konnte hat mir eine funktionierende PWM generiert. PascalIO bekomme ich noch nicht mal compiliert.
Eigentlich wäre ein Arduino für meine Anwendung viel praktischer, den kann ich aber nicht per Wifi erreichen.
Wenn ich
Code: Alles auswählen
gpio mode 18 output
gpio write 18 1
gpio write 18 0
aber keines der Beispiele die ich finden konnte hat mir eine funktionierende PWM generiert. PascalIO bekomme ich noch nicht mal compiliert.
Eigentlich wäre ein Arduino für meine Anwendung viel praktischer, den kann ich aber nicht per Wifi erreichen.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: PWM mit dem Raspberry Pi erzeugen
Es gibt auch auch noch die ESP8266(Die sind W-Lan fähig) die deutlich mehr können als eine Arduino und viel Günstiger sind.Eigentlich wäre ein Arduino für meine Anwendung viel praktischer, den kann ich aber nicht per Wifi erreichen.
Außerdem gibt es da noch die Cortex M "Reihe".... davon habe ich bisher nur Gehört. Dort gibt es MCU'S die haben eingebauten funk auf 2,4 GHZ..... da hat man deutlich mehr Kontrolle als beim ESP8266....
Wenn du dir einen Zulegen möchtest, würde ich dir zu einem Wemos D1 mini raten., wie der Analoge Eingang ist, weiß ich nicht, ich weiß nur:
Es wird nur ein Pin rausgeführt und du musst dort mit der Spannung aufpassen.... Bei den NodeMCU'S ist es wohl noch kritischer als bei den Wemos D1 mini, obwohl sie beiden den ESP8266-12E Mod verwenden. Der beim Wemos D1 Mini kann bis 3,3 Volt am Eingang genutzt werden bei den NodeMCU's leider nur bis 1,1 Volt oder so...
Falls du noch mehr Leistung brauchst als der ESP8266 Zuverfügung stellt, da gibt es auch noch die ESP32. Die haben neben W-Lan auch noch Blauen Zahn... und sind noch mal um einiges schneller.
Edit: Hinweis, es gibt auch noch externe ADC Module die per SPI oder I2C Arbeiten die vielleicht auch mit dem PI Funktionieren.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: PWM mit dem Raspberry Pi erzeugen
Der Raspi sollte das auch für die meisten geräte ausreichend genau können. Zum einen kann man den PWM prozess eine hohe priorität geben, in kombination mit busy waiting (also nicht sleep verwenden sondern while (timeelapsed < timeToSwitch) do NOOP; ) und wenn das auch nicht reicht kann man ja einfach den interrupthandler für einen der Hardware timer des Raspis registrieren. Wenn ich mich richtig erinnere gibts ein Programm fürn raspi die genau das macht.fliegermichl hat geschrieben:So wie ich das gelesen habe, gibt es nur einen PWM Pin. GPIO18 (Pin 12 am GPIO Adapter)
Wenn ichschreibe (oder das über die virtuellen Dateien in /sys/class/gpio) in meinem Lazarusprogramm mache) kann ich den Pegel am Pin mit High und Low messen (bzw. sehe es am Oszilloskop)Code: Alles auswählen
gpio mode 18 output gpio write 18 1 gpio write 18 0
aber keines der Beispiele die ich finden konnte hat mir eine funktionierende PWM generiert. PascalIO bekomme ich noch nicht mal compiliert.
Eigentlich wäre ein Arduino für meine Anwendung viel praktischer, den kann ich aber nicht per Wifi erreichen.
Zum thema arduino (bzw. microcontroller, man muss sich ja nicht die teuren arduinos holen, ein billiger kompatibler elegoo oder direkt ein bare Atmega auf nem testbed tuts auch und kostet nur ein zehntel), da gibt es auch mehr optionen. pluto hat bereits den esp angesprochen, das ist aber keine avr architektur, wenn du also eine avr architektur möchtest (z.B. weil du bereits schon ne menge avr code rumfliegen hast) ist der nix für dich. Daher wird oft gerne ein esp für das wifi verwendet und ein avr für die programmlogik, und die kommunizieren dann über z.B. seriellen anschluss. da sowohl der avr als auch der esp jeweils <3€ kosten sollten ist das preislich auch kein großer mehraufwand.
Ich persönlich bin mehr ein freund von avrs, weil ich die mit Atmel Studio in C++ programmieren kann. Für den esp gibt es zwar auch einen C++ compiler, allerdings fehlen einem dann die ganzen features der IDE.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: PWM mit dem Raspberry Pi erzeugen
In der Regel ist der Arduino avr code aber durchaus mit dem ESP Kompatibel... Nur die Pins müssen Angepasst werden.(z.B. weil du bereits schon ne menge avr code rumfliegen hast) ist der nix für dich.
Es sei denn, du verwendest sehr oft ASM.
Das habe ich nur am Anfang vor ein paar Jahren mal gemacht. Das macht aber heute kaum noch jemand, weil die ESP den Arduino einfach überlegen ist. der ESP kann bis zu 160 mhz Arbeiten.Daher wird oft gerne ein esp für das wifi verwendet und ein avr für die programmlogik, und die kommunizieren dann über z.B. seriellen anschlus
In der Regel wird aber mit 80 mhz. gearbeitet. Es gibt 1 mb Flash Speicher... Da kann ein AVR nicht mithalten.
Und der ESP selbst ESP Boards kosten nur ein Bruchteil. Von einem Arduino.
Wer braucht schon eine IDE? Die Arduino IDE bezeichne ich nicht als IDE.... Weil es einfach nur ein Editor ist mit ein paar Extras.Für den esp gibt es zwar auch einen C++ compiler, allerdings fehlen einem dann die ganzen features der IDE.
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: PWM mit dem Raspberry Pi erzeugen
Das sollte sich mit einem Update behoben habenfliegermichl hat geschrieben:PascalIO bekomme ich noch nicht mal compiliert.

Für PWM sind dort (noch) keine Klassen enthalten; Soft-PWM sollte sich aber realisieren lassen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: PWM mit dem Raspberry Pi erzeugen
Ich benutze kein Arduino C++, sondern arbeite viel lieber auf dem bare metal mit dem avr-gcc. Und da unterscheiden sich ESP und avr-C doch schon mehr.pluto hat geschrieben:In der Regel ist der Arduino avr code aber durchaus mit dem ESP Kompatibel... Nur die Pins müssen Angepasst werden.
Es sei denn, du verwendest sehr oft ASM.
[...]
Wer braucht schon eine IDE? Die Arduino IDE bezeichne ich nicht als IDE.... Weil es einfach nur ein Editor ist mit ein paar Extras.
Und eine IDE kann grade wenn man richtig C++ verwendet (operatoren überladen, templates, Klassenvererbung, etc.) sehr viel hilfreicher sein da es schnell unübersichtlich werden kann, bzw. die IDE dir sachen sagt die du sonst nicht bemerkt hättest. Und mindestens die Autovervollständigung brauche ich (darum benutz ich sogar lieber vim als Arduino IDE, da vim selbst mit standard konfiguration viel mehr kann)
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: PWM mit dem Raspberry Pi erzeugen
Das Stimmt natürlich...Ich benutze kein Arduino C++, sondern arbeite viel lieber auf dem bare metal mit dem avr-gcc. Und da unterscheiden sich ESP und avr-C doch schon mehr.
Eben, darum bezeichne ich die Arduino IDE auch nicht als IDE.... sondern nur als Erweiterter Text Editor.Und eine IDE kann grade wenn man richtig C++ verwendet (operatoren überladen, templates, Klassenvererbung, etc.) sehr viel hilfreicher sein da es schnell unübersichtlich werden kann, bzw. die IDE dir sachen sagt die du sonst nicht bemerkt hättest.
Ja, aber wie lange hast du gebraucht um dich in vim einzuarbeiten?Und mindestens die Autovervollständigung brauche ich (darum benutz ich sogar lieber vim als Arduino IDE, da vim selbst mit standard konfiguration viel mehr kann)
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: PWM mit dem Raspberry Pi erzeugen
Es geht, ich kann vim lang nicht so gut wie ich es gerne könnte, aber es ist vor allem eine gewöhnungssache, es ist nicht mal so schlimm wie man meint. Solang man maus modus aktiviert und verstanden hat wie die verschiedenen modes funktioniert hat kann man in der grundkonfiguration (mit googlen) nach ein paar tagen schon die selbe funktionalität wie mit der Arduino IDE. kompliziert wirds erst wenn man sich plugins, die vim language und die ganzen profi tricks aneignen will. Dazu war ich bisher auch zu faul, ich kann praktisch nicht viel mehr als copy&paste, allgemeines navigieren, tabs und code vervollständigung, zusammen mit ein paar basic tmux commands ist das meine dritt liebste C(++) entwicklungsumgebung (direkt nach Visual Studio und XCode). Auf jeden fall besser (schneller, einfacher) als z.B. Eclipse oder Netbeans.pluto hat geschrieben:Ja, aber wie lange hast du gebraucht um dich in vim einzuarbeiten?
Da sieht man aber auch mal wie verwöhnt man mit Lazarus ist, ich kenn kaum eine IDE die kostenlos, open Source und so einfach in der benutzung wie Lazarus ist (während ich z.T. immernoch am projekt management von eclipse verzweifle)
Aber mal was anderes, kennst du dich mit der PIC architektur von microchip aus? von denen gibts ja auch einige uC's mit integriertem wifi. Persönlich hab ich die aber noch nie benutzt
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: PWM mit dem Raspberry Pi erzeugen
Nein, damit habe ich noch nie gearbeitet, aber ich kenne jemand der das schon öfter gemacht hat und von den soweit ich weiß nicht so begeistert waren.Aber mal was anderes, kennst du dich mit der PIC architektur von microchip aus? von denen gibts ja auch einige uC's mit integriertem wifi. Persönlich hab ich die aber noch nie benutzt
Was hast du vor? Musst du die nehmen? Im Verein(KTT) Arbeiten wir in der Regel mit den ESP8266 oder aber auch viel mit AVR einige z.b. auch direkt mit STM32, davon habe ich sogar auch schon einige Bords gekauft.
Interessant sind hier die gewaltigen unterscheide zu den AVR. Wobei die AVR'S gelten als veraltet und überteuert.
Bei den PIC weiß ich nur, dass der Einstieg noch schwer ist als beim STM32 und das die (meine ich) nicht so leicht programmiert werden können...
bei dem STM32 und den AVR's reicht ja z.b. ein einfacher Prorgammer wie der Nano oder ein andere STM32 völlig aus(soweit ich es bisher beurteilen kann).
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: PWM mit dem Raspberry Pi erzeugen
Das geht leider gar nicht !Warf hat geschrieben: in kombination mit busy waiting (also nicht sleep verwenden
Dauerndes Busy wait ist in einem Linux System ein absolutes NoGo: alles andere wird lahmgelegt, außer es hat eine höhere Priorität, und wenn anderes (z.B. das Betriebssystem

30 KHz PWM ist nur machbar, wenn man eine entsprechende Hardware (PWM-Timer-Ausgang) oder (wie bei einem BeagleBone) einen Coprozessor verwendet.
-Michael
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: PWM mit dem Raspberry Pi erzeugen
Ich wollte das schon mit Hardware machen lassen.
Man kann ja
Da gibt es auch keine Fehlermeldungen oder sowas aber auch keine pwm. Irgendwo scheint noch etwas zu fehlen.
Man kann ja
Code: Alles auswählen
gpio mode 18 pwm
gpio pwm 18 512
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: PWM mit dem Raspberry Pi erzeugen
Ich hab im Internet ein Python Script gefunden. Da wird die pwm anscheinend aber auch per Software gemacht.
Wenn ich eine Frequenz von 5KHz eingebe, dann zeigt mein Oszilloskop diese auch fast an. Wenn ich eine Frequenz von 30KHz eingebe, zeigt das Oszilloskop etwas zwischen 7,16 und 7,2 KHz an und die Prozessorlast geht deutlich hoch.
Ich habe aber irgendwo gelesen, daß am GPIO Pin 18 (Pin 12 auf der Steckerleiste) eine per Hardware generierte pwm ausgegeben werden kann.
Ich könnte natürlich zusätzlich noch einen AVR dazunehmen. Aber das ist verdammt viel Overkill um ein Garagentor auf und zu zu machen
Wenn ich eine Frequenz von 5KHz eingebe, dann zeigt mein Oszilloskop diese auch fast an. Wenn ich eine Frequenz von 30KHz eingebe, zeigt das Oszilloskop etwas zwischen 7,16 und 7,2 KHz an und die Prozessorlast geht deutlich hoch.
Ich habe aber irgendwo gelesen, daß am GPIO Pin 18 (Pin 12 auf der Steckerleiste) eine per Hardware generierte pwm ausgegeben werden kann.
Ich könnte natürlich zusätzlich noch einen AVR dazunehmen. Aber das ist verdammt viel Overkill um ein Garagentor auf und zu zu machen

-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: PWM mit dem Raspberry Pi erzeugen
Das heißt nicht, dass der Linux-Treiber tatsächlich Hardware verwendet. Er könnte es auch per Software simulieren. Für langsame Frequenzen (10 Hz oder so) wäre das auch OK. Du müsstest Dir die Dokumentation oder den C-Sourcecode des Treibers anschauen.fliegermichl hat geschrieben:Ich wollte das schon mit Hardware machen lassen.
Man kann jaDa gibt es auch keine Fehlermeldungen oder sowas aber auch keine pwm. Irgendwo scheint noch etwas zu fehlen.Code: Alles auswählen
gpio mode 18 pwm gpio pwm 18 512
-Michael