Bandspelaren Fyran

Johan Hansson & Cecilia Skoglund

Handledare: Bertil Lindvall

EITF11 Digitala projekt

Spellista

  • Hemglassbilen - Robert Sund
  • Blinka lilla stjärna - Ann Taylor och Jane Taylor
  • Levels - Avicii
  • One (Your Name) - Swedish House Mafia

Om projektet

Fyran - Välkommen till framtiden, välkommen hem

För den kräsne musikkonnässören introduceras nu en revolution inom ljud- och musikutbudet: Fyran. Klicka dig fram genom handplockade smultron ur den svenska och europeiska musikskatten. Dröm dig tillbaka till barndomens somrar med ”Glassbilen”. Eller varför inte återuppleva det euforiska Ibiza-dansgolvet med den tidlösa ”Levels”. Allt kristallklart framställt genom en första klassens piezo-högtalare. Den avskalade designen ger ett rent intryck och gör Fyran mycket lätt att ta till sig och använda. En enkel knapptryckning är allt som krävs för att slå på Fyran, byta låt och stänga av Fyran. Välkommen till framtiden, välkommen hem.

Hårdvaran

Komponenter

Till produkten användes följande komponenter:

  • 1st ATmega16 8-bits mikroprocessor
  • 1st D/A-omvandlare D7011C
  • 1st mikrofon
  • 1st piezo-högtalare
  • 1st grön lysdiod
  • 2st 10 kΩ motstånd
  • 1st 7.5 kΩ motstånd
  • 1st 3 kΩ motstånd
  • 1st 2.7 kΩ motstånd
  • 2st 2.2 kΩ motstånd
  • 1st 100 kΩ potentiometer
  • 1st 10 kΩ potentiometer
  • 1st knapp/brytare
  • Experimentkort med lödöar och tillhörande distanser
  • Labbproppsuttag för jord och spänning

Den sammansatta produkten testades med hjälp av en J-TAG.

Datablad

Nedan finner du länkar till de datablad som använts under projektet:

Källkoden

/*
* test.c
*
* Created: 2017-04-12 11:22:42
* Author : Cecilia Skoglund och Johan Hansson
*/

#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>

int main(void){

DDRD = 0b00110000;
PINA = 0x01;
DDRB = 0xFF;
int melodyCounter = 1;
int loopToneActive = 0;

void bOn(){
PORTD = 0b01010000;
PORTD = 0b01000000;
PORTB = 0b11111111;
PORTD = 0b01010000;
PORTD = 0b01110000;
}

void bOff(){
PORTD = 0b01010000;
PORTD = 0b01000000;
PORTB = 0b00000000;
PORTD = 0b01010000;
PORTD = 0b01110000;
}

void generateTone(double delay, int iteration){
if(loopToneActive==0){_delay_ms(200);}
for(int i = 0;i bOn();
_delay_ms(delay);
bOff();
_delay_ms(delay);
}
PORTD = 0b00000000;
}

void loopTone(){
loopToneActive==1;
for(int i = 5;i<20;i++){
generateTone(i,15);
}
for(int i = 20;i>3;i--){
generateTone(i,15);
}
loopToneActive==0;
}

int checkButton(){
if(PIND & (1< melodyCounter++;
loopTone();
_delay_ms(200);
return 1;
}
return 0;
}

void Feliz(){
while(1){
/* D */
generateTone(14,60);
if(checkButton()==1){
break;
}
/* D */
generateTone(14,60);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,120);
if(checkButton()==1){
break;
}
/* D */
generateTone(14,100);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,150);
if(checkButton()==1){
break;
}
/* F# */
generateTone(10.5,300);
if(checkButton()==1){
break;
}
/* D */
generateTone(14,60);
if(checkButton()==1){
break;
}
/* D */
generateTone(14,60);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,120);
if(checkButton()==1){
break;
}
/* D */
generateTone(14,100);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,130);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,300);
if(checkButton()==1){
break;
}
/* D */
generateTone(14,60);
if(checkButton()==1){
break;
}
/* D */
generateTone(14,60);
if(checkButton()==1){
break;
}
/* D */
generateTone(5.3,250);
if(checkButton()==1){
break;
}
/* B */
generateTone(8,200);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,200);
if(checkButton()==1){
break;
}
/* F# */
generateTone(10.7,200);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,150);
if(checkButton()==1){
break;
}
/* C */
generateTone(7.5,100);
if(checkButton()==1){
break;
}
/* C */
generateTone(7.5,100);
if(checkButton()==1){
break;
}
/* B */
generateTone(8,200);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,200);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,150);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,300);
if(checkButton()==1){
break;
}
_delay_ms(200);
}
}

