RPi im Radio: Hardware

Ich bin der glückliche Besitzer einer Sharp XL-560 Mini-Stereoanlage, die ich vor einiger Zeit relativ günstig über ebay-Kleinanzeigen bekommen habe. Ein schönes Gerät, besonders die Tatsache das es einen Drehknopf hat, mit dem man die Lautstärke einstellen kann ist super. Mein Radio vorher hatte nur zwei Knöpfe, das war ein bisschen nervig, wenn es plötzlich zu laut war 🙂

Das Gerät ist schon aus einer bisschen älteren Generation, und hat die für die Zeit übliche Kombination: (UKW-)Radio, CD, Kassette, AUX-Eingang. Nun, irgendwie war meine Anwendung für das Kassettedeck ein bisschen limitiert (ich weiß bis heute nicht, ob es überhaupt funktioniert…). Daher nun also meine Idee: Modernisieren wir das Ding ein bisschen, und ersetzen das Kassettendeck durch einen Rasperry Pi Zero, mit Internetradio und Airplay. Gesagt getan 🙂 In diesem Post schreibe ich ein bisschen war zum Hardware-Umbau, zur Software kommt später noch mal was.

Eine weitere schöne Eigenschaft dieses Radios ist, das man im Internet ein Service-Manual findet, komplett mit Demontageintruktionen, Fehlersuchhilfe, Blockschaltbild und vollständigem Schaltplan (!) inklusive Bestückungsplan (!!). Ganz ehrlich, ohne dieses Dokument hätte ich das auch nicht hinbekommen… Zeit, mal wieder den Schreibtisch ins Chaos zu stürzen 🙂

Weiterlesen

Softcore CPU NEO430 mit GHDL simulieren

Für meine Masterarbeit beschäftige ich mich gerade mit Softcore-Prozessoren auf FPGAs. Dabei kommt für meine Arbeit der NEO430 zum Einsatz, ein sehr kleiner aber feiner Prozessor der an meinem Institut entwickelt wurde (von Stephan Nolting). Da ich aktuell noch nicht in einem Stadium bin, wo ich den Prozessor wirklich auf einem FPGA implementiere (auch wenn das der nächste Schritt ist) arbeite ich aktuell sehr viel mit Simulation, und da vor allem mit ModelSim. Ein bisschen was dazu hatte ich ja hier im Blog schon mal da zu geschrieben.

Nun hatte ich heute Abend die Idee, man könnte ja mal einen anderen Simulator ausprobieren. Mir hat es dabei GHDL angetan, vor allem, da er OpenSource ist, aber auch weil er einen interessanten Ansatz verfolgt: Der VHDL-Code wird mit einem umgebauten Compiler (GCC oder LLVM) direkt in Maschinencode kompiliert, und dieser Code dann ausgeführt. Dadurch soll der Simulator extrem schnell sein. Auf Windows ist das ganze etwas eingeschränkt, hier wird ein interner Codegenerator verwendet. Weiterlesen

Netze in Eagle in Schaltplan und Board verbinden

Zwei kleine Tipps zum Platinenentwurf mit EAGLE, die zwar irgendwie das gleiche Thema haben, eigentlich aber nichts miteinander zu haben 🙂

Signale im Schaltplan kreuzungsfrei verbinden

Stellen wir uns vor, wir haben die unglaubliche Schaltung aus vier Widerständen, die auf genau diese Weise verbunden werden müssen:

Mal abgesehen davon, dass man das Problem hier natürlich leicht durch Umpositionieren der  Widerstände lösen könnte, ist das doch ein häufiges Problem: Leitungen kreuzen sich nun mal. Das dabei ein Hakenkreuz entsteht ist nur eines der Probleme… Weiterlesen

Schöne Debugausgaben mit VHDL

Aktuell arbeite ich fleißig an meiner Masterabeit (einer der Gründe, warum es hier auf dem Blog so still ist…), und entwickele dafür auch ein paar Sachen in VHDL (ich entwickele also Hardware 🙂 ). Am Ende soll das ganze natürlich auf einem FPGA laufen (vielleicht sogar mal in einem echtem Chip, einem ASIC!), aber aktuell wird das ganze nur simuliert. Das ist zwar ziemlich langsam (aktuell etwa um den Faktor 1000), aber dafür kann man sich jedes Signal in seiner Schaltung ganz genau ansehen und bei Bedarf auch Debug-Ausgaben tätigen. Besonders das hat sich aktuell als sehr hilfreich dargestellt.

