Anda di halaman 1dari 12

Het programmeren van geluidsmodule.

Quadravox QV306-m1

Door: W. van den Eeden datum: 25 maart 2009

Deze uitleg kan ook als oefening gebruikt worden en is bedoeld om vertrouwd te raken met de mogelijkheden en met het programmeren van de Quadravox module QV306m1. Algemeen. De geluidsmodule QV306 is een module die in staat is aangeboden geluiden op te slaan en weer te geven. De module bied je een eenvoudige methode om stemmen en geluid aan je applicatie toe te voegen. Enkele voorbeelden hiervan zijn: Vogelgeluiden in tuincentrum. Geluiden bij modelspoorbaan. Sprekende klok, thermometer, rekenmachine. DJ-toepassingen; jingle op de radio. Oproep bij vliegvelden. Navigatie systeem. Telefoon menus. Industrie (in een monotone lawaaierige omgeving valt elke afwijking op) Algemene beschrijving van de module: Het hart van de geluidsmodule QV306 (wav) is een PIC processor ISD4003-04. Deze chip zet geluiden om en slaat ze op in geheugenplaatsen. De samplefrequentie is 8 kHz. Data van maximaal 4 minuten wordt opgeslagen in flashgeheugen en kan dit, volgens hun specificaties, 100 jaar probleemloos vasthouden. Het spreekt voor zich dat de geluidsopnames weergegeven moeten worden een hogere samplefrequentie dan 8kHz. De geluidmodule kan niet zelfstandig werken; je hebt hulpschakelingen nodig die de chip van informatie voorzien, zoals geluid met voldoende volume, voedingspanning, versterker, commandos, ed. Dit alles in ondergebracht op de module QV306m1. Deze module kan zo aan een microcontroller aangesloten worden en is klaar voor gebruik. De geluidsmodule is in staat max 240 boodschappen te bewaren met een maximum van 4 minuten (=240 sec). Je kunt kiezen uit drie modes van afspelen die via een mode setting command geselecteerd worden. Deze keuze kan op elk moment veranderd worden. De module wordt bestuurd d.m.v. een eenvoudige RS232 verbinding. Voor het versturen van een enkele 9600,N,8,1-byte kan een van de 240 berichten geselecteerd worden (de voorwaarden hiervoor worden later in dit document uitgelegd). Een hexadecimale code die begint met F (0xFx) wordt genterpreteerd als een mode-, volume- of set- opdracht. Een byte waarde in het bereik van 0-239 selecteert een enkel bericht in de directe adresseringsmode. Direct na het inschakelen van de voedingsspanning zal het systeem automatisch het maximum aantal berichten detecteren, opslaan en er voor waken dat deze grens bij aanroep niet overschreden wordt. De module QV306-m1 blijft onder spanning staan vanaf het moment van inschakelen totdat het sleep mode bit geset wordt door de set mode opdracht. Hardware matige reset of een dummy RS232 commando kan gebruikt worden om de QV306 uit de sleepmode te wekken. Wij willen de geluidsmodule aansturen met commandos d.m.v. RS232. Dit is een communicatieprotocol dat werkt met een spanning van puls en min 12 Volt. Alle aanpassingen voor een goede interactie met de geluidsmodule en andere zaken zijn ondergebracht op het hulpbordje QV430P. Om de module zo klein mogelijk te houden zijn de

RS232-niveauaanpassing, audio connectoren, power aansluiting en de 5V regulator op een aparte print, deze QV430P, geplaatst. Deze print is nodig om het geheel te programmeren. Het programmeren Zoals hierboven beschreven kan je met deze module 4 minuten geluid opnemen met een maximum van 240 opnames. Deze opnames kan je ook weer afspelen. Je hoeft niet per se op volgorde af te spelen. Je kunt ook een opnamenummer opgeven en deze direct afspelen, of op basis van een op random gegenereerd getal. Bij dit document wordt uitgegaan dat je de beschrijving van QV306-m1 ter beschikking hebt. Deze staat op BB of bij Quadravox.com Standaard staat de module voor communicatie ingesteld op het RS232 protocol 9600, N,8,1. De baudrate is instelbaar. Zie hiervoor de datasheet. De databits, pariteit en stopbits zijn niet instelbaar. Commandos: De commandos zijn bytegeorinteerd, bestaan uit een byte eventueel gevolgd door een 8bits waarde. De 240 geluiden worden opgeslagen in de eerste 240 posities van het geheugen en worden aangeduid met een getal. Een positie kan uit meerdere bytes bestaan, afhankelijk van de grootte van het geluid. Het maximale getal is 1 byte ofwel 256 posities; vanaf positie 240 worden de commandos gebruikt. De onderstaande commandos staan allen vanaf positie 0xF0 (0x staat voor de hexadecimale notatie)

