Raspberry Pi als Taktgeber

OP #4257062
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?
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.
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
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.
OP
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.
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
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
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.
OP
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?
Gast
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.