MICB2 opdracht 3a OUD.

© Harry Broeders.

Deze pagina is bestemd voor studenten van de THRijswijk groep EH2.

Let op! Dit is een oude pagina uit de tijd dat bij MICB2 nog met assembler werd gewerkt. Tegenwoordig gebruiken we C!

Muziek-generator.

Maak een muziek-generator waarvan de output aanwezig is op pen PA6 van poort A. De melodie moet in een tabel worden aangegeven op de in de file muziek.inc aangegeven wijze. De output van pen PA6 wordt aan een versterker met een speaker toegevoerd, waardoor het geluid hoorbaar wordt.

Uitleg en tips.

Muziek bestaat uit tonen. Elke toon heeft zijn eigen frequentie. De frequentie van de zogenaamde concert-A is 440Hz. Een octaaf bestaat uit 12 noten de frequentie van een noot is exact 21/12 = 1,05946309... hoger dan de frequentie van de vorige noot. De twaalf noten heten: A, AIS, B, C, CIS, D, DIS, E, F, FIS, G en GIS. Na 12 noten begint de volgende octaaf (met weer opnieuw 12 noten). De frequentie van de A boven de concert-A is dus exact (21/12)12 = 2 maal zo hoog als de concert-A.

De file muziek.inc bevat een groot aantal EQU statements waarbij een waarde aan de naam van een noot wordt toegekend. Deze waarde komt overeen met het aantal perioden van de E klok van de 68HC11 (2 MHz) dat een halve periode van die betreffende toon duurt.

De concert-A is gedefinieerd als:

A1          EQU     $08E1

Even narekenen: De frequentie van de concert-A is 440Hz. Een periode duurt dus 1/440 = 2272,72... µs. Dit zijn 2272,72 * 2 perioden van de E clock van de 68HC11 die op 2 MHz draait. Een halve periode van de concert-A duurt dus 2272,72 perioden van de E clock. Omdat we alleen maar hele perioden van de E clock kunnen tellen ronden we dit af tot 2273. Dit is in hexadecimale notatie: $08E1. Klopt dus :-)

De muziek die de muziek-generator gaat maken is exact in de maat. Dat wil zegen dat elke noot exact even lang (een "tel") gespeeld wordt. Bij een tijdsduur van 0,5s per noot klinkt de muziek heel redelijk.

De muziek die moet worden gespeeld wordt in een tabel in het geheugen opgeslagen. De eerste regel van deze tabel is als volgt gedefinieerd:

MUZ_TAB     FDB     A2,G2,A2,E2,C2,E2,A1,R

Om deze muziekregel te kunnen spelen moet de muziekgenerator dus eerst een halve seconde noot A2 opwekken, daarna een halve seconde noot G2 enz. Naast de labels voor de noten zijn nog drie speciale labels gedefinieerd die in de muziek tabel gebruikt kunnen worden. Dit zijn:

H           EQU     $0001       ;  herhaal de hele tabel
R           EQU     $0002       ;  rust
S           EQU     $0003       ;  stop het programma

De betekenis van deze speciale labels staat in het commentaar achter de EQU. Let op: De muziektabel wordt nu afgesloten door een S (stop). Als deze S vervangen wordt door een H moet het muziekje continue blijven spelen!

Aanpak.

Maak een stappenplan en tijdsplanning en maak voordat je een (deel)programma gaat coderen eerst een ontwerp op papier.

Alternatief deuntje.

Ben je het "popcorn" muziekje ook een beetje zat? Probeer dan deze eens muziek2.inc (met dank aan Roan de Bruin) of scoop.inc (met dank aan Tim Kortekaas). Wie opent de eerste website voor HC11 muziek? (Weer eens wat anders dan MP3 of beltoontjes ;-).

Martijn Arrachart schreef mij:

De deuntjes zijn in dezelfde code geschreven als de beltoontjes voor een Siemens telefoon. Al deze beltoontjes zijn te gebruiken (mits er een beetje rekening gehouden wordt met de lengte van een toon. Dit is eenvoudig aan te passen).

Op internet zijn zat sites waar nog de 'echte' beltonen te vinden zijn. Niet die duffe dingen die ze opsturen, maar de echte tonen die je lekker 1 voor 1 in kan kloppen op je mobieltje.

Simulator tip.

De THRSim11 simulator heeft een plug-in component die de Output Compare functie van de timer duidelijk laat zien. Op de THR kun je deze plug-in meteen gebruiken (Menu: Connect, Output Compare). Als je deze plug-in ook thuis wil gebruiken dan kun je hem downloaden vanaf http://bd.eduweb.hhs.nl/thrsim11/comp.htm#OCx