De commandoset: De commandoset is onder te verdelen in verschillende groepen: Systeemcommandos: Afspeelcommandos: Opname commandos: 0xFC, 0xFD, 0xFE, 0xFF 0xF0, 0xF1, 0xF3, 0xF6, 0xF9, 0xFA, 0xFB. 0xF4 (aan/uit)

We zullen in deze oefening commandos bespreken en je kan ze eventueel tegelijkertijd uitproberen. We beginnen met de systeemcommandos, daarna de afspeelcommandos en als laatste de opname commandos. Sluit eerst de QV306-m1 module aan. De ingang van QV306 wordt verbonden met de geluidskaart lijnuitgang van de PC, de uitgang van QV met een hoofdtelefoon, de RS232 kabel (1:1) aan de 9-polige connector tusen QV en PC. En vergeet de voeding niet aan te sluiten! Druk op de reset knop. Om iets af te spelen moeten de geluiden eerst geladen worden. We gebruiken hiervoor het door Quadravox geleverde programma: QV300S2. Dit programma is via BB beschikbaar of via de website van www. Quadravox.com.

Voor deze oefening is er een aparte afspeellijst samengesteld. Kies load project > ga naar subdir c:\quadravox\QV300s2\aim-test > selecteer aim.tbl Zorg ervoor dat het volume van de mixer hoog genoeg staat. Verlaat het programma. We starten een communicatieprogramma dat data van serile communicatie ook hexadecimaal kan weergeven. Hyperterminal kan dit niet. Het programma Hercules is een goede optie. Het is gratis en te downloaden via http://www.hw-group.com/ of via BB. Stel de communicatie in op 9600-8-N-1. (vraag: waarom geen pariteit?) Een korte handleiding van het programma Hercules is als bijlage toegevoegd. We gaan eerst proberen contact te krijgen met de hardware door wat systeemcommandos uit te testen. Systeemcommandos: Type in het send venster van Hercules in: $FD in (zonder quotes natuurlijk) (de prefix $ wordt door Hercules genterpreteerd dat het een HEX-getal is dat verstuurd moet worden en niet de karakters F en D als string.

Type in: $FD <send>

: dit geeft een software reset. Respons is 0x55

Type in: $FE <send>

: hiermee vraag je de software versie. Respons is : 0x08 : hiermee vraag je om de type-byte. Respons is : 0x36

Type in: $FF <send>

Het type en versienummer zijn natuurlijk door de fabrikant in de chip geprogrammeerd en kunnen door jou niet veranderd worden. Het kan zijn dat de respons in dit document afwijkt met de werkelijkheid. De fabrikant kan een nieuwere versie toepassen en daarmee een andere respons. Krijg je geen contact met de module, kijk dan alle aansluitingen, voeding enz goed na. Er is een mogelijkheid om de geluidsmodule in de slaapmode te brengen. Hierbij gaat de module over op een zo laag mogelijk stroomverbruik. De zogenaamde idle-mode. Type in: $F8 <send> : module gaat in de sleep-mode.

Als de module in de slaapmode is kan hij weer uit de narcose gehaald worden door een willekeurige code ernaar te sturen. Bijvoorbeeld $41 (letter A) of door de reset-toets in te drukken. De ontwaakbyte heeft geen effect en gaat dus verloren. Type in: $41 <send> : QV is weer bij zinnen.

Voordat we een geluid uit QV kunnen horen moeten we zorgen dat de ingebouwde volume regelaar, een digitale potentiometer, niet dicht staat.

Het geluid wordt ingesteld door het commando 0xFC, gevolgd door een waarde tussen 0 en 63 te sturen.

Type in: $FC <send> Type in: $0A <send> Of in n keer: $FC$0A

: De volume-control wordt geactiveerd. : De volume wordt in gesteld op waarde 10.

Afspeelcommandos Nu we verbinding met QV hebben gaan we naar de afspeelmode. Bij het opnemen van geluiden, ook wel frasen genoemd, zijn in de module de geluiden niet met een naam opgenomen in een index, maar met een volgnummernummer. Het volgnummer is hetzelfde nummer van de volgorde waarin de geluiden opgenomen zijn. Ze beginnen met 0 en eindigen met 239. Alle 240 nummers hoeven niet gevuld te zijn. Zo kunnen er bijvoorbeeld maar 97 nummers opgenomen zijn. Het geheugen hoeft niet per se helemaal gevuld te zijn. Na het afspelen van een nummer, dus als het afspelen van een nummer afgelopen is, komt er een echomelding van QV met het afgespeelde nummer. Vraag je een geluidje aan dat groter is dan het aantal nummers dat is opgenomen, dan wordt dat nummer dat het hoogste nummer heeft afgespeeld, en je krijgt ook dat nummer als respons. Stel je hebt 97 geluiden opgenomen; de aanvraag is nummer 111. QV speelt nummer 97 af en geeft 97 als melding terug, alles kan ook in HEX-representatie.

