Pada praktek kali ini kita akan memanfaatkan ATtiny 2313 sebagai controller untuk mengirim sms ketika tombol ditekan
Baud rate untuk komunikasi RS232 adalah 9600, sehingga sebelum menggunakan modem (modem yg dipake modem wavecom dengan port rs232) perlu diset baud rate nya 9600 dengan AT command melalui PC dengan software terminal seperti hyperterminal atau putty. Ingat secara default modem wavecom memiliki baudrate 115200 sehingga koneksi awal menggunakan baudrate 115200. Setting juga mode control dari komunikasi serial yang hanya menggunakan 3 kabel (tx rx gnd) sehingga dipilih control mode = none.
AT+IPR=9600<enter>
OK
AT+IFC=0,0<enter>
OK
AT&W<enter>
Rangkaian elektronik nya sebagai berikut : (klik untuk memperjelas)
**) xtal yg digunakan nilainya khusus (7372800), jika menggunakan yg umum (4/8 mhz) atau default 1Mhz maka akan terjadi error 0,2%, tetapi tidak terlalu signifikan jika hanya kirim sms
***) ketika tombol ditekan maka micro akan mengirimkan perintah ke wavecom untuk mengirim sms
Inisialisasi Awal
#define F_CPU 7372800UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
//definisi baudrate RS232
#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Inisialisasi command2 AT COMMAND sebagai variabel constant
//ganti nomer HP
const char sms[] PROGMEM= "AT+CMGS=0812345678\r test dari micro";
const char smsend[] PROGMEM= {0x1A}; // ascii dari CTRL+Z
Routine untuk inisialisasi USART
void init_usart(void)
{
UCSRB |= (1 << RXEN) | (1 << TXEN);
UCSRC |= (1 << UCSZ0) | (1 << UCSZ1);
UBRRL = BAUD_PRESCALE;
UBRRH = (BAUD_PRESCALE >> 8);
UCSRB |= (1 << RXCIE); //interupt serial usart
}
Routine untuk kirim karakter melalui RS232
void USART_Tx(unsigned char data)
{
while (!(UCSRA & (1<<UDRE)));{} // wait till transmit Data register is empty
UDR = data; // Send data to the computer
}
void kirim_text(const char *data)
{
while (pgm_read_byte(data) != 0x00)
USART_Tx(pgm_read_byte(data++));
}
Routine interupt untuk membaca tombol dan kirim sms
SIGNAL (SIG_INT0)
{
kirim_text(sms);
kirim_text(smsend);
}
int main(void)
{
GIMSK |= (1<<INT0) ; // tombol interupt 0
MCUCR |= (1<<ISC01)| (1<<ISC00); //rising edge interupt
init_usart(); // inisialisai komunikasi usart
sei(); //hidupkan interupt
while(1)
{
}
}
Jika menggunakan clock external / xtal , jangan lupa untuk mengaktifkan clock external dari Attiny di fusebit/CKSEL, pilihlah frek yg high.
Aplikasi pada contoh praktek kali ini dapat digunakan juga dalam berbagai keperluan, diantaranya:
- Alarm (contoh pintu terbuka langsung kirim sms, sensor menggunakan limit switch)
- Deteksi level tegangan AC jika drop langsung kirim sms (sensor menggunakan komparator)
- Deteksi level air, misal untuk pendeteksi banjir maka otomatis mengirim sms (sensor level air sederhana menggunakan transistor FET)
- dsb
SELAMAT MENCOBA
0 komentar:
Posting Komentar