void Twinkle(){
while(1){
/* D */
generateTone(13.8,150);
if(checkButton()==1){
break;
}
/* D */
generateTone(13.8,150);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,200);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,200);
if(checkButton()==1){
break;
}
/* B */
generateTone(8,200);
if(checkButton()==1){
break;
}
/* B */
generateTone(8,200);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,300);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,180);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,180);
if(checkButton()==1){
break;
}
/* F# */
generateTone(10.7,175);
if(checkButton()==1){
break;
}
/* F# */
generateTone(10.7,175);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,160);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,160);
if(checkButton()==1){
break;
}
/* D */
generateTone(13.8,150);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,200);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,200);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,180);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,180);
if(checkButton()==1){
break;
}
/* F# */
generateTone(10.7,175);
if(checkButton()==1){
break;
}
/* F# */
generateTone(10.7,175);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,160);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,200);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,200);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,180);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,180);
if(checkButton()==1){
break;
}
/* F# */
generateTone(10.7,175);
if(checkButton()==1){
break;
}
/* F# */
generateTone(10.7,175);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,160);
if(checkButton()==1){
break;
}
/* D */
generateTone(13.8,150);
if(checkButton()==1){
break;
}
/* D */
generateTone(13.8,150);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,200);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,200);
if(checkButton()==1){
break;
}
/* B */
generateTone(8,200);
if(checkButton()==1){
break;
}
/* B */
generateTone(8,200);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,300);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,180);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,180);
if(checkButton()==1){
break;
}
/* F# */
generateTone(10.7,175);
if(checkButton()==1){
break;
}
/* F# */
generateTone(10.7,175);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,160);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,160);
if(checkButton()==1){
break;
}
/* D */
generateTone(13.8,150);
if(checkButton()==1){
break;
}
_delay_ms(200);
}
}

void Glassbilen(){
while(1){
/* F */
generateTone(11.5,80);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,100);
if(checkButton()==1){
break;
}
/* C */
generateTone(7.5,100);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,100);
if(checkButton()==1){
break;
}
/* F */
generateTone(11.5,160);
if(checkButton()==1){
break;
}
/* F */
generateTone(11.5,80);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,100);
if(checkButton()==1){
break;
}
/* C */
generateTone(7.5,100);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,100);
if(checkButton()==1){
break;
}
/* F */
generateTone(11.5,160);
if(checkButton()==1){
break;
}
/* F */
generateTone(11.5,80);
if(checkButton()==1){
break;
}
/* Bb */
generateTone(8.5,200);
if(checkButton()==1){
break;
}
/* Bb */
generateTone(8.5,110);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,160);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,90);
if(checkButton()==1){
break;
}
/* F */
generateTone(11.5,160);
if(checkButton()==1){
break;
}
_delay_ms(500);
}
}

