You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Floppykoret er et musikalsk kor som hovedsakelig består av diskettstasjoner. Diskettstasjoner er gamle bjeffende monstere som en gang i prehistorisk tid ble brukt til dataoverføring. Som oftest endte bruken opp med en bunke ødelagte disketter, tapte filer og mye banning. Pang!ene kan påstå at alt var mye bedre før, men... Uansett! Vendepunktet kom da man oppdaget av diskettstasjoner kan bli temmet til å synge i kor, og det er nettop dette artikkelen handler om.

Spesifikasjoner

  • Diskettstasjonene må kunne stables.
  • En tonegenerator (ATTiny85) med eget lite kretskort per diskettstasjon.
  • En master (ATMega) per diskettstabel.
  • Tonegeneratorene mottar via synkron serieoverføring (data+klokke, 8b). Synkronisering oppnås ved oppstart ved at master venter minst 20ms mellom hver hele byte som sendes.
  • Masteren mottar MIDI fra en musikkspiller, og setter i gang/stopper passende tonegenerator(er) der det passer.

Diskettstasjon

Diskettstasjoner stammer fra en tid hvor datamaskiner ikke var like spreke som i dag, og hvor hardwaren måtte gjøre mye av arbeidet. Å snakke med en diskettstasjon er dermed ganske simpelt, siden den allerede inneholder en del smarts (blant annet en stepper-motor driver og kontroll-logikk). For å få en musikalsk diskettstasjon er det i hovedsak tre IO linjer på 34-pinns kontakten man trenger å bruke: /STEP, DIRECTION, og /DIVE_ENABLE. Disse kjøres av alle 3 IO pinnene på tonegeneratoren som ikke er i bruk til seriekomunikasjon.

Tonegenerator

onegeneratoren er basert på en ATTiny85. 2 IO pinner + /RESET brukes til komunikasjon, mens de andre 3 IO pinnene brukes til å styre diskettstasjonen. Selve tonen lages ved å kjøre en klokke inn på /STEP, samt å snu på DIRECTION når det passer seg. For å starte/endre tonen som spilles av tonegeneratoren, så sender masteren et MIDI-tone nummer. Tonegeneratoren vil da bare stoppe hvis man sender samme MIDI-tone + 128. Grunnen til dette, er for å forenkle hvordan masteren behandler innkommende note-off: de bare videreformidles blindt til alle tonegeneratorene. MIDI-toner langt utenfor brukbare frekvenser kan også brukes til ekstrafunksjoner, som rekalibrering av lese/skrivehode posisjon i diskettstasjonen, slutte å spille en tone uansett hvilken tone som spilles, og eventuelt signalisere at det kommer en kjent stemmetone på seriekomunikasjon-datalinjen (for stemming av ATTiny'enes internoscillator).

Master

Masteren tar inn MIDI i realtime over UART (56 000 baud, 8b1), og sender note-on/note-off videre til tonegeneratorene. Det er derfor viktig at den holder rede på hvilken tonegenerator som er i bruk på hvilke MIDI kanaler. Den første masteren i kjeden har også som oppgave å evaluere hvor mange tonegeneratorer som skal startes for en inkommende tone, basert på velocity og pitch. Hvis alle tonegeneratorene på en master allerede spiller toner fra før, vil nye toner kunne sendes videre til neste master over UART. Unntaket er hvis det er siste master i kjeden, hvor eldste igangsatte tone overskrives med den nye tonen.

Avspiller

Den letteste måten å spille av på, er å bruke UART-USB med en MIDI-spiller på PC hvor det er mulig å velge MIDI-port for avspilling (for eksempel vanBasco's Karaoke Player), LoopMIDI virtuell MIDI-port driver, og "Hairless MIDI ↔ Serial Bridge" verktøyet. Man kobler i USBen til den første masteren, starter LoopMIDI, lager en virtuell port, starter Hairless, setter baud-rate og velger COM port, velger den virtuelle MIDI-porten som input, starter MIDI-spilleren, velger den virtuelle MIDI-porten som output, og så er det bare å laste en .mid fil. Det er også verd å merke at General-Midi har en effektkanal som ikke støttes, men i vanBasco's kan man skru av enkeltkanaler under avspilling.

  • No labels