Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi als Taktgeber


von Marcel B. (marcel_b401)


Lesenswert?

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 Frank (Gast)


Lesenswert?

Von was für Frequenzen sprechen wir denn?
Prinzipiell wird das nämlich durch das OS immer bitter geben!

von Max H. (hartl192)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ 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.

von Max H. (hartl192)


Lesenswert?

Oder du machst Rechteck-DDS mit mehreren Phasenakkumulatoren und 
Ausgängen parallel.

: Bearbeitet durch User
von Marcel B. (marcel_b401)


Lesenswert?

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.

von Frank (Gast)


Lesenswert?

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!

von Daniel B. (dbuergin)


Lesenswert?

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.

von MarcVonWindscooting (Gast)


Lesenswert?

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.

von Rolf M. (rmagnus)


Lesenswert?

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.

von Marcel B. (marcel_b401)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ 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.

von Frank (Gast)


Lesenswert?

Oder einen PIC18F67J60 mit integriertem MAC & PHY.

von Marcel B. (marcel_b401)


Lesenswert?

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?

von holger (Gast)


Lesenswert?

>Kann man einen Atmel mit Bascom als I2C Slave betreiben?

Hier muss man jetzt tatsächlich mal fragen ob dein
google kaputt ist?

von Joe F. (easylife)


Lesenswert?

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.

von Joachim B. (jar)


Lesenswert?

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
von Frank (Gast)


Lesenswert?

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

von Fpgakuechle K. (Gast)


Lesenswert?

Hatte mal angefangen Material über Hardwarenahe RasPi-Prog 
zusammenzutragen:
https://www.mikrocontroller.net/articles/Hardwarenahe_Programmierung_am_Raspberry_Pi

von jobo (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Marcel B. (marcel_b401)


Lesenswert?

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?

von Frank (Gast)


Lesenswert?

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.

von Marcel B. (marcel_b401)


Lesenswert?

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?

von Frank (Gast)


Lesenswert?

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.

von Jens .. (eltronno)


Lesenswert?

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

von Marcel B. (marcel_b401)


Lesenswert?

Ich werde nochmal bzgl. des Si5351b suchen und schauen, was draus wird 
und mich dann wieder melden.

von Frank (Gast)


Lesenswert?

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.

von Marcel B. (marcel_b401)


Lesenswert?

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.

von Jucka (Gast)


Lesenswert?


von Peter D. (peda)


Lesenswert?

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
Noch kein Account? Hier anmelden.