donderdag 25 december 2014

RV Zwijndrecht is er weer

Er was werk aan de winkel aan mijn Rondje Vlaanderen geocache in Zwijndrecht. Waypoint 3 was al even buiten dienst, het volgende was door de lokale landbouwer verwijderd. Ik had het plan om waypoint 2 te vervangen door een mooier ontwerp, dat is dus ook gebeurd. Na een check van alle nieuwtjes bleek dat nummer één het toch ook niet zo goed meer deed. Dat is dan ook vervangen, het resultaat is dus dat alles nu nieuw is. Hopelijk zijn er niet te veel kinderziektes want drie van de vier zijn dus ook nieuwe ontwerpjes.

Hier is een 'sneak preview' van wat je kan verwachten:





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 :)

dinsdag 2 december 2014

Muziek in een doosje - vervolg

Eén groot nadeel aan bestellingen in China: ze duren en duren en duren...
Het is alweer meer dan een maand geleden dat ik muziek in een doosje probeerde te stoppen, iets wat toen slecht afliep. De testen met de D/A convertor waren slecht omdat alles veel te traag ging.

Ik bestelde dus andere modellen en die arriveerden vorige week. Meteen was duidelijk dat op z'n minst het formaat van de chip past in mijn plannen: een zo klein mogelijk doosje dat muziek maakt of coördinaten uitspreekt in bosrijk gebied.

Het oude concept van mijn MP3 potje had nadelen en onder het motto: wat je zelf doet, doe je beter is dit een schot in de roos.

Hier is het dus om te doen, om deze grafiek. De oscilloscoop toont het resultaat van mijn testprogrammaatje dat draait op een Arduino Mini. Ik heb een sinusgolf in een lijst gestopt en gebruik nu 128 stapjes om één golf (op en neer) weer te geven. Er is geen vertraging ingebouwd, dus wat je hier ziet is de maximumfrequentie die mogelijk is met de Arduino en de Max522 seriële D/A convertor. Omdat de seriële verbinding nu SPI is in plaats van I2C, kan ie nu veel hogere snelheden aan.



De golf heeft een frequentie van ongeveer 450 Hz. Dat wil zeggen dat ik grofweg 60.000 samples per seconde seriëel kan versturen. Als je weet dat het met de vorige chip, door het trage I2C protocol slechts 3 à 4000 was, is dit natuurlijk een wereld van verschil.

Muziek is natuurlijk nooit zo'n perfecte sinus, maar als je weet dat een CD speler met 44.000 samples per seconde werkt, zit ik nu toch wel heel goed. Het is natuurlijk nog maar één kanaal, of ik al dan niet stereogeluid ga voorzien zal afhangen van het geheugen dat ik vrij heb (de chip heeft 2 kanalen, dus het kan wel). Het vorige MP3 potje deed dat ook niet, en wees nu eerlijk: zo belangrijk is het niet als verstaanbare coördinaten je doel zijn. Een CD speler gebruikt ook 16 bits per sample en deze chip slechts 8. Maar geef toe, de golf is bijna perfect.

Dat wil zeggen dat de klank dat normaal ook zal zijn :)