judul
Breaking News
Loading...
Selasa, 11 Februari 2014

Mengakses ISD2560/90/120 dengan AVR (ATmegaXXXX)

Selasa, Februari 11, 2014
Ketika kita berbicara tentang voice record, hal pertama yang terlintas ke pikiran kita adalah sebuah pemutar kaset tua di mana kita merekam suara, dan pemutaran rekaman suara. That's opening Bro :)

ISD2560 merupakan salah satu chip recorder yang memiliki kualitas bagus untuk melakukan perekaman atau putar ulang selama 60 detik. Perlengkapan CMOS juga termasuk didalamnya, microphone preamplifier, automatic gain control (AGC), antialiasing filter, smoothing filter, dan speaker amplifier (Anonim, 2003).


Dalam hal kualitas suara, ISD2560 memiliki masukan sampling frequency sekitar 8.0 KHz. Contoh suara akan disimpan secara langsung ke dalam IC pada bagian nonvolatile memory tanpa proses digitalisasi dan kompresi, sehingga suara yang tersimpan tidak akan hilang jika sumber daya pada IC dilepas. Penyimpanan suara analog secara langsung dengan bantuan microphone, sedangkan tiruan dari suara asli, musik, nada, dan efek suara bisa dimasukkan ke dalam IC ini dengan bantuan kabel keluaran audio yang disambungkan dengan salah satu pin dari IC.


Selain itu, ISD2560 juga bisa dihubungkan dengan mikrokontroler. Jalur alamat dan jalur kendali bisa dihubungkan dengan input/output pada mikrokontroler dan dapat dimanipulasi untuk menampilkan variasi dari tugas. Termasuk didalamnya kumpulan pesan yang terekam, urutan pesan suara, serta pengelolaan pesan suara yang ada di dalam ISD2560.


Fitur yang dimiliki ISD2560 sebagai berikut (Anonimb, 2003):
  1. Mudah untuk menggunakan ISD2560 sebagai perekam dan putar ulang.
  2. Memiliki kualitas yang bagus pada suara asli ataupun suara tiruan.
  3. Saklar manual ataupun mikrokontroler bisa digunakan pada saat putar ulang, yaitu dengan memberikan pulsa aktivasi.
  4. Memiliki durasi rekam atau putar ulang selama 60 detik.
  5. Jika membutuhkan durasi yang lebih panjang, IC bisa disambungkan secara seri.
  6. Jika pesan suara yang direkam ada banyak, bisa digunakan alamat-alamat yang terdapat pada ISD2560


Pada saat melakukan perekaman suara ke ISD2560 perlu diperhatikan langkah-langkah sebagai berikut :
  1. Tentukan alamat suara terlebih dahulu, merupakan tempat untuk menyimpan suara hasil rekaman dengan mengatur dip switch, pada pin 1 sampai pin 8. Pin 9 dan pin 10 dihubungkan dengan ground karena digunakan mode pengalamatan sedangkan pin 1 sampai pin 8 digunakan sebagai bit-bit alamat pada IC suara.
  2. Tekan switch1 dan switch2 secara bersamaan dan tahan pada saat merekam. Switch1 ditekan agar pin CE terhubung ke ground (LOW) sehingga dapat mengaktifkan proses perekaman, sementara switch2 ditekan agar pin P\R terhubung ke ground (LOW) juga sehingga akan dilakukan proses merekam (jika pin P\R diset HIGH maka akan menjadi proses putar ulang).
  3. Berikan masukan berupa suara yang telah diedit melalui software pengolah suara, dari output audio komputer melalui pin ANA IN dan ground, selain itu juga bisa menggunakan rangkaian MIC yang telah terhubung ke pin 17 dan pin 18 pada IC suara.
  4. Lepas switch1 dan switch2 untuk menghentikan proses perekaman.
Untuk mengetahui hasil suara yang telah direkam, yaitu dengan menentukan alamat suara yang ingin didengar suaranya kemudian tekan switch1 sehingga pin CE menjadi LOW dan proses putar ulang akan dimulai (dalam hal ini pin P\R pada kondisi HIGH). Setelah proses putar ulang selesai, maka otomatis suara akan berhenti. Untuk melakukan reset, pada pin PD diatur pada kondisi HIGH.

Untuk mempermudah akses, tanpa harus mengubah hardware silahkan copy coding dibawah ini :
Coding ini dibuat dengan menggunakan software CodeVisionAVR.


/*****************************************************
Project : 
Version : 
Date    : 7/9/2013
Author  : azizmetronet
Company : Az-Robot Indonesia
Website : www.indo-robotic.blogspot.com


Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 8.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega16.h>
#include <stdio.h>
#include <delay.h>
//unsigned char buff[30];

// Alphanumeric LCD functions
#include <alcd.h>

#define ADC_VREF_TYPE 0x40
#define isd_lower_address   PORTD
//#define isd_higher_address   PORTC
#define A8 PORTC.6
#define A9 PORTC.7
#define tombolsatu  PINB.0
#define tomboldua   PINB.1
#define tomboltiga  PINB.2
#define tombolempat PINB.3
#define PR  PORTC.5
#define PD  PORTC.4
#define CE  PORTC.3


int AddIsd[]={25,50,75,100,125,150,175,200,225,250,275,300,325,350,375,400};
char *Data[]={"0","1","2","3","4","5","6","7","8","9","Se","Ratus","Puluh","Ribu","Rupiah","Juta"}; 
char *Tampil;
char x=0;

unsigned int delay;
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
// Place your code here
    delay++;
}
void Tunda_Ms(int DelayMs)
{
TCNT0=0x00;
delay=0;
while(delay<DelayMs){;}
}

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

// Declare your global variables here
void ISD_Almt_Hex(volatile unsigned int data)
{  
volatile unsigned char isd_higher_address;  
   isd_lower_address=data& 0x00FF;;
   isd_higher_address=(data>>8) & 0x00FF; 
   switch (isd_higher_address) {
        case 0 :A8=0;A9=0;
        break;
        case 1 :A8=1;A9=0;
        break;
        case 2 :A8=0;A9=1;
        break;
        case 3 :A8=1;A9=1;  
        break;
    }; 
} 
//ISD_Almt_Hex(ADCL,ADCH)
void perintah_putar()
{
    PD=0;
    lcd_gotoxy(0,0);
    lcd_putsf("play"); 
    PR=1;
    CE=0;
    delay_ms(25);
    CE=1;
    Tunda_Ms(2000);;  // waktu penyimpanan  
    //delay_ms(4500);
    PD=1;
    delay_ms(25);
    PD=0;  
    
    lcd_gotoxy(7,0);
    lcd_putsf("stop");  
}
//
void perintah_rekam()
{ 
    PD=0;
    lcd_gotoxy(0,0);
    lcd_putsf("record");
    PR=0;      
    CE = 0;
    Tunda_Ms(2000);  
    //delay_ms(4500);
    CE = 1;
    if(CE==0){PD=0;}
    else{PD=1;delay_ms(25);PD=0;}
    lcd_gotoxy(7,0);
    lcd_putsf("stop");  
}
//
void Addres()
{
    if(tomboltiga==0){while(tomboltiga==0){delay_ms(50);}
        
        lcd_clear();
        x++;   
        if(x>=18){x=0;}          
        ISD_Almt_Hex(AddIsd[x]);
        Tampil=Data[x];  
        lcd_gotoxy(0,1);
        lcd_puts(Tampil);
        
        } 
    if(tombolempat==0){while(tombolempat==0){delay_ms(50);} 
        lcd_clear();
        if(x==0){x=18;}
        x--;      
        ISD_Almt_Hex(AddIsd[x]);
        Tampil=Data[x];    
        lcd_gotoxy(0,1);
        lcd_puts(Tampil);
        

        }  
}

Diatas adalah progam untuk merekam dan memutar suara dengan tundaan waktu 2 detik, yang saya buat menggunakan interupsi timer. kemudian mengirim perintah STOP ( PD=1;delay_ms(25);PD=0;)
Pengalamatan untuk ISD2560, angka 60 yang  saya blok merah tersebut menunjukan durasi waktu pemutaran (play back) dan perekam (record) suara.

Karena ada yang bertanya tentang pengalamatan ISD2560, maka akan saya jelaskan secara ilmiah dan teoritis.Pengalamatan untuk ISD2560, angka 60 detik dengan lebar alamat 10bit (1023), 0b1111111111. Dengan asumsi 60 detik =1023 (addres), maka 30 detik adalah 512(alamat). 
Prosedur perekaman:
  1. Kirim perintah Rekam
  2. Kirim Alamat 0b0000000000 (alamat ke- nol).
  3. Durasi tundaan = 2 detik
  4. Kirim Stop
Alamat selanjutnya setelah 2 detik adalah 34 (alamat).
Well Done and Easy. Selamat berkarya.

3 komentar:

  1. permisi numpang tanya, bagaimana cara pengalamatan pada isd2560 jika saya akan melakukan dua kali perekaman agar suaranya tidak tertumpuk dan dapat diputar berbeda?

    BalasHapus
  2. Sudah Saya jelaskan pada artikel diatas kakak, silahkan dipelajari lagi. :)

    BalasHapus
  3. Coba Baca Artikel Saya mengenai pemutar suara dengan Wav Player.
    http://indo-robotic.blogspot.com/2014/06/mikrokontroller-dan-wav-player-module.html

    BalasHapus

 
Toggle Footer