EnRav - Box (TonUINO Remix)

Perfekt! Da sag ich jetzt schon mal ein ganz herzliches Dankeschön :slight_smile:

Welche USB-Buchse wirst Du denn verwenden?

Ich habe diese hier im Einsatz:

Vorteil ist, dass man die auch für Holzprojekte gut verwenden kann (einfach nur ein runder Bohrer und gut ist.

Die hier ein paar mal vorgeschlagene Variante mit einem Apter dieser Bauart, z.B. ->

finde ich nicht ganz so hübsch, da durch die Befestigung mit Schrauben immer ein relativ großer Überstand da ist. Vorteil ist natürlich, dass man damit vorhandene Micro-USB Kabel verwenden kann.

Aber im Endeffekt ist es egal, das kann man dann ja in den Druckdateien ändern. :slight_smile:

Ich hab vor die USB Version zu nehmen

Ich dachte mir einfach, dass das Verkabeln einfacher ist und da die Box von mir eine “Wandstärke” von 1 cm hat sollte sich das auch ohne Überstand einbauen lassen.
Mein Plan war es, die Buchse vielleicht 5mm nach hinten Versetzt zu platzieren so dass dann auch noch ein wenig geschützt ist.

Vielleicht designe ich die Platte auch so, dass man sie von hinten einkleben kann. Dann wäre der Versatz noch geringer, dafür ist das tauschen schwieriger.

Stimmt, daran hatte ich noch nicht gedacht. Eventuell kannst Du sie ja auch ganz versenken und an dieser Stelle die Rückwand um diese Stelle im inneren des Gehäuse dicker machen, damit die Befestigung noch genügend Halt hat. Ich habe mal versucht es aufzuzeichnen.

Hatte ich ganz vergessen: Ich hatte einfach Bock drauf das selbst zu machen und habe es komplett mit String eingebaut, da das keine langlaufende Anwendung ist, mache ich mir da auch um Heapfragmentierung nicht so sehr einen Kopf… Ich hab jetzt nicht gemessen, wie der Speicherverbrauch ist. Aber da es ja immer nur für ein Verzeichnis ist, sollte das nicht signifikant sein. Ich habe den Aufruf für das Erzeugen der M3U direkt in die ConnectToSD eingebaut.
Und wie du schon schriebst muss man es selbst sortieren, ansonsten ist es die FAT Reihenfolge. Quicksort hat mal wieder Spaß gemacht :slight_smile:

Speicher-relevanter ist die Liste möglichen Tracks beim Zuordnen zu den Karten im WebIF. Da habe ich aktuell den ganzen Baum im Speicher, das wird nicht für immer gutgehen. Die HTML Seite musste ich sequenziell als tmp File zusammenbauen und mit Server.StreamFile hochladen, da sich Anzahl Karten mit Anzahl Optionen in der Dropdown Liste multiplizieren…

Viel Spaß hatte ich am Wochenende mit Sonderzeichen “enhanced” ASCII von der Karte vs UTF-8 vs HTML. Aber jetzt ist auch das generierte HTML W3C valide.

Vielleicht merkt man: Meine Hauptmotivation neben der Freude für die Kinder ist das “Projekt” selbst. Hab grad einen Riesenspaß dran.

1 Like

Ja, wir entwickeln hier alles doppelt :grinning:
Aber unsere Projekte unterscheiden sich auch zu stark. Bei mir kommt noch hinzu, dass für mich die Multitask Grundlage die Sache verkompliziert( weil ich Anfänger bin). Deshalb mache ich viele Dinge einfacher und ohne 100% Ansatz. Mein Webinterface wird zum Beispiel immer nur die aktuelle Karte anzeigen.
Stimme Dir aber absolut zu, es geht mehr um den Spaß und für mich um den Lerneffekt.

Multitasking habe ich auch nicht übernommen. Bei mir läuft der MP3 Player auch im main-loop mit. hat den Nachteil, dass MP3 stoppt, wenn die Configseite aufgebaut wird. Ich habe einfach zu viel Angst vor den schwer zu findenden Problemen, die auftreten könnten.

Mein Messungen zeigen, dass es etwa 50/50 zwischen Empfangen und Schreiben auf die SD ist. Wenn ich die Daten von FTP nicht wegschreibe, komme ich auf ca. 300k/s.

Da geht es mir nicht anders. Aber da ich mit “normalen” Controllern schon mehr als genug Erfahrung habe brauche ich halt die Herausforderung von mehreren Threads :slight_smile:

Außerdem wäre es doch schade die Hälfte der Rechenleistung ungenutzt liegen zu lassen.
(Genauso wie die VS1053 Library eingentlich nicht multithreading geeignet ist, da sie die meiste Zeit der Loop mit “NOP” vertrödelt)

1 Like

Absolut! Ich glaube auch dass Dein Ansatz der richtige ist. ich finde es auch super gut dass ich durch Deine Vorarbeit die Multithreads lernen kann. Ich brauche halt mega lange um meine Ideen umzusetzen :joy: deshalb mache ich einige Dinge anders oder einfacher.

Nach einigen kleineren Korrekturen funktioniert meine Platine jetzt so wie erwartet.

Jetzt muss ich nur noch die Firmware entsprechend anpassen und dann kann V2 in Angriff genommen
werden. (Dieses mal dann als ein einzige Platine mit möglichst geringem Stromverbrauch im Standby)

2 Like

Und das Gehäuse hat auch seine Aussparungen für Power-Switch und USB Buchse bekommen.

Jetzt muss der Drucker wieder ran ( ~ 20h Druckzeit )

1 Like

Nochmal eine Frage an alle die den VS1053 benutzen: Kennt ihr diese Symptome?

Mir sind die genannten Probleme mit dem VS1053 bisher nicht aufgefallen

Schade/Schön. :slight_smile:
Besonders der dritte Bullet nervt echt mächtig. Ich werde mal die Player Hardware tauschen, aber so richtig glaube ich nicht dran…

Ich hatte das auch. Schau mal nach den SetVolume und Stop Funktionen. Ich bekomme es nicht mehr zusammen aber da wurde einmal direkt geschrieben und einmal per Funktion SetVolume. Das klappte bei meinem Modul nicht gut. Bei mir sieht es so aus

uint16_t actualVolume = getVolume();
//write_register(SCI_VOL, 0);                             // Mute while stopping
setVolume(0);

und

void VS1053::setVolume(uint8_t vol){
// Set volume.  Both left and right.
// Input value is 0..21.  21 is the loudest.
// Clicking reduced by using 0xf8 to 0x00 as limits.
uint16_t value;                                      // Value to send to SCI_VOL

if(vol > 21) vol=21;

if(vol != curvol){
    ESP_LOGV(TAG, "Changing Volume from %d to %d", curvol , vol);
    curvol=vol;                                      // Save for later use
    vol=volumetable[vol];                           // Convert via table
    value=map(vol, 0, 100, 0xF8, 0x00);              // 0..100% to one channel
    value=(value << 8) | value;
    write_register(SCI_VOL, value);                  // Volume left and right
}

}

1 Like

Vielen Dank für den Tipp, das hat bei mir auch geholfen. You made my day. :+1:

Falls noch jemand mitliest: Es müssen natürlich _alle_ Vorkommen von `write_register(SCI_VOL...);` müssen durch ein setVolume ersetzt werden, auch z.B. am Ende von `stop_mp3client`.

Korrektur nach Hinweis von Mike:
Falls noch jemand mitliest: Am Ende von stop_mp3client ist ggf. auch ein Eingriff nötig, je nachdem in welcher Einheit (0…21 oder %) curVol geführt wird. Ich habe mich entschieden curVol in der externen Einheit 0…21 zu führen (so wie oben im Auszug von Christian) und den Aufruf durch ein setVolume(actualVolume) ersetzt.

1 Like

Ich habe mir gerade einmal das Datenblatt des VS1053 und den Code angesehen.

  1. Es dürfen natütlich NICHT alle Vorkommen von
    write_register(SCI_VOL, ...);
    ersetzt werden, nur alle, bei denen die Lautstärke auf 0 gesetzt werden soll.

  2. Das Register des VS1053 für die Lautstärke ist invers, daher bedeutet
    write_register(SCI_VOL, 0); -> maximale Lautstärke
    anstatt jedes mal die setVolume() Funktion zu nehmen, kann man auch
    write_register(SCI_VOL, 0xFEFE); -> minimale Lautstärke
    schreiben. (Bei 0xFFFF wird der Analogteil des Chips komplett abgeschaltet)

Du hast natürlich Recht, innerhalb von setVolume macht das keinen Sinn, das wäre ein rekursiver Aufruf.

Auch hier gebe ich dir Recht, es ist nicht notwendig im Sinne von “einen Fehler beseitigen”.
Ob man lieber mehrere write_register(SCI_VOL, 0xFEFE); im Code haben möchte oder setVolume(0) muss wohl am Ende jeder selbst entscheiden. Ich finde letzteres für mich besser lesbar und debugbar.

Danke dir

Henrik

Grüße.
ist es möglich die Datei für das Board frei zu geben?

Ich schau morgen Mal nach, ob ich die notwendigen Patches schon eingearbeitet habe und dann kann ich die entsprechenden Dateien hochladen.

1 Like