Diana DELIU (332CA), Alexandru CONSTANTIN (333CB)
Advanced Music Player
Autorii pot fi contactati la adresele:
Login pentru adresa
Login pentru adresa
Introducere
Advanced Music Player se traduce intr-un music shuffler, actionat printr-un buton, care reda muzica pe un difuzor PWM de 6cm.
Dupa conectarea la o sursa de curent, redarea unei melodii aleatorie incepe automat, iar in cazul in care se doreste o noua melodie, se apasa butonul. Niciodata nu stii ce-ti pregateste soarta. (
I'm feeling lucky Music Player)
Proiectul se constituie din placuta de baza standard si o placuta suplimentara, cu materialele personalizate. In final, el trebuie sa redea muzica in format .wav, melodiile putand fi schimbate cu ajutorului butonului USER SWITCH. Se vor folosi un socket card SD, un difuzor si, bineinteles, un card SD care va contine melodii.
Descriere generală
Pe langa componentele standard (folosite de toata lumea), am mai conectat un socket pentru card SD, un card SD (pentru stocarea melodiilor in format .wav) si un difuzor de 3cm pentru redarea melodiilor.
Am folosit SPI pentru comunicare seriala (Serial Peripheral Interface), un standard sincron ce opereaza in mod full-duplex (master-slave), unde master-ul initiaza transferul de date, iar slave-ul raspunde.
Comunicatia se intampla in felul urmator:
master-ul trimite un bit pe linia MOSI, iar slave-ul il citeste de pe aceeasi linie
slave-ul trimite un bit pe linia MISO, iar master-ul il citeste de pe aceeasi linie
SPI Control Register (SPCR)
SPE - SPI Enable - cand este 1, SPI este pornita
DORD - Data Order - cand este 1, bitul cel mai putin semnificativ este transmis primul
MSTR - Master/Slave Select - 1 inseamna ca interfata functioneaza in modul master si in modul slave, cand e 0
CPOL, CPHA, SPR1, SPR0 pentru linia SCLK
SPI Status Register (SPDR)
Hardware Design
Software Design
Am lucrat in Programmer’s Notepad si am folosit WinAVR.
Headers
<avr/io.h>
<avr/interrupt.h>
<util/delay.h>
<avr/sleep.h>
<avr/wdt.h>
<string.h>
<stdio.h>
<stdlib.h>
Functii :
SPI_init()
SPI_receive()
SPI_transmit(BYTE data)
static void SPI_release () → comunicare
pentru trimitere comanda spre cardul SD, am folosit static BYTE send_command(BYTE cmd, DWORD arg)
pentru initializare disk – DSTATUS disk_initialize()
pentru citire sector partial DRESULT disk_readp(BYTE *buf, DWORD lba, WORD offset, WORD cnt)
pentru scriere sector partial – DRESULT disk_writep(const BYTE *buf, DOWRD sa)
ISR(PCINT2_vect)
ISR(TIMER0_COMPA_vect)
ISR(TIMER2_COMPA_vect)
void Timer0_init(void)
void Timer1_init(void)
void Timer2_init(void)
void IO_init(void)
DWORD load_header(void) – incarca header-ul unui fisier
UINT play (const char *path) – functie care reda un fisier audio
void getWavs(const char *dir) – citeste primele 2 fisiere si le memoreaza pentru a putea fi folosite
Surse:
sd.h
diskio.h
sd.c
diskio.h
integer.h
adv_music.c
Makefile
pff.c
pff.h
ARHIVA PROIECT