Subscribe! Follow me! Add me Facebook! Plus me Google!

Monday, May 7, 2012

AT Command dengan Microcontroller (Code Vision AVR / CVAVR)


             Disini akan diuraikan bagaimana cara pembacaan at command menggunakan Codevision AVR, mulai dari perintah - perintah AT command yang sering dipakai sampai pembuatan dan pemrograman AT Command pada Codevision AVR.

Berikut adalah pengecekan perintah - perintah AT Command yang digunakan :
1. AT , perintah yang dipakai untuk memerintah apakah AT Command sudah terkoneksi
2. AT+CMGF , untuk jenis format yang dipakai apakah berupa teks atau PDU.
3. AT+CMGL , untuk membuka daftar SMS pada SIM card.
4. AT+CMGR , untuk membaca SMS.
5. AT+CMGD , untuk menghapus SMS.
6. AT+CPMS , untuk mengatur memori yang digunakan apakah HP atau SIM card.
7. AT+CBC , untuk mengecek batere HP.
8. AT+CUSD , untuk mengecek pulsa.



Berikut komponen yang digunakan :
1. Sistem minimim mikrokontroler AT Mega16 tanpa RS232.
2. LCD 16x2
3. HP Sony Ericsson T630 (bisa juga untuk seri T610)
4. Headset Sony Ericsson.
4. USB to serial (jika ingin mencoba apakah AT command pada HP berhasil atau tidak)

Berikut langkah - langkah pembuatannya :
1. Persiapkan semua komponen diatas, tanpa itu semua kemungkinan kesalahan bisa terjadi.
2. Buat posisi pin headsetnya hanya RX,TX,GND yang dipakai.





Pin
Name
Description
1
ATMS
Audio to mobile
2
AFMS/RTS
Audio from mobile/RTS (connected to GND in cable?)
3
CTS/ONREQ
CTS/Mobile Station On REQuest (connected to GND in cable?)
4
Data in
Data to mobile (Rx)
5
Data out
Data from mobile (Tx)
6
ACC in
Accessory control to mobile. Used as Rx in some models for flashing.
7
ACC out
Accessory control from mobile/handsfree sense. Used as Tx in some models for flashing
8
AGND
Audio signal ground + 0V reference
9
Flash
Flash memory voltage + Service (shorted to pin 11 in service cable)
10
DGND
Digital ground
11
Vcc
DC + for battery charging + External accessory powering



3. Buka Codevision AVR.
4. New Project.


5. Untuk program serialnya pilih option yang tertera sesuai gambar dibawah ini :


Berikut listing program untuk terima sms dan kemudian mengirim balik statusnya :


#include <mega16.h>
#include <delay.h>                
#include <stdio.h>
#include <lcd.h>
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm

unsigned char cek[100];
unsigned int a,i;
void main(void)

UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
lcd_init(16);