VHDL unterstützt das im Prinzip mit assert und report, allerdings finde ich die Ausgaben recht unübersichtlich, vor allem weil sie über mehr als eine Zeile gehen. Zudem ist alles einfarbig, so dass man schnell die Übersicht verliert. Ich habe mir als etwas überlegt, was etwas schöner aussieht (siehe Screenshot)

Weiterlesen

Kombinatorik zu Ostern

Frohe Ostern!

Am Ostersamstag waren in in der Familie fleißig und haben Eier gefärbt. Meine Aufgabe war es danach, die Eier auf unsere zwei Osternester „hübsch“ zu verteilen. Nach einer kleinen Diskussion darüber, wie man das am besten macht, kam dann die Frage auf, wie viele Möglichkeiten es dazu eigentlich gibt.

Wir färben unsere Eier immer in fünf verschiedenen Farben (zumindest wenn ich nicht wieder die Farbtabletten mit blau und grün vertausche und wir daher zwei mal blaugrün haben 🙂 ) und haben dieses Jahr zwanzig Eier gefärbt. Es gibt also vier Eier in jeder Farbe. Wir haben zwei Osternester, in jedes kommen also 10 Eier. (Das Bild oben ist nur Demo 🙂 )

Wie viele Möglichkeiten gibt es also 20 Eier, von denen jeweils 4 identisch sind, in 2 Nestern à 10 Stück anzuordnen? Dabei zählen natürlich keine Möglichkeiten, bei denen zwei gleichfarbige Eier vertausch wurden, und auch keine, die man durch Drehen der Nestern ausgleichen kann. (Die Eier liegen in jedem Nest in einem Kreis). Ein klassisches Problem der Kombinatorik also 🙂

Weiterlesen

Null coalescing in PHP

Heute habe ein neuen Feature von PHP kennengelernt, das wirklich praktisch ist: Null coalesing mit dem tenären Operator. (Ok, das klingt für ungeübte Ohren vielleicht ein bisschen seltsam :))

Null coalescing ist ein Feature dass viele Programmiersprachen haben, meistens mit Hilfe des Operators „??“ (Zwei Fragezeichen). Der Ausdruck gibt den linken Wert zurück, wenn dieser nicht null ist, ansonsten den rechten. Also z.B. so:


action = getAction() ?? 'save';

Weiterlesen

Einfache Sättigungsarithmetik in VHDL

Für ein Projekt an der Uni habe ich mit zwei Kommilitonen ein Malprogram („FPGArt“) auf einem FPGA implementiert. Dabei wird eine Maus per PS/2-Schnittstelle angebunden und das Bild schließlich per VGA ausgegeben. Zu dem Projekt selber später vielleicht mehr, hier jetzt nur ein kleines VHDL-Snippet das man vielleicht man gebrauchen kann.

In dem Projekt wird regelmäßig die relative Bewegung der Maus abgefragt und zu dem alten Wert addiert. Natürlich hat das Bild eine begrenze Größe und der Mauszeiger muss in diesen Grenzen von 800×600 gehalten werden. Es wird also eine sog. Sättigungsarithmetik benötigt: Sollte das Ergebnis der Addition größer als 800 (bzw. 600) sein, oder kleiner als 0 wird es auf den Grenzwert gesetzt. Das ganze ist gar nicht so einfach in Hardware zu implementieren (zumindest ist uns nichts intelligentes eingefallen…).

In jedem Fall muss es ein Zwischenergebnis geben das ausreichend groß ist, um Überläufe überhaupt zu erkennen. Die Maus kann pro Intervall Maximal um 256 bewegt werden, entsprechend muss als ein Wert von 800+256 = 1056 gespeichert werden können. Mit 11 bit kommt man auf 2048, das reicht. Hiermit kann man auch Unterläufe erkennen: 0-256 = -256 was dann 1792 entspricht. Dieser Bereich überlappt auch nicht mit den 1056 nach oben. Es ist also immer einwandfrei erkennbar, dass ein Über/Unterlauf stattgefunden hat.

Weiterlesen

CakePHP – Ein Review

