EnRav - Box (TonUINO Remix)


#81

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.


#82

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.


Vorstellung: TonUINO clone (ESP32+VS1053) "Nuclear Football"
#83

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)


#84

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.


#85

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)


#86

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

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


#87

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


#88

Mir sind die genannten Probleme mit dem VS1053 bisher nicht aufgefallen


#89

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…


#90

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
}

}


#91

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.


#92

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)


#93

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