while (1)
    {                
    printf("ATE0");            // perintah agar tidak ada echo
    putchar(0x0D);             // enter    
    while(getchar()!= 'K'){};  // tunggu sampai menerima K / OK
    while(getchar()!=0x0A){};  // tunggu sampai newline / garis baru
    
    reload:      
      printf("AT+CPMS=");      // penempatan memori sms
      putchar('"');
      printf("ME");
      putchar('"');
      putchar(0x0D);             
      while(getchar()!= 'K'){};
      while(getchar()!=0x0A){};   
      printf("AT+CMGF=1");
      putchar(0x0D);             
      while(getchar()!= 'K'){};  
      while(getchar()!=0x0A){};
      printf("AT+CMGL=");      // perintah untuk melihat semua isi sms  
      putchar('"');
      printf("all");
      putchar('"');
      putchar(0x0D);         
      while(getchar()!=0x0A){};
      a=0;
      do{               
        a++;
        cek[a]=getchar();
      }while(cek[a]!=0x0A);   // isi cek[a] dengan no. HP dll selama bukan newline     
      
      if(cek[1]=='O')         // jika tidak ada sms
      {
        for(a=0;a<70;a++){cek[a]=' ';}   // pengosongan array         
        delay_ms(50);
        goto reload;
      }
         
      a=0;
      do{               
        a++;
        cek[a]=getchar();
      }while(cek[a]!=0x0A);  // isi cek[a] dengan isi sms selama bukan newline
                                                                                                     
      if(cek[1]=='R' && cek[2]=='I' && cek[3]=='D' && cek[4]=='L' && cek[5]=='A')  
      {    
        printf("AT+CMGD=1");     // perintah hapus sms di index 1
        putchar(0x0D);
        while(getchar()!='K'){}; 
        while(getchar()!=0x0A){};
        printf("AT+CMGD=1");
        putchar(0x0D);
        while(getchar()!='K'){}; 
        while(getchar()!=0x0A){};
        printf("AT+CMGF=1");
        putchar(0x0D);             
        while(getchar()!= 'K'){};  
        while(getchar()!=0x0A){};
        printf("AT+CMGS=");        // perintah kirim sms
        putchar('"');
        printf("08xxxxxxxxxx");    // no HP tujuan
        putchar('"');
        putchar(0x0D);   
        while(getchar()!=0x3E){};  // tunggu sampai muncul karakter ">"
        delay_ms(5);
        printf("AT Command berhasil");  
        putchar(0x1A);             // CTRL + Z
        while(getchar()!='K'){};   
      }  
       
      else  
      {              
        printf("AT+CMGD=1");
        putchar(0x0D);
        while(getchar()!='K'){}; 
        while(getchar()!=0x0A){};
        printf("AT+CMGD=1");
        putchar(0x0D);
        while(getchar()!='K'){}; 
        while(getchar()!=0x0A){};
        printf("AT+CMGF=1");
        putchar(0x0D);             
        while(getchar()!= 'K'){};  
        while(getchar()!=0x0A){};
        printf("AT+CMGS=");
        putchar('"');
        printf("08xxxxxxxxxx");    // no hp tujuan
        putchar('"');
        putchar(0x0D);   
        while(getchar()!=0x3E){};
        delay_ms(10);
        printf("Format Pesan Salah");
        putchar(0x1A);             
        while(getchar()!='K'){}; 
      }       
      delay_ms(50);           
    };
}

Keterangan : Jika pada alat tidak memakai LCD 16x2, program lcd untuk uji coba jangan dulu dihapus.

