Hallo Frank, da du ja Python benutzt, hier etwas zu den PIOs unter Python Raspberry Pico PIO State Machines unter Python

ModulAM - Un modulateur AM huit fréquences , eine französische Neuauslegung des "GFGF Konzertsenders"
-
-
Das ist sehr gut beschrieben, danke!
Quote from Bosk VeldLeider kann man sich nicht den Quellcode ansehen; entgegen der FAQ hier, 1. Punkt, werden nur eine *.uf2- und eine 3,7-GB-große *.img-Datei zum Download antgeboten.
Jetzt habe ich den Quellcode doch gefunden! Die Softwaredokumentation befindet sich in der großen Image-Datei. Ich lud sie gestern runter. Der Link auf die "notice générale de montage et d’instructions" tappt leider ins Leere.
Die Image-Datei läßt sich (bei mir nur) mit Express-Zip öffnen. Momentan habe ich gut ca. 1,5 GB entpackt; erst entpackte Express-Zip schnell, seit einigen Stunden ist es aber nervtötend langsam mit nur 700 kB/min. Immerhin existiert die Ordnerstruktur schon; ich habe sie incl. der Namen der runtergeladenen Dateien angehängt.Gruß, Frank
-
Durch den Tiefpaß - Grenzfrequenz 6 kHz - steht an C16 ein NF-Signal an, das über D41 das Signal PO1 moduliert. Wenn das externe Signal angelegt wird, geschieht das Gleiche.Gruß, Frank
Grenzfrequenz schon bei 6 kHz? Das ist schlecht für Einkreiser, die mit einem hochwertigen Lautsprechern betrieben werden.
Da wird viel Wissen, Zeit und auch Geld investiert und am Ende ist die Lösung doch nicht zufriedenstellend....
Gruß,
Fernseheumel
-
Grenzfrequenz schon bei 6 kHz?
Wenn man sich an das 9kHz Frequenzraster für Mittelwellen-Aussendungen hält, dann sind die 6kHz schon recht hoch.
-
Die Audiobandbreite wurde im französischsprachigem Forum des Projekts auch schon diskutiert, mit der Ansage, man will ins Raster passen und nicht zuweit in die Nachbarkanäle gehen.
Meine persönliche Meinung: Man hätte da im mehr Spielraum geben können und wenn man genau ins Raster will, eine simple Vorfilterung digital schon im OrangePi machen können.
-
Hallo Frank, hallo alle Leser.
Ich bin immer ein wenig vorsichtig mit Interpretersprachen wie Python, erst recht wenn es in Richtung Microcontroller geht, schließlich läuft dann auf einer winzigen Maschine nochmal eine winzigere virtuelle Maschine die das Programm erst interpretiert. Aber hier habe ich es mal gewagt, denn im Prinzip ist Python nur der Zündschlüssel für die PIO State Machines um dort den Assemblercode abzulegen und die Hardware anzuwerfen. Ich habe also bei Kaffee und Kuchen auf meiner Terrasse mal versucht die Schlange zu bändigen und mich mit dem Micropython und Thonny beschäftigt. Auf dieser Basis habe ich dann auf einem Raspberry Pico Wifi im ersten Schritt die 8 Signalgeneratoren in die PIO State Machines geprügelt, der Thonny-Pythoncode dafür folgend:
Code
Display More#imports for state machines / signal generation import machine, rp2 # pio code for endless square wave generation @rp2.asm_pio(set_init=rp2.PIO.OUT_LOW) def square_wave(): wrap_target() set(pins, 1) set(pins, 0) wrap() f_carrier = [ 153000, 1439000, 999000, 756000, 1610000, 171000, 252000, 198000] pins = [ 0, 1, 2, 3, 4, 5, 6, 7] # init all 8 signal generators for i in range(8): print(i) sm=rp2.StateMachine(i,square_wave,freq=2*f_carrier[i],set_base=machine.Pin(pins[i])) sm.active(i+1)
Der Code läuft einmal oben nach unten durch, dann haben die beiden CPUs nicht mehr viel zu tun und der Rest läuft selbstständig.
In f_carrier liegen die vorgegeben Trägerfrequenzen, darunter in pins indexgleich die Pins, an denen das Signal mit der Frequenz anliegt.
Jetzt könnte man hingehen und noch eine Hauptschleife schreiben und die Frequenzen über irgendein ausgedachtes fetziges Nutzerinterface (Touchdisplay, Drehencoder + Display oder RS232 Schnittstelle oder IR-Fernbedienung oder sonstwas) veränderbar machen und die Änderungen dann persistent auch auf den Controller halten, damit bei einem Neustart immer gleich die Wunschfrequenzen anliegen und nicht die hart einkodierten.
Bei dem Beispiel sind jetzt alle 8 State Machine des RP2040 eines Pico (W) Version 1 belegt. Achtung, der RP2350 des Pico 2 (W) hat 12 State Machines https://www.raspberrypi.com/documentation/…ico-series.html !
Jetzt wollte ich mich dem Projekt ModulAM nähren und die Frequenzen nicht über die Webseite eines externen OrangePi einstellbar machen, sondern direkt über eine Webseite im RP2040 selbst. Auch das Hosting einer solchen Seite kann man Python auf einem Microcontroller überlassen, es passiert dabei ja kaum etwas rechenintensives. Jedoch verliert man auf dem Pico W (Version 1) mit RP2040 erstmal eine der 8 Frequenzen. Der Controller krallt sich für die Kommunikation mit dem Wifi-Modul eine State Machine ( die Erste auf dem zweiten Block), damit sind also nur noch 7 Träger möglich. Bloß gut das es da ja den RP2350 gibt!
Hier mal eine schnell hingefuschte Demo für einen RP2040 mit 7 Frequenzen, die jetzt aber über Wifi / Webseite eingestellt werden können.
Die ersten 4 Frequenzen habe ich für die Langwelle genommen, die obersten 3 für die Mittelwelle.
Diese Aufteilung ist von mir, im billig zusammengestricken HTML-Interface (min/max der Slider bei 9 kHz Raster), so festgelegt!
Natürlich kann man auch die Langwellenfrequenzen für Mittelwelle und umgekeht benutzen, es sind ja im Prinzip Frequenzen (bei 125 MHz Standardtakt) sogar bis 62.5 MHz möglich, alle unabhängig voneinander.
Nachdem man seinen Wifi-Zugang eingetragen hat, meldet sich der Pico am Drahtlosnetzwerk an, bekommt eine IP und darüber kann man dann den Webserver im Pico zur Einstellung der Wunschfrequenzen erreichen.
Änderungen an der Trägerfrequenz werden sofort für den jeweiligen Kanal übernommen und wie gesagt, das ist nur ein Grundgerüst, vielleicht als Hilfe für Leute die mit Python und ModulAM auch mal rumexperimentieren wollen. Das Webinterface sollte man für ein eigenes "ModulAM" noch entsprechend aufhübschen, die Wifi credentials über einen AP einspielen und auch hier wieder eine Persistenz nachdenken und natürlich mit dem Gedanken spielen, gleich einen 1-2 Euro teureren Pico 2 W, mit 12 statt nur 8 State Machines zu nehmen.
-
Participate now!
Don’t have an account yet? Register yourself now and be a part of our community!