Hallo Ich möchte über einen Raspberry Pi über die GPIOs 4 verschiedene Takte ausgeben. Die Frequenz für jeden einzelnen Takt bekommt der Pi übers Netzwerk. Da habe ich mir gedacht, lighttpd zu installieren. Nun frage ich mich, wie man das am besten mit Python und/oder PHP umsetzt. Die Frequenzen sollen ja auch stimmen. So habe ich es mir gedacht: Die einzelnen Frequenzen werden in je eine Datei gespeichert. Beim Booten wird ein Python-Skript gestartet, dass die ganze Zeit läuft. Das ruft in einer Endlosschleife immer wieder die Dateien auf und setzt sleep()s. Hier kommt aber das Problem, dass ein sleep eines Taktes ja auch die anderen verzögert... Irgendwie muss das ja parallel ablaufen. Aber wie?
Von was für Frequenzen sprechen wir denn? Prinzipiell wird das nämlich durch das OS immer bitter geben!
Da dir das OS das Timing kaputt macht, denk ich wird das eher nichts, wenn's genau bzw. schnell werden soll. Schau dir mal folgendes Bespiel an:
1 | Endlosschleife: |
2 | Sleep(25ms) |
3 | Pin1 = 0, Pin2 = 0 |
4 | |
5 | Sleep(25ms) |
6 | Pin1 = 1, Pin2 = 0 |
7 | |
8 | Sleep(25ms) |
9 | Pin1 = 0, Pin2 = 1 |
10 | |
11 | Sleep(25ms) |
12 | Pin1 = 1, Pin2 = 1 |
Das würde an Pin2 10Hz und an Pin1 20Hz erzeigen. Wenn du die Periode in genügend Teile teilst, kannst du viele Frequenzen gleichzeitig erzeugen.
@ Marcel Beyer (marcel_b401) >Ich möchte über einen Raspberry Pi über die GPIOs 4 verschiedene Takte >ausgeben. Die Frequenz für jeden einzelnen Takt bekommt der Pi übers >Netzwerk. In welchem Bereich sollen die Frequenzen liegen? Viel mehr als ein paar Dutzend Hz wird man nicht hinkriegen, sonderlich GENAU wird es auch nicht sein, wenn man nicht tiefer und direkt einen Timer nutzen kann. > Da habe ich mir gedacht, lighttpd zu installieren. >Nun frage ich mich, wie man das am besten mit Python und/oder PHP >umsetzt. Die Frequenzen sollen ja auch stimmen. Und dafür braucht es eine 32 Bit SoC mit 1GB RAM und GPU ;-) Nobel geht die Welt zu grunde.
Oder du machst Rechteck-DDS mit mehreren Phasenakkumulatoren und Ausgängen parallel.
:
Bearbeitet durch User
Erstmal vielen Dank für die schnellen Antworten. Wie kann man denn auf dem pi direkt einen timer nutzen? Bringt Python das mit? Ich werde mir morgen auch noch ein paar Gedanken zu den anderen Ideen machen.
Marcel B. schrieb: > Wie kann man denn auf dem pi direkt einen timer nutzen? Indem man ihn z.B. Bare Metal programmiert. Marcel B. schrieb: > Bringt Python das mit? Nope, Skriptsprache!
Nimm einen BeagleBone Black und lies Dich in die "PRU" Programmierung ein. Der AM335x Prozessor (Cortex-A8) hat zwei interne 32bit CPUs, welche mit 200Mhz unabhängig von der Haupt-CPU laufen. http://www.element14.com/community/community/designcenter/single-board-computers/next-gen_beaglebone/blog/2013/05/22/bbb--working-with-the-pru-icssprussv2 Damit kannst Du völlig unabhängig vom Linux mit den GPIO's wackeln, PWM generieren usw.
Falk B. schrieb: > Und dafür braucht es eine 32 Bit SoC mit 1GB RAM und GPU ;-) > Nobel geht die Welt zu grunde. Wieviel Leistungsaufnahme? 1W? 2W? Da koennte man doch glatt 'nen 33k Widerstand direkt an gleichgerichteter Netzspannung + Z-Diode (12V) + NE555 (bipolar) betreiben, haette das Netzteil 'gespart' und waerte trotzdem aehnlich 'gut' im Wirkungsgrad ;-) >> Silizium-Punk << ?? Ich bin ein (passiver) Fan von 'Steampunk'. Da bauen Leute aus mechanischen Bauteilen wie Federn, Zahnraedern, Druckmessuhren, usw. mit viel Muehe und Liebe zum Detail Kunstwerke (Zeitmaschinen, Waffen,...) zusammen, die natuerlich nahezu nichts wirklich tun ausser z.T. wirklich toll auszusehen. Warum fiel mir das an dieser Stelle hier bloss wieder ein? Und ich hatte schon Gewissensbisse, dass ich fuer eine 40 000 Lumen / 300W LED-Lampe 6 Stueck (sechs!!) LPC812 als Buck-Controller (aehnlich AL9910) einsetzte, wo JEDER einzelne womoeglich 5mA Strom verschwendet.
MarcVonWindscooting schrieb: > Falk B. schrieb: >> Und dafür braucht es eine 32 Bit SoC mit 1GB RAM und GPU ;-) >> Nobel geht die Welt zu grunde. > > Wieviel Leistungsaufnahme? 1W? 2W? > Da koennte man doch glatt 'nen 33k Widerstand direkt an > gleichgerichteter Netzspannung + Z-Diode (12V) + NE555 (bipolar) > betreiben, haette das Netzteil 'gespart' und waerte trotzdem aehnlich > 'gut' im Wirkungsgrad ;-) Jetzt mußt du nur noch deinem NE555 irgendwie beibringen, seine Schwingfrequenz über http entgegenzunehmen.
Ich habe jetzt auch selber noch mal überlegt. Das ganze über das System zu lösen ist also nicht so ideal. Aber das müsste doch funktionieren: Den Pi über I2C mit einem Atmel verbinden, der dann den Takt generiert. Der Takt vom Atmel sollte ja exakt sein, wenn er selbst ordentlich getaktet ist.
@ Marcel Beyer (marcel_b401) >Das ganze über das System zu lösen ist also nicht so ideal. >Aber das müsste doch funktionieren: Den Pi über I2C mit einem Atmel >verbinden, der dann den Takt generiert. Warum nicht gleich einen kleinen AVR mit TCP/IP Stack. Dort kann man deutlich leichter einen Timer mit einbauen.
Das hatte ich vergessen: der Pi ist mit dem Netzwerk per WLAN verbunden. Da WLAN unbedingt benötigt wird, fällt der PIC18F67J60 raus... Kann man einen Atmel mit Bascom als I2C Slave betreiben?
>Kann man einen Atmel mit Bascom als I2C Slave betreiben?
Hier muss man jetzt tatsächlich mal fragen ob dein
google kaputt ist?
Kannst du mal die paar essentiellen Details nennen: - Frequenzbereich - und gewünschte Genauigkeit des Timings Es macht einen gewaltigen Unterscheid, ob es um einen Dreiviertel-Takt bei 120 bpm oder eine 100 KHz PWM geht.
Marcel B. schrieb: > Das hatte ich vergessen: der Pi ist mit dem Netzwerk per WLAN verbunden. > Da WLAN unbedingt benötigt wird, fällt der PIC18F67J60 raus... > Kann man einen Atmel mit Bascom als I2C Slave betreiben? Arduino nano 328p .............................2,50€ + ein 3,3V low drop Regler mit Steuerpin KIA 78R 33 PI VReg 3,3V 1A LDO TO220i-4 ISO 4Pin w/ON-OFF Vdr0,5V .....................0,60€ und einem ESP8266 ca. .........................2,-€ I2C Slave ja, Bascom kein Plan. ESP8266 mit tools auf 9600 Bd umstellen andere Firmware und am Arduino einen soft UART installieren.
:
Bearbeitet durch User
I2C oder SPI Port Expander? Die gibt's mit einstellbarer PWM und Frequenz. Oft für LEDs gedacht, kann man aber auch so nehmen. Oder darf es etwas schneller sein?https://www.silabs.com/Support%20Documents/TechnicalDocs/Si5351-B.pdf
Hatte mal angefangen Material über Hardwarenahe RasPi-Prog zusammenzutragen: https://www.mikrocontroller.net/articles/Hardwarenahe_Programmierung_am_Raspberry_Pi
Wie wär's mit "p=GPIO.PWM(18,50);p.start(0) Und dann für jeden gpio ein extra Befehl. Im Bild ist ein ganzes Programm zum pwm für led zu erzeugen. Oder habe ich da was falsch verstanden?
jobo schrieb: > Wie wär's mit "p=GPIO.PWM(18,50);p.start(0) > Und dann für jeden gpio ein extra Befehl. > Im Bild ist ein ganzes Programm zum pwm für led zu erzeugen. Oder habe > ich da was falsch verstanden? Der Pi hatte doch weniger als 4 PWM-fähige Pins, oder? Und wie genau wird das ganze (wenn es überhaupt mit 4 Ausgängen geht) bei 4 erzeugten Schwingungen?
jobo schrieb: > Wie wär's mit "p=GPIO.PWM(18,50);p.start(0) > Und dann für jeden gpio ein extra Befehl. > Im Bild ist ein ganzes Programm zum pwm für led zu erzeugen. Oder habe > ich da was falsch verstanden? Dann mach damit mal eine PWM mit nur 100kHz und schau dir zusätzlich noch den Jitter des Taktes an. Für ne LED mit 100Hz kann man so gut wie alles nehmen und der Jitter ist ihr auch egal. Deshalb haben ja auch schon mehrere Leute nach Frequenz und Jitteranforderungen gefragt.
Jitter sollte am Besten keiner sein. Die Frequenz wird auch recht hoch, da Motoren damit angesteuert werden. Ist Si5351b ein Port-Expander, dem man eine Frequenz übergeben kann, die er dann generiert? Ich finde so gut wie nichts zu dem Teil. Wenn ja, wie läuft die Ansteuerung ab?
Marcel B. schrieb: > Jitter sollte am Besten keiner sein. Die Frequenz wird auch recht hoch, > da Motoren damit angesteuert werden. Naja, bei Motoren wird es wahrscheinlich kaum mehr als 8-16kHz werden. Marcel B. schrieb: > Ist Si5351b ein Port-Expander, dem man eine Frequenz übergeben kann, die > er dann generiert? Prinzipiell ja, aber der Einsatzzweck ist eher ein anderer als in deinem Fall. Marcel B. schrieb: > Ich finde so gut wie nichts zu dem Teil. Was heißt da du findest nichts? Ich hab dir das Datenblatt angehängt. Eine Suche bei Tante G liefert auch noch Beispielcode von Adafruit für Arduinos. Was willst du mehr? Ich denke entweder du versuchst es Direkt mit dem Raspi oder mit einem beschriebenen Portexpander.
Marcel B. schrieb: > Jitter sollte am Besten keiner sein. Die Frequenz wird auch recht > hoch, > da Motoren damit angesteuert werden. Kein Jitter? Dann nimm am besten einen Rubidium Oszillator :-) Also Du musst mal anfangen konkrete Werte zu nennen, welche Deine Anwendung erfordert. Gruß, Jens
Ich werde nochmal bzgl. des Si5351b suchen und schauen, was draus wird und mich dann wieder melden.
Marcel B. schrieb: > Ich werde nochmal bzgl. des Si5351b suchen und schauen, was draus > wird und mich dann wieder melden. Wie gesagt, für Motoren ungeeignet.
Frank schrieb: > Wie gesagt, für Motoren ungeeignet. Da die Motoren 4 Spulen haben, kommt ein Schieberegister dazwischen. Da müsste er doch, so wie ich es verstanden habe, funktionieren.
Man nehme irgendeine Programmiersprache, die direkte IO-Zugriffe kann. Und dann lese man ganz einfach im Datenblatt der CPU nach, wie man einen der PWM-Ausgänge konfiguriert und mache das.
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.