Raspberry Pi als Taktgeber

OP #4257062
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?
#4257087
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.
#4257093
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.
#4257158
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.
Gast #4257245
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.
#4257279
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.
OP #4258081
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.
#4258095
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.
#4258174
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.
OP #4258379
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?
Gast #4258384
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.
Gast #4258411
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren