Académique Documents
Professionnel Documents
Culture Documents
Aplikasi yang akan kita buat ini berfungsi untuk meng ON-OFF kan pin ouput
microcontroller melalui SMS.
Pin-pin output yang kita gunakan adalah PORTC yang sudah terhubung ke LED.
Untuk men ON-OFF kan ouput, format sms yang harus dikirm #CMD.
Isi CMD merupakan data biner 4bit, misal:
Untuk input kita gunakan tombol yang terhubung ke PIND.2, saat tombol di tekan
microcontroller akan mengirim SMS PIND.2= ON.
Dalam aplikasi kita akan menggunakan LCD, RS232 dan interrupt jadi sebelum
mencoba artikel ini simak dahulu artikel tentang LCD dan RS232.
'
'***********main program*********
No_hp = "+6285646690454"
'No_hp = Quote(no_hp)
Portc = &HFF
Call Loading
Print "Connection OK"
Enable Interrupts
Enable Int0
On Int0 Kirim_sms
Do
Input Data_masuk
Toggle Led
Pjg_data = Len(data_masuk)
'periksa apakah ada data CMTI?
Cmti_pos = Instr(data_masuk , "CMTI")
If Cmti_pos <> 0 Then
Index_pos = Instr(data_masuk , ",")
posisi index sms yg baru masuk berada setelah koma ","
Incr Index_pos
Pjg_sms_index = Pjg_data - Index_pos
Incr Pjg_sms_index
'
Loop
'***********subroutine*********
Sub Loading
Local Geser As Byte , Ulang As Byte
For Ulang = 1 To 2
Cls
Lcd Chr(6)
Lcd Chr(32)
Lcd "AVRku-IndoLab"
Lcd Chr(6)
Locate 2 , 1
Lcd "loading"
For Geser = 0 To 5
Lcd Chr(0)
Waitms 200
Next Geser
Next Ulang
End Sub
Kirim_sms:
Print "AT+CMGS=" ; Chr(34) ; No_hp ; Chr(34) ; Chr(44) ;
Chr(13) ; Chr(10)
Print "PIND.2= ON" ; Chr(26)
Cls
Lcd "Kirim SMS ke:"
Lowerline
Lcd No_hp
Waitms 200
Gifr = 64
Return
End
PORTC.7 diberi nama Led (nama pengganti agar mudah diingat). Pin ini
digunakan sebagai indikator data yang masuk lewat RS232, setiap ada data yang
masuk maka PORTC.7 akan di on-off.
PORTC d setting sebagai output. Selain PORTC.7 kita juga akan menggunakan
PORTC.0, PORTC.1, PORTC.2 dan PORTC.3
PIND.2 digunakan sebagai input, pin ini merupakan pin INTERRUPT
EXTERNAL 0 jadi sekalian kita akan belajar cara memakai interrupt di
BASCOM AVR.
nilai Debounce merupakan nilai delay untuk mengantisipasi bouncing saat tombol
yang terhubung ke PIND.2 ditekan.
Deflcdchar 0 , 32 , 32 , 32 , 31 , 31 , 31 , 32 , 32
'
'
Config Lcd = 16 * 2
Const _lcdport = Portb
Const _lcdddr = Ddrb
Const _lcdin = Pinb
Const _lcd_e = 2
Const _lcd_rw = 1
Const _lcd_rs = 0
Cursor Off
Declare Sub Loading
setting untuk LCD dan mendaftarkan sub routine Loading agar dikenali oleh
Bascom AVR.
No_hp = "+6285646690454"
Nomer HP yang dituju,/ nomer HP user. Ganti sesuaikan dengan nomer HP yang
anda gunakan.
Call Loading
Proses pada subroutine Loading hanya berupa animasi karakater pada LCD saat
awal microcontroller dijalankan, just 4 fun
Enable Interrupts
Enable Int0
On Int0 Kirim_sms
Dari code diatas bisa dilihat bahwa micro akan mengirim sms nomer hp user.
Gifr=64 menset nilai bit ke enam pada register GIFR, bit ke enam pada GIFR
untuk flag untuk INT0. Nilai ini perlu di set saat interrupt terjadi mencegah
pemanggilan ulang interrupt ketika terjadi bouncing penekanan tombol. Untuk
latihan coba hilangkan baris code ini, lalu lihat apa yang terjadi saat tombol
ditekan?
Input Data_masuk
Toggle Led
Data yang masuk ditampung pada variabel Data_masuk. Setiap ada data yang
masuk, maka led (PORTC.7) di ON-Off
Pjg_data = Len(data_masuk)
Perintah Len untuk mengetahui jumlah data yang masuk (panjang data)
Instr digunakan untuk mengetahui posisi string pada sebuah data. Pada contoh ini
string yang kita cari adalah CMTI.
'
Saat Cmti_pos tidak sama dengan 0 berarti dalam variabel Data_masuk sudah
ditemukan string CMTI yang menandakan ada sms baru.
Proses yang dilakukan pada code diatas yaitu mencari karakter koma untuk
mengetahui posisi index.
Selanjutnya mencari tahu berapa digit panjang index nya, apakah 2 digit atau
hanya 1 digit. Perlu di ketahui m1206b bisa menyimpan sms dari index 1 20.
Logika yang dipakai untuk mencari panjang digit ini dengan menggunakan
perintah: Pjg_sms_index = Pjg_data Index_pos
Setelah posisi dan panjang didapat, sekarang waktunya memisahkan index dari
variable Data_masuk kemudian ditampung ke variabel Sms_index
menggunakan perintah: Sms_index = Mid(Data_masuk, Index_pos,
Pjg_sms_index)
Data2 variabel yang sudah didapat akan ditampilkan di LCD.
Data command yang sudah bertipe biner lalu dikeluarkan ke PORTC (tapi di
NOT kan dulu karena LED-LED yang terhubung ke output bersifat active-low)
Posted by zigan
Comments :
13 comments to Bascom AVR, Mega16,Wavecom Fastrack M1206B, SMS
mas, saya pake siemens M35i. data berupa PDU. untuk membaca data bisa
dilakukan dengan lancar, tetapi untuk pengiriman, masih error pada respon
hpnya. kira2 salahnya apa ya mas?? saya pakai perintah echo off biar gk
ada karakter balik dari hp. yang saya tanyakan, format CR /chr(13) dan
LF/chr(10) dari bascom gimana? di tulisan program diatas ada
"AT+CMGS";chr(34);no_hp;chr(34);chr(44);chr(13);chr(10)
setelah ada reply dari hp berupa "> " lalu kita masukkan pesan diikuti
chr(26)
padahal dengan syntax print "AT" tanpa chr(13) maupun chr(10) sudah
ada reply "OK"
gimana ya mas??? terima kasih
Anonim mengatakan...
on
11 Agustus 2011 11.48
Wah tutorialnya sangat bagus gan. Saya sudah mencoba sebagian kode ini
dan ternyata berhasil. Terima kasih banyak atas tutorialnya.
Pernah bikin koneksi serial melalui CSD gak mas? Saya lagi nyoba tapi
belum sukses, No Carrier terus. Kalau pernah buat koneksi serial via CSD
mohon dishare ya gan.
Terima kasih
Anonim mengatakan...
on
25 Agustus 2011 23.41
mas tanya bagaimana dengan komunikasi GPRS apakah konfigurasi pin2
nya sama??
Anonim mengatakan...
on
Lcd No_hp
Waitms 200
Gifr = 64
'Sub Loading
Return
End
Kirim_sms1:
Print "AT+CMGS=" ; Chr(34) ; No_hp ; Chr(34) ; Chr(44) ; Chr(13) ;
Chr(10)
Print "Laporan 2" ; Chr(26)
Cls
Lcd "Laporan Terkirim:"
Lowerline
Lcd No_hp
Waitms 200
Gifr = 64
Return
End
dan saya nambahkan pusbotom nya di PINA.0 tapi deklarasi Kirim_sms1
eror terus.. kenapa ya..???
Do
If Pina.0 = 0 Then
Kirim_sms1 <<< ini eror..
Wait 1
End If
Loop
jadi ketika tombol 1 di tekan maka sms dikirim ke suatu nomor hp yang
dituju>.
====================================================
Programnya sederhana, seperti ini saja :
$regfile = m16def.dat
$crystal = 16000000
$baud = 9600
Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.2 , Db4 = Portc.4 ,
Config Lcdpin = Pin , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Config Lcd = 16 * 2
Cursor Off
Cls
Lcd Kirim SMS.
Waitms 500
Print AT+CMGS=;
-no HP penerima
Print 083840761524
Waitms 700
-isi SMS
Print Tes Kirim SMS;
Print Chr(26)
Wait 1
Lowerline
Lcd SMS terkirim
End
Untuk mengganti nomor HP penerima sms, cukup ganti baris 15 : Print
083840761524 dengan nomor HP yang dikehendaki. Isi SMS juga dapat
diganti, yaitu dengan mengganti perintah Print Tes Kirim SMS; dengan is sms
yang diinginkan.