woensdag 17 december 2014

MP3 potje 3.0

Oef! Het is dan toch eindelijk gelukt. De hele toestand sleepte al enkele maanden aan, één van de belangrijkste redenen is het feit dat onderdelen uit China lang onderweg zijn, maar mijn opzet om mijn origineel MP3 potje te verkleinen tot het in een potje van glucosestrips past, is gelukt.

Het resultaat is dus klein, maar vooral heel erg zuinig. Niet enkel voor de portemonnee (enkele dollars onderdelen) maar vooral het stroomverbruik is nu 10 tot 20 keer lager dan het vorige model. Ik weet nog steeds niet precies hoe het komt, maar wel waarom het nu dus heel goed is. Ik gebruik geen versterker, geen SD-kaartjes meer en alles kan nu op een knoopcelbatterij tot 20u muziek maken.

Let wel, dat is een theoretische berekening (het ding verbruikt slechts 6 à 7 mA stroom, met oortjes zo'n 10mA) maar één praktijktest gaf al aan dat het zeker 7 uur is. Dan was de batterij leeg (gezakt van 3.2 naar 2 Volt) en de spraak was niet meer verstaanbaar (hij was er nog wel). Hoe lang het met een volle batterij duurt (dit was een gebruikte) weet ik nog niet, maar dat wordt snel duidelijk. Ik heb ook knoopcellen in de aanbieding die 550 mAh capaciteit bezitten, de huidige slechts 180. Dat is dus desnoods nog een optie.




Technisch

De Arduino sketch werkt in de microcontroller en haalt 8-bit mono samples uit het WinBond SPI flash geheugen van 4 of 16Mb. Ik soldeer voorlopig enkel de 4Mb chips, omdat ik daar al meer dan 4 minuten geluid op kwijt kan. Ik haal maximaal een samplefrequentie van 15kHz en dat is te wijten aan de vreemde opzet van het RAM-geheugen. Elke byte die je door de D/A convertor hoort, moet uiteraard eerst uit het geheugen opgehaald worden. Maar daarvoor moet ik seriëel eerst een commando en drie adresbytes sturen, dan ontvang ik één byte antwoordjes. Je zou per pagina kunnen lezen (en dus veel hogere snelheden halen), maar dat is geen optie omdat er dan geen constante stroom aan bytes naar de D/A convertor loopt. Daar komt bij dat de Attiny85 microcontroller zonder kristal werkt om energie te sparen, en dat halveert de snelheid.

Dat stelde wel enkele praktische problemen. Een samplefrequentie van 15 kHz kan ik niet creëren. De meeste gratis software kan wel downsamplen naar hele factoren, dus van 44 kHz naar 22 kHz, maar een exacte match kon ik niet maken (het is in 't echt 15250 Hz gemeten op de oscilloscoop). Die software heb ik dus zelf geschreven in Delphi XE.

Verder moet ik de samples van de PC in de geheugenchip krijgen en ook dat is niet simpel. Ik wil dat namelijk altijd kunnen, ook als de chip gesoldeerd is, en ik heb geen plaats voor een extra RAM-connector op mijn mini printplaatje waar ik hem mee zou kunnen programmeren. De enige optie was een seriële verbinding tussen mijn Delphi programma (dat toch al draait voor de conversie) en mijn Arduino sketch. Die geeft dan commando's door aan de RAM chip om bytes op de seriële poort (USB-poort) op te slaan.

Een derde functie die ik heb moeten programmeren is een RAM-browser. Ik moet kunnen zien wat er effectief in het RAM geheugen zit om fouten te kunnen opsporen. Ik heb mijn eerste chip al opgeblazen en hoe ie zich dan gedraagt, daar word je gek van. Effectief de golf in de RAM kunnen zien, had me toen veel problemen bespaard. Maar toen ik de browser klaar had, wist ik dus meteen dat mijn chip kapot was, hoewel je nog steeds geluid kon horen (wel behoorlijk vervormd).

Nu kan ik eindelijk mijn Rondje Vlaanderen Zwijndrecht weer online brengen. Ik kan immers dit potje overal verstoppen, de vorige verstopplaats was verdwenen, alsook mijn 2.0 potje van toen. Dat is nu ineens niet zo erg meer :)

Geen opmerkingen:

Een reactie posten