53 comments:

  1. kalau bikin perintah kirim sms aja yg sederhananya gmna ya?

    ReplyDelete
  2. hp saya 3220 tapi kenapa rx/txnya ketika dihubungkan dengan mikro tidak berjalan ya?

    ReplyDelete
  3. salam mas...
    mas aku lagi coba sms gateway untuk alat pengaman rumah menggunakan switch magnet, mikrokontroler atmega 32 dan modem wavecom, jadi apabila switch magnet terbuka akan membunyikan buzzer dan langsung mengirim perintah ke modem wavecom untuk mengirim sms. kira2 bisa gk ya make coding mas diatas?yang diedit dibagian mana aja ya mas? mohon bantuanya, terimakasih

    ReplyDelete
    Replies
    1. ok mas...terimakasih.
      nanti saya coba dulu,
      oh ia untuk konfigurasi pin nya gmana ya mas??
      saya kan pake kabel serial, jadi port D nya dipake gk ya mas?? atau langsung colok aj ke port serial di mikro atau ada settingan lain mas?
      thanks mas

      Delete
    2. oh ia mas , saya tes modem ke hyperterminal, saya da setting baudratenya...tapi ketika saya ketik AT di hyperterminal tersebut modem tidak merespon apa2,..itu biasanya kenapa ya mas?

      Delete
    3. saya waktu pake wavecom, perintahnya langsung aja,
      ga pake
      while(getchar()!='K'){};
      while(getchar()!=0x0A){};
      trus buat ambil karakter langsung pake desimalnya aja, kaya buat ctrl+z ->putchar(26);
      jadi gampang hafalnya, hhe

      Delete
    4. mas kalo pake program itu, apa gag ngirim sms terus menerus ketika kondisi sensor aktif,
      soalnya kan pasti looping terus,...
      seharusnya kan sms nya sekali aja kan yaa,

      Delete
  4. berarti saya harus buka serial cable-nya mas,trus saya pasang kaya pin kabel gitu baru saya sambungkan ke port D nya?benar gak mas?
    untuk yang masalah hyperterminal, saya sebelumnya da coba,dan bisa mas.tapi pas saya coba kedua kalinya eh malah gak merespon apa2?

    ReplyDelete
    Replies
    1. ada perubahan setingan program gak mas kalo saya langsung ke port D? karena sebelumnya saya pake port serial dari mikro.
      makasi banyak ya mas

      Delete
    2. oh gitu ya mas...oke deh mas.makasi banyak ya mas,
      tapi mas kemarin saya liat susunan kabel serial nya, kan ada 4 kabel,
      yang kabel no 2 n 3 kan txD dan RxD (di cross ke Tx Rx Mikro)
      trus no 5 kan Ground ( saya sambung ke negatif mikro)
      dan satu lagi yg no 7, nah yang no 7 ini disambung kemana ya mas?
      mohon maaf mas jadi banyak pertanyaan, terimakasih mas atas petunjuknya

      Delete
    3. ok deh mas...
      di codevision nya, ada setingan untuk port D nya gak mas?

      port D nya dibuat output semua ya mas?

      maKASIH mas

      Delete
    4. mas ridla...saya da coba ikutin petunjuk mas di atas..tapi mengapa alat saya belum bisa connect juga ya?padahal saya sudah tambahin IC max232 tapi tetap aja belum bisa terkoneksi.
      pas sensor pintu terbuka, modem belum bisa ngirim sms.baudratenya sudah saya setting di 115200, tapi belum juga koneksi, mengapa ya mas?mohon masukannya.trimakasih

      Delete
  5. mas, kalo pin Tx Rx nya k510i itu yan mana yaa ?
    apakah pake yang DTMS dan DFMS itu ya ma ?
    support ATcommand gag ya ??

    ReplyDelete
    Replies
    1. mm gt yaaa,
      jadi usb.nya bukan yang CTMS dan CFMS itu ya mas ??

      Delete
    2. oiya mas, saya ngukur tegangan di Tx J300i keluarnya 3 volt,
      brarti saya harus pakai rangkaian konverter 3 volt to 5.5 volt pakai ic max3232 ya mas biar bisa diterima sama Rx nya mikro,
      trim mas,...

      Delete
    3. Oke thanks mas,
      hehe

      Delete
  6. mas tolong dibuatkan gambar dong connection dari kabel data sonyericsson ke RX TX nya microcontroller. agak bingung nih

    ReplyDelete
  7. mas aq mau belajar yang buat pengaman b\motor itu gmna ya kalau boleh aq minta petunjuknya,,,
    putra di malang

    ReplyDelete
  8. mas ridla, kalo boleh, minta source code buat ngontrol lampu rumah yaa,
    galangromadhon@gmail.com
    trims ya mas,
    hehe

    ReplyDelete
  9. saya pake hape SE kok gag bisa yaa,
    atau perlu di pull-up dulu ya dari Hapenya ,.??

    ReplyDelete
  10. mas mau tanya klo tipe hp ericsson s868 support at cmd gk yah??
    padahal spek mirip ma ericsson t10s

    ReplyDelete
  11. mas kalau at command buat ngecek sms masuk & baca isi smsnya gimana ya? makasih

    ReplyDelete
  12. mas ridla...saya da coba ikutin petunjuk mas di atas..tapi mengapa alat saya belum bisa connect juga ya?padahal saya sudah tambahin IC max232 tapi tetap aja belum bisa terkoneksi.
    pas sensor pintu terbuka, modem belum bisa ngirim sms.baudratenya sudah saya setting di 115200, tapi belum juga koneksi, mengapa ya mas?mohon masukannya.trimakasih

    ReplyDelete
  13. mas mau tanya itu kabel data nya emg ada ato harus bikin sendri yah???
    aq juga ada T630 nya nih mau coba juga..
    hehe

    ReplyDelete
    Replies
    1. lebih tepatnya dibongkar sih mas,masalahnya konektor headset bawaannya itu cuma buat mic sma speaker aja pinnya,jadi saya rubah biar kabel headsetnya itu bisa konek ke rx tx sama ground.

      Delete
    2. apa itu nantinya bisa dilangsungkan ke port D RXD dan TXD trus ground juga?

      Delete
  14. mas kalo pake format PDU,cek[a]=getchar(); gmn yah ??
    terimakasih

    ReplyDelete
    Replies
    1. nah itu dia mas batasan masalahnya ane ga pernah nyoba PDU,harus dikonversi dulu ribet.

      Delete
  15. hasil keluaran PDU nya harus di konversi dlu ke teks d codingnya?? atau gmn yah hehe... aq pake at+cnmi mas...

    ReplyDelete
    Replies
    1. klo saya sih mas tinggal dirubah aja formatnya pake at commad ga dikonversi pake perintah AT+CMGF = 1

      Delete
  16. permisi gan,,, hape yang pas buat komunikasinya ke mikro itu yang pas cuma SONY ERICSSON T630 DAN T610 aja ya gan?
    hape itu uda pasti support Text mode yah???? AT+cmgf=1????
    aku pake SONY ERICSSON k700 ga bisa text mode gan,,, cuma bisa PDU mode....

    bales ya gan.... thanks

    ReplyDelete
    Replies
    1. iya gan udah pasti support.
      iya at+cmgf=1 buat set text mode.
      nah klo itu ane ga tau gan,agan harus nyoba ngerubah manual gan.ane lagi ga ngepelajarinnya gan.

      Delete
  17. mas saya nyoba coding di atas...nah ketika saya download ke mikro malah otomatis ngirim "format salah" terus...kenapa ya mas???

    ReplyDelete
    Replies
    1. posisi array yang dibandinginnya kali mas yang salah atau coba aja keluarn pake lcd 16x2 atau ke terminal tampilin dulu hasil dari smsnya.

      Delete
  18. misi gan,,, komunikasi antara MCU sama T630 itu perlu konverter kagag? butuh max232?

    ReplyDelete
  19. iya gan... itu perintah
    while (getchar()=!'K'){};
    berarti kita kudu kasih inputan 'K' dulu donk gan? supaya bisa berlanjut???

    ReplyDelete
    Replies
    1. ngg itu K disana tuh balesan dari HPnya sendiri klo kita ketik perintah AT Command dia bakal bales OK kemudian diikuti hasil dari AT Command yang kita ketik itu.

      Delete
  20. kalo beda tipe hp apanya yang dirubah???
    mohon bantuan masih newbie

    ReplyDelete
    Replies
    1. intinya sih asal support AT Command, ga ada masalah di programnya juga sama aja perintahnya.

      Delete
  21. Replies
    1. printf("AT+CMGF=1");
      itu perintah biar format text hasilnya.

      putchar(0x0D);
      ini perintah buat enter.
      jadi setiap kali kita ngasih perintah AT Command ke hp harus pake enter kayak di Command Prompt.

      while(getchar()!= 'K'){};
      while(getchar()!=0x0A){};
      ini cuma ngcek aja klo perintah kita tuh diterima oleh hp, terus K disana adalah hasil balesan dari hp klo perintah kita tuh benar 'OK'

      printf("AT+CMGL=");
      putchar('"');
      printf("all");
      putchar('"');
      putchar(0x0D);
      perintah ini buat ngcek list sms untuk keseluruhan.
      ada juga sih buat nerima hasil sms tuh pake AT+CMGR = 'all' atau AT+CMGR = 1 tergantung indexnya.

      Delete
  22. ini aku uda nyoba gan tapi kok gag berhasil yah buat baca isi sms yang diterima.. mikro ane gag ada efek sama sekali,,
    ini program ane gan

    _______________
    void terima(){
    reload:
    printf("ate0");
    putchar(13);
    delay_ms(300);
    printf("at");
    putchar(13);
    delay_ms(300);
    printf("at+cmgf=1");
    putchar(13);
    delay_ms(300);
    printf("at+cpms=");
    putchar('"');
    printf("me");
    putchar('"');
    putchar(13);
    delay_ms(1000);
    printf("AT+CMGL=");
    putchar('"');
    printf("all");
    putchar('"');
    putchar(13);
    while(getchar()!=0x0a);
    while(getchar()!=0x0a);

    a=0;
    do{
    a++;
    cek[a]=getchar();
    }while(cek[a]!=0x0a);
    x=0;
    for(a=0;a<15;a++)
    {
    putchar(cek[a]);
    x++;
    }

    }

    void cekperintah()
    {
    if (cek[1]=='p'||cek[1]=='P')
    {
    Putus=1;
    }
    else if(cek[1]=='k'||cek[1]=='K')
    {
    Sambung=1;
    }
    else if(cek[1]=='h'||cek[1]=='H')
    {
    Putus=0;
    }

    else if (cek[1]==' ')
    {
    printf("at");
    putchar(13);
    delay_ms(300);
    printf("at+cmgf=1");
    putchar(13);
    delay_ms(300);
    printf("at+cmgs=");
    putchar('"');
    printf("083830706614");
    putchar('"');
    putchar(13);
    delay_ms(800);
    printf("perintah kosong");
    putchar(0x1A);
    delay_ms(500);
    }
    else
    {
    printf("at");
    putchar(13);
    delay_ms(300);
    printf("at+cmgf=1");
    putchar(13);
    delay_ms(300);
    printf("at+cmgs=");
    putchar('"');
    printf("083830706614");
    putchar('"');
    putchar(13);
    delay_ms(800);
    printf("perintah salah");
    putchar(0x1A);
    delay_ms(500);
    printf("at+cmgd=1");
    putchar(13);
    delay_ms(500);
    printf("at+cmgd=1");
    putchar(13);
    delay_ms(500);
    }
    }

    ReplyDelete
    Replies
    1. gan bisa bagi email gag? klo ane butuh sharing di email ya gan?
      ahmad_mufid00@yahoo.co.id

      Delete
    2. klo kirim sms bisa ga gan?
      klo ga bisa berarti ada yg salah dikonektornya atau hpnya.
      tapi klo bisa,coba tampilin nilai hasil smsnya gan k lcd 16x2.

      Delete
    3. nomernya agan brapa?

      Delete
  23. ane newbie gan,,, mohon bantuannya yah gan

    ReplyDelete
  24. makasih mas ini artikel yang saya butuhin pisan
    kang erid tinggal di bandung?
    boleh kita kapan kapan ketemu

    ReplyDelete
  25. ada program yang buat modem wavecom ngk gan, yang pakai IC RS232, ane pengen coba buat nyalakan dan matikan lampu. kl ad tlong d kirim di email sya ya.. di nurulchamzahuye@gmail.com

    ReplyDelete
  26. gan butuh pencerahan untuk memberikan delay pada sms gate way pengiriman diberikan delay

    ReplyDelete
  27. gan kayak mna cara mencobanya gan ? kok ndk mw gue coba ndk mw gan ?
    tlng blas gan

    ReplyDelete

Please correct and comment