void Levels(){
while(1){
/* C# */
generateTone(7,100);
if(checkButton()==1){
break;
}
/* B */
generateTone(8,100);
if(checkButton()==1){
break;
}
/* G# */
generateTone(9.5,100);
if(checkButton()==1){
break;
}
/* F# */
generateTone(10.7,100);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
_delay_ms(1500);
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
/* D# */
generateTone(13,85);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
_delay_ms(2000);
/* C# */
generateTone(7,100);
if(checkButton()==1){
break;
}
/* B */
generateTone(8,100);
if(checkButton()==1){
break;
}
/* G# */
generateTone(9.5,100);
if(checkButton()==1){
break;
}
/* F# */
generateTone(10.7,100);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
_delay_ms(1500);
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,75);
if(checkButton()==1){
break;
}
/* C# */
generateTone(14.1,75);
if(checkButton()==1){
break;
}
/* C# */
generateTone(14.1,75);
if(checkButton()==1){
break;
}
/* B */
generateTone(16.4,60);
if(checkButton()==1){
break;
}
/* B */
generateTone(16.4,60);
if(checkButton()==1){
break;
}
_delay_ms(1500);
}
}

void OneIntro(){
int a = 1;
while(a == 1){
for(int i=0;i<4;i++){
generateTone(70,50);
if(checkButton()==1){
break;
}
}
for(int i=0;i<4;i++){
generateTone(70,25);
if(checkButton()==1){
break;
}
}
for(int i=0;i<8;i++){
generateTone(70,12.5);
if(checkButton()==1){
break;
}
}
for(int i=0;i<16;i++){
generateTone(70,5);
if(checkButton()==1){
break;
}
}
for(int i=0;i<32;i++){
generateTone(70,3);
if(checkButton()==1){
break;
}
}
for(int i=0;i<32;i++){
generateTone(70,2);
if(checkButton()==1){
break;
}
}
for(int i=0;i<64;i++){
generateTone(70,1);
if(checkButton()==1){
break;
}
}
for(int i=70;i>60;i--){
generateTone(i,1);
if(checkButton()==1){
break;
}
}
for(int i=60;i>50;i--){
generateTone(i,2);
if(checkButton()==1){
break;
}
}
for(int i=50;i>40;i--){
generateTone(i,3);
if(checkButton()==1){
break;
}
}
for(int i=40;i>30;i--){
generateTone(i,4);
if(checkButton()==1){
break;
}
}
for(int i=30;i>20;i--){
generateTone(i,5);
if(checkButton()==1){
break;
}
}
for(int i=20;i>4;i--){
generateTone(i,6);
if(checkButton()==1){
break;
}
}
generateTone(9,900);
if(checkButton()==1){
break;
}
_delay_ms(500);
a = 0;
}
}

void One(){
OneIntro();
while(1){
/* A */
generateTone(9,150);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,150);
if(checkButton()==1){
break;
}
/* F */
generateTone(11.5,150);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,130);
if(checkButton()==1){
break;
}
/* D */
generateTone(13.8,100);
if(checkButton()==1){
break;
}
/* D */
generateTone(13.8,90);
if(checkButton()==1){
break;
}
/* D */
generateTone(13.8,90);
if(checkButton()==1){
break;
}
/* D */
generateTone(13.8,90);
if(checkButton()==1){
break;
}
/* D */
generateTone(13.8,90);
if(checkButton()==1){
break;
}
_delay_ms(600);
/* D */
generateTone(13.8,70);
if(checkButton()==1){
break;
}
/* D */
generateTone(13.8,70);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,150);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,150);
if(checkButton()==1){
break;
}
/* F */
generateTone(11.5,150);
if(checkButton()==1){
break;
}
/* E */
generateTone(12,130);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,150);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,150);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,150);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,150);
if(checkButton()==1){
break;
}
/* G */
generateTone(10,150);
if(checkButton()==1){
break;
}
_delay_ms(600);
/* G */
generateTone(10,75);
if(checkButton()==1){
break;
}
/* A */
generateTone(9,75);
if(checkButton()==1){
break;
}
_delay_ms(500);
}
}

while(1){
DDRD = 0b01110100;
PORTD = 0x00;
switch(melodyCounter){
case 1 : while(checkButton()==0){}; break;
case 2 : Glassbilen();_delay_ms(400); break;
case 3 : Twinkle();_delay_ms(400); break;
case 4 : Levels(); _delay_ms(400); break; break;
case 5 : One();_delay_ms(400);melodyCounter=1;break;
}
}
}