Heute fragte mich jemand, ob ich eigentlich etwas kennen würde, um mit PHP „schöner“ zu programmieren. Ich dachte zugegebener Maßen erst an einen Editor (da würde ich PhpStorm (gibt’s für Studenten umsonst!) empfehlen), es wurde dann aber relativ schnell klar, das es eher um sowas wie ein PHP-Framework geht. Um es gleich mal klar zu sagen: Ohne irgendein Framework würde ich nichts in PHP schreiben, was länger als 100 Zeilen ist. Man muss das Rad ja nicht immer neu erfinden, und dabei die gleichen Sicherheitslücken wieder einbauen 🙂

Nun entwickele ich für meinen Hiwi-Job schon rund 4 Jahre in PHP. Dabei habe ich die erste Zeit eine Anwendung weiter gepflegt, die ohne ein Framework geschrieben war. Nach einiger Zeit war klar, das es so nicht weitergehen konnte, die Anwendung war, auch durch ihr Alter und die Weiterentwicklung von PHP, unwartbar geworden und lief mit schnellen Schritten auf das End-Of-Life „ihrer“ PHP-Version zu. (Mehr sage ich jetzt nicht, der Autor ließt hier mit 🙂 ). Es musste also eine Neuentwicklung her, natürlich auf Basis eines Frameworks. Damals wurde mir CakePHP empfohlen (damals noch Version 2), was ich dann relativ unreflektiert übernommen habe. Jetzt nähert sich die Anwendung langsam der Fertigstellung, inzwischen basierend auf CakePHP 3. Im Laufe der Entwicklung hat sich eine gewisse Hassliebe zu Cake entwickelt…

Weiterlesen

HTTPS mit Umwegen

So, dieser Blog ist jetzt auch vollständig per HTTPS erreichbar, dank eines kleinen „Schubses“ von Google.

Aber der Reihe nach: Vor einiger Zeit hatte ich ein wenig am Blog umgebaut (es gibt auch seitdem ein neues Theme, falls das noch niemanden aufgefallen sein sollte…) und dabei ein paar Links kaputt gemacht. (Ok, alle Links). Freundlicherweise bekam ich kurz darauf eine Mail von Google, auf meiner Website wäre die Anzahl der 404s ein bisschen angestiegen. Der Fehler war schnell gefunden, und die meisten Links waren wieder heile. Ein paar waren immer noch kaputt, was an dem Theme-Wechsel lag, aber auch die hatte ich recht schnell repariert. Und dann sah es so in der Search Console aus:2016-08-09-21_32_12-search-console-dashboard-http___niklas-rother-de_Irgendwie brach der Traffic von Google „etwas“ ein. Auch Piwik zeigte das gleiche Problem: (Zeigt auch schön, wie viel Traffic von Google kommt…)2016-09-22-23_04_19-niklas-rother-computer-mehr-woche-19-25-september-2016-webanalytik-berDer erste Knick nach unten waren die komplett kaputten Links, dann kam der Zeitraum wo einige Links kaputt waren. Der komplette Absturz passierte, als ich alle Links repariert hatte, und die Reparatur in der Search Console von Google auch bestätigt hatte. Jetzt war ich verwirrt. Alle Links waren in Ordnung und Google wirft mich aus dem Index?! Erst dachte ich, das wäre vielleicht nur ein temporäres Problem weil Google die Seite neu indexieren müsste, aber es wurde nicht besser. Laut Google war auch alles in Ordnung.

Was war passiert? Wie bei allen gemeinen Fehlern eine Kombination von mehreren Ursachen. Erstes Problem: Google unterscheidet streng nach URL, man muss in der Search Console mindestens vier Varianten der URL hinzufügen, wenn man alle „typischen“ Kombinationen haben will: HTTP/HTTPS sowie mit und ohne „www“. Heute habe ich dann gemerkt, das ich sehr wohl noch Traffic von Google bekommen habe, aber auf die HTTPS-Seite! Scheinbar hat Google durch das neu-indexieren spitz gekriegt, dass ich hier mehr oder weniger aus Spaß mal ein Let’s Encrypt Zertifikat installiert hatte (automatisch, über netcup), und hat die Besucher auf die sichere Variante geschickt. An sich natürlich lobenswert. Dort sind also schon mal die Besucher geblieben. Glück gehabt, doch nicht aus dem Index geflogen *phew*.

Weiterlesen