Er zijn drie afspeelmodes beschikbaar 1. De directe mode In de directe mode kan je direct een nummer dat je wilt horen aanvragen. Type in: $F0 <send> : directe adressering, je wijst direct een nummer aan dat afgespeeld moet worden. : speelt frase 9 af (het is het 10e nummer want de opslag begint bij 0). De respons na afloop is 09 : speelt frase 13 af De respons is 0x0C

Type in: $09 <send>

Type in: $0C <send>

Zo kan je in de directe mode alle geluiden selecteren en direct afspelen. Je kunt het afspelen van een geluid ten alle tijden stoppen door 0xF6 te versturen, je krijgt geen returncode omdat het geluid niet helemaal uitgespeeld is.

Een special: Het kan natuurlijk voorkomen dat je een zin of een volgorde van geluiden wilt samenstellen uit een grote bibliotheek die je geladen hebt.

Je wilt bijvoorbeeld de zin: willen alle passagiers voor de vlucht naar Tunesie, vlucht UL3383 zich naar gate 11 begeven. Alle afzonderlijke woorden staan door elkaar in het geheugen van de QV-module. Door in de directe mode alle woorden afzonderlijk aan te wijzen geeft een lachwekkende haperende zin omdat er steeds gewacht moet worden en weer een commando gegeven wordt. Beter is eerst de zin (string) samen te stellen en op te slaan in de buffer en deze in n keer af te spelen. Vandaar de naam string-mode. Er kunnen 128 frases in de string-mode opgeslagen worden. 0xF9 gevolgd door de afzonderlijke geluidnummers. Open een string.

Bijvoorbeeld: 0xF9 0x16 0x12 0x19 0x11 0x0F 0x14 <send>. Geef alle nummers op (de zin klopt niet in deze oefening; het is als voorbeeld bedoeld. Het voorbeeld geeft een andere zin)

Type in $F9$16$12$19$11$0F$14 Type in $FA <send>

<send>

: sluit de string af. Je mag natuurlijk ook de string in n keer afsluiten.

De string staat nu in een QV-modulebuffer klaar om afgespeeld te worden. Type in $FB<send> : speel de string af.

De string blijft in de buffer staan en kan op elk moment weer herhaald worden. 2. de lineaire mode In de lineaire mode worden de geluiden in lineaire volgorde afgespeeld. Dit wil zeggen opeenvolgend na elkaar. Na het modecommando geef je iedere keer het maximale getal op van het geluid dat afgespeeld wordt. Als voorbeeld geven 0x0A op dit is dus van 0 tot en met 10. Type in: $F1 <send> : hiermee wordt de weergave in de lineaire mode gezet. : speelt een geluid af. De eerste is 00 : speelt het volgende nummer af. : speelt het volgende nummer af.

Type in: $0A <send> Type in: $0A <send> Type in: $0A <send>

3. De Random mode Randam mode 0xF3 afspelen in random sequence. Er wordt een geluid afgespeeld dat ramdom gegenereerd wordt tusen 0 en het aangeboden getal.

Door een byte te sturen (bijvoorbeeld 0x09) wordt er random een selectie tussen 0 en 9 gemaakt en afgespeeld. Door een byte te sturen (bijvoorbeeld 0x0D) wordt er random een selectie tussen 0 en 0x0D gemaakt en afgespeeld.

Opname van geluiden d.m.v QV306m1: Er kunnen analoge geluiden in alle formaten aangeboden worden, zolang ze maar een samplefrequentie hebben die groter is dan 8kHz. MP3-wav- enz Omdat we in de lessen de WAV-file bespreken en deze ruim voorhanden zijn gaan we bij deze oefening ook uit van WAV-files. Boodschappen moeten worden opgenomen in volgorde waarin ze bij het afspelen geselecteerd kunnen worden. Dat is dus van nummer 0 tot en met n. Alle nummers moeten worden in n sessie opgenomen. Opname nieuwe set van boodschappen: Set mode record- commando: 0xf4: Stuur de waarde 1 om de opname te starten. Stuur de waarde 0 om de opname te stoppen. 0xF4: De module staat in de opname stand, maar neemt nog niet op. Vergelijk het met een cassetterecorder: de opname toets is ingedrukt maar ook de pauzetoets. Door de pauzetoets los te laten start de opname. Bij het weer indrukken van de pauzetoets stopt de opname. Mogelijk is dit te ouderwets voorgesteld, maar het gaat om het idee. Het bedienen van de pauzetoets kan met vergelijken met het sturen van 1 en 0. Steeds als er een 0 gestuurd wordt, (=stoppen) wordt er een pointer bijgehouden die het laatste nummer van de opname bijhoudt.

