setelah berhasil membuat downloader EEPROM serial (I2C) kepikiran juga buat ngemanfaatin eeprom ini untuk nyimpan sesuatu. Bisa aja digunakan menyimpan data text untuk project lovehurts sehingga tulisannya lebih panjang. Tapi kali ini akan saya pergunakan untuk menyimpan data wav
Langkah-langkah yang perlu dikuasai adalah:
1. Memutar wav file (PCM 8bit mono) yang pernah dibahas disini
2. Akses EEPROM dengan I2C menggunakan library Pfleury , untuk librarynya bisa didownload disini
Kita bahas dulu cara akses I2C menggunakan TWIMASTER Pfleury, ada i2cmaster.h (include) i2cmaster.S (add source code) dan twimaster.c (dicopy saja). Secara default library ini menggunakan aturan port SDA / SCL dari ATMEGA, sehingga untuk ATTiny2313 edit i2cmaster.S dibagian ini :
Code:
;***** Adapt these SCA and SCL port and pin definition to your target !! ; #define SDA 5 // SDA Port B, Pin 5 #define SCL 7 // SCL Port B, Pin 7 #define SDA_PORT PORTB // SDA Port B #define SCL_PORT PORTB // SCL Port B
Penggunaan library ini menggunakan beberapa perintah seperti berikut :
#define Dev24C64 0xA0
define ini berguna sebagai addressing i2C, karena bus i2C dapat dicascade
untuk IC 24C64 menggunakan addressing 8bit = 1,0,1,0, A2, A1, A0, [direction] , sehingga jika menggunakan 1 buah ic saja maka nilai define adalah 0xA0
i2c_init(); : inisialisasi awal
i2c_start_wait(Dev24C64+I2C_WRITE);
i2c_rep_start(Dev24C02+I2C_READ);
masukkan adress IC + Arah , dalam include sudah di define I2C_WRITE = 0 , I2C_READ =1
sequence untuk menulis :
Code:
i2c_start_wait(Dev24C64+I2C_WRITE) i2c_write(0x05); // tulis alamat memory = 5 i2c_write(0x75); // masukkan nilai 0x75ke EEPROM i2c_stop(); // set stop conditon = release bus
sequence untuk membaca data secara satu persatu :
Code:
i2c_start_wait(Dev24C02+I2C_WRITE); // awal menulis alamat dulu i2c_write(0x05); // tulis alamat yang akan dibaca = 5 i2c_rep_start(Dev24C02+I2C_READ); // mode baca baca = i2c_readNak(); // baca byte dari EEPROM i2c_stop();
sequence untuk membaca seluruh data EEPROM secara berulang :
Code:
i2c_rep_start(Dev24C02+I2C_READ); // mode baca for(;;) baca=i2c_readAck(); // baca terus berulang
setelah mengerti langkah2 ini, maka isi dari ic eeprom dapat diakses dengan mudah.
>> UBAH FILE AUDIO MENJADI FORMAT WAV -PCM -8bit -Mono - 6000hz (48kbps)
caranya ? gunakan software WAVEPAD atau yang lain ..untuk IC 24C64 panjang audio yang dapat diputar berkisar 1.2 - 1.5 detik ...wah pendek banget...ya karena memang tanpa kompresi kok...
selanjutnya jangan lupa download langsung file wav tadi ke dalam ic seperti penjelasan sebelumnya.
SKEMATIK :
*)) ralat R2 dan R3 = 4K7 ohm
lepaskan koneksi ke SDA/SCL ke MOSI/SCK (setelah pull up 4k7)pada saat programming, sehingga IC eeprom tidak terhapus dan pin ISP tidak ter pull up
SCRIPT
Jika masih bingung, harap membaca pembahasan sebelumnya untuk memutar wav di mega8515 , karena hanya diubah sedikit saja
Code:
#define F_CPU 8000000UL #include <stdint.h> #include <avr/io.h> #include <avr/interrupt.h> #include "i2cmaster.h" //#define SAMPLE_RATE 8000; #define Dev24C64 0xA0 int sample_count; //inisialisasi PWM void pwm_init(void) { // gunakan OC1A sebagai output DDRB = _BV(PB3); /* * clear OC1A on compare match * set OC1A at BOTTOM, non-inverting mode * Fast PWM, 8bit */ TCCR1A = _BV(COM1A1) | _BV(WGM10); /* * Fast PWM, 8bit * Prescaler: clk/1 = 8MHz * PWM frequency = 8MHz / (255 + 1) = 31.25kHz */ TCCR1B = _BV(WGM12) | _BV(CS10); /* set initial duty cycle to zero */ OCR1A = 0; /* Setup Timer0 */ TCCR0B|=(1<<CS00); TCNT0=0; TIMSK|=(1<<TOIE0); sample_count = 4; sei(); //Enable interrupts } ISR(TIMER0_OVF_vect) { sample_count--; // menggunakan 4 step if (sample_count == 0) { sample_count = 4; OCR1A = i2c_readAck(); // baca memory secara loop } } int main(void) { i2c_init(); pwm_init(); //inisialisasi baca secara terus menerus i2c_rep_start(Dev24C64 + I2C_READ); while(1);//muter terus }
hasilnya seru kayak gini nih......
kalo bisa pake memory yang lebih besar biar lebih panjang lagunya
0 komentar:
Post a Comment