Zend: $F4 : zet module in record-mode Zend: $01 : start de opname Start zo snel mogelijk het afspelen van een WAV-file. Als het afspelen van de WAV-file klaar is (je krijgt een melding!!) Zend: $00 : stop de opname Zend: $F4 : zet module in record-mode Zend: $01 : start de opname Start zo snel mogelijk het afspelen van een WAV-file. Als het afspelen van de WAV-file klaar is (je krijgt een melding!!) Zend: $00 : stop de opname Zend: $F4 : zet module in record-mode Zend: $01 : start de opname Start zo snel mogelijk het afspelen van een WAV-file. Als het afspelen van de WAV-file klaar is (je krijgt een melding!!) Zend: $00 : stop de opname Zend: $F4 Zend: $01 : zet module in record-mode : start de opname

Start zo snel mogelijk het afspelen van een WAV-file. Als het afspelen van de WAV-file klaar is (je krijgt een melding vanuit C++!!) Zend: $00 : stop de opname Doe dit net zo lang totdat alle geluiden zijn opgenomen. Zend een commando om de module in een afspeelmode te zetten: directe, lineair of random mode

Het leegmaken van het geheugen: Door een opname te starten en te stoppen zonder een geluid aan te bieden, wordt het geheugen leeg gemaakt. Type in: $F4 Type in: $01 Type in: $00 Type in $F0 : zet module in record-mode : start de opname : stop de opname : zet in directe mode

Enkele bruikbare urls: www.Quadravox.com

W. van den Eeden 25 maart 2009

Korte beschrijving van het communicatieprogramma Hercules. Het is uitermate handig om een communicatieprogramma te hebben dat data ook kan versturen en ontvangen en deze ook hexadecimaal kan weergeven. Hercules is een gratis programma dat in tegenstelling tot demos geen verloopdatum kent. Dit is erg prettig. Via http://www.hw-group.com/ of via Blackboard kan je het programma HerculesSetup.zip downloaden. Hierin besloten zit het programma HerculesSetup.exe. Als je dit programma runt, krijg je een melding over licentievoorwaarden ed. als je deze melding wegknipt (kruisje of close) kom je in de Herculesomgeving terecht.

Zoals je ziet is Hercules een programma met veel mogelijkheden. Voor ons doel kiezen we hier voor de tweede tab van links Serial. De andere tabs gebruiken we hier NIET. Je krijgt het volgende scherm voor je:

10

Rechts in het venster zie je de instelbare communicatie parameters. Stel ze hetzelfde als in het figuur in. Om de poort te openen druk op Open met het groene mannetje, rechts onder. Horizontaal in het midden zie je modem lines met vier LEDs. Hier hoef je niets mee te doen omdat ze hier geen effect hebben.

In het onderste gedeelte zie je drie balken waar je te versturen data kan intypen Ga je met de cursor op een balk staan dan verschijnt de melding dat je wil je iets anders versturen dan ASCII, je hetgeen vooraf moet laten gaan door een # of $.

Een voorbeeld:

Type in de bovenste balk $F4 door op <send> te drukken zal F4 verstuurd worden. Door het $-teken weg te laten en het HEX-vakje aan te vinken bereik je hetzelfde. Het is net zo gemakkelijk. In de tweede balk staat hallo. Dit is gewoon ASCII dat verzonden wordt. In de derde balk staat #065. Dit is een decimale waarde voor uit de ASCII-tabel de letter A. let op drie cijfers omdat de tabel tot 255 kan lopen. In het grote vlak komt de data die je verstuurt en ontvangt. In het rood zie wat je verstuurt. In het zwart wat je ontvangt. De hex-waarde komen in het grijs.

Door in het zend/ontvangstvenster met de rechtermuisknop te drukken komt er nog een menu waarin je nog het een en ander kan instellen.

De drie zend balken kan je ook bedienen door de functietoesten F1, F2of F3 te gebruiken.

11

Door in het grote veld op de rechtermuisknop te drukken verschijnt er een menu. Voorbeeld van instellingen die voor deze toepassing gunstige resultaten geven.

12

Anda mungkin juga menyukai