DAFTAR PUSTAKA Anonim, 20012, 8-bit Microcontroller with 4K Bytes In-System Programmable Flash, Atmel Corporation Anton, 2007, Sensor Suhu LM35, http://www.elektronika-elekronika.blogspot. com/sensor Suhu LM35.htm Dr. S.S.Riaz Ahamed. Role of Zigbee technology in future data communication system. Journal of Theoretical and Applied Information Technology, Vol.5 No. 2, pp 129-135, 2005. Arifin, Z., 2008, Sistem Akuisisi Data Suhu Menggunakan Mikrokontroler AT89S51, http://www.electronicslab.com/sistemakuisisi Data Suhu Menggunakan Mikrokontroler AT89S51.htm Joaldera, 2010, ISD1420 Sebagai Penyimpan Suara, http://jo-elektricsblogs.com/ ISD1420 Sebagai Penyimpan Suara.htm Malvino, A., 1984, Prinsip-Prinsip Elektronika Jilid 1, Jakarta: Erlangga. Schommers, 1982, Elektronika Untuk Pemula, Jakarta: Penerbit Gramedia. Suryono, 2005, Mikrokontroler ISP MCS-5,Lab Elektronika & Instrumentasi Fisika Undip. Suryono, 2005, Workshop Elektronika Dasar, Lab Elektronika & Instrumentasi Fisika Undip. Sutrisno. 1987, Elektronka dan Penerapannya Jilid 2, Bandung: Penerbit ITB. Woollard, B., 1999, Elektronika Praktis, Jakarta: Pradnya Paramita.
LAMPIRAN
#include <mega16.h> #include <stdio.h> #include <stdlib.h> #include <delay.h> #include <string.h> #include <ctype.h> // Alphanumeric LCD Module functions #include <alcd.h> #define ADC_VREF_TYPE 0x00 #ifndef RXB8 #define RXB8 1 #endif #ifndef TXB8 #define TXB8 0 #endif #ifndef UPE #define UPE 2 #endif #ifndef DOR
#define DOR 3 #endif #ifndef FE #define FE 4 #endif #ifndef UDRE #define UDRE 5 #endif #ifndef RXC #define RXC 7 #endif #define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<DOR) #define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC) #define LED1 PORTA.6 #define LED2 PORTA.5 #define LED3 PORTA.4
#define button1 PIND.5 #define button2 PIND.6 #define button3 PIND.7 #define Relay1 PORTB.2 #define Relay2 PORTB.3 // USART Receiver buffer #define RX_BUFFER_SIZE 8 char rx_buffer[rx_buffer_size]; #if RX_BUFFER_SIZE <= 256 unsigned char rx_wr_index,rx_rd_index,rx_counter; #else unsigned int rx_wr_index,rx_rd_index,rx_counter; #endif // This flag is set on USART Receiver buffer overflow bit rx_buffer_overflow; // USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) char status,data;
status=ucsra; data=udr; if ((status & (FRAMING_ERROR PARITY_ERROR DATA_OVERRUN))==0) rx_buffer[rx_wr_index++]=data; #if RX_BUFFER_SIZE == 256 // special case for receiver buffer size=256 if (++rx_counter == 0) #else if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE) rx_counter=0; #endif rx_buffer_overflow=1; #ifndef _DEBUG_TERMINAL_IO_ // Get a character from the USART Receiver buffer #define _ALTERNATE_GETCHAR_ #pragma used+
char getchar(void) char data; while (rx_counter==0); data=rx_buffer[rx_rd_index++]; #if RX_BUFFER_SIZE!= 256 if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #endif #asm("cli") --rx_counter; #asm("sei") return data; #pragma used- #endif // USART Transmitter buffer #define TX_BUFFER_SIZE 8 char tx_buffer[tx_buffer_size]; #if TX_BUFFER_SIZE <= 256 unsigned char tx_wr_index,tx_rd_index,tx_counter; #else unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif // USART Transmitter interrupt service routine interrupt [USART_TXC] void usart_tx_isr(void) if (tx_counter) --tx_counter; UDR=tx_buffer[tx_rd_index++]; #if TX_BUFFER_SIZE!= 256 if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0; #endif #ifndef _DEBUG_TERMINAL_IO_ // Write a character to the USART Transmitter buffer #define _ALTERNATE_PUTCHAR_ #pragma used+ void putchar(char c) while (tx_counter == TX_BUFFER_SIZE); #asm("cli") if (tx_counter ((UCSRA & DATA_REGISTER_EMPTY)==0))
tx_buffer[tx_wr_index++]=c; #if TX_BUFFER_SIZE!= 256 if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0; #endif ++tx_counter; else UDR=c; #asm("sei") #pragma used- #endif //Declare your global variables here //============================================================ ===================== lash unsigned char *nomor="081338645290"; flash unsigned char *isi1="warning: LCD MATI : PULSA: "; flash unsigned char *isi2="warning: LCD MATI : PULSA: "; flash unsigned char *isi4="warning: LCD Telah Hidup Kembali : PULSA: "; //============================================================ ========== int a=0; //int b; int sensor;
char temp[6]; int eeprom *pointer_eeprom; int data; int data2; int abc; //======================================== unsigned char rk=0; void send_sms(void); void sms_init(void); void sms_init_at(void); void send_sms_pulsa (void); void send_sms_return(void); //void check_jam(void); // 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; interrupt [EXT_INT0] void ext_int0_isr(void) unsigned char rr=0; PORTA.7=0; while (rr<120) LED1=1;delay_ms(100); LED1=0;delay_ms(100); sensor=read_adc(0); if(sensor<=data) goto selesai; ++rr; lcd_gotoxy(0,0);lcd_putsf("lcd MATI"); a=1; lcd_gotoxy(0,0);lcd_putsf("lcd sudah mati selama 50 detik");
Relay1=1;Relay2=1; delay_ms(100); lcd_gotoxy(0,0);lcd_putsf("sms init"); sms_init(); LED2=1; lcd_gotoxy(0,0);lcd_putsf("sms init success");delay_ms(100); lcd_gotoxy(0,0);lcd_putsf("sending sms ");delay_ms(100); send_sms_pulsa(); LED1=0; goto selesai2; selesai: selesai2: delay_ms(200); //LED1=0; LED3=0;LED2=0;Relay2=0;Relay1=0; //======================================================= void sms_init(void) printf("ate0"); //set command tanpa echo putchar(0x0d);//enter while(getchar()!='k'); //menunggu OK //while(getchar()!=0x0a); //menunggu new line
LED2=0; delay_ms(100); ; void sms_init_at(void) printf("at"); //set command tanpa echo putchar(0x0d);//enter while(getchar()!='k'); //menunggu OK //while(getchar()!=0x0a); //menunggu new line delay_ms(100); ; //======================================================= // Send SMS pada saat lcd mati void send_sms(void) char dat; awal_sms: LED2=0; delay_ms(500); lcd_gotoxy(0,0); lcd_putsf("kirim SMS"); sms_init_at(); LED2=1;
printf("at+cmgf=1"); putchar(0x0d);//enter while(getchar()!=0x0a); while(getchar()!=0x0a); delay_ms(500); printf("at+cmgs=\""); printf(nomor); printf("\""); putchar(0x0d);//enter while(getchar()!=0x20); //spasi delay_ms(100); printf(isi1); putchar(0x1a); //kirim Ctrl+z putchar(0x0d);//enter while((dat=getchar())!=0x0a) if (dat=='o') if(getchar()=='r') getchar(); delay_ms(500);
lcd_gotoxy(0,0); lcd_putsf("gagal kirim SMS"); goto awal_sms; ; while((dat=getchar())!=0x0a) if (dat=='o') if(getchar()=='r') getchar(); delay_ms(500); lcd_gotoxy(0,0); lcd_putsf("gagal kirim SMS"); goto awal_sms; ;
while((dat=getchar())!=0x0a) if (dat=='o') if(getchar()=='r') getchar(); delay_ms(500); lcd_gotoxy(0,0); lcd_putsf("gagal kirim SMS"); goto awal_sms; ; while((dat=getchar())!=0x0a) if (dat=='o') if(getchar()=='r') getchar();
delay_ms(500); lcd_gotoxy(0,0); lcd_putsf("gagal kirim SMS"); goto awal_sms; ; delay_ms(500); lcd_gotoxy(0,0);lcd_putsf("sending Succces"); //======================================================= // Kirim sms Plus check Pulsa apabila lcd mati void send_sms_pulsa(void) char ram_bebas3; unsigned char take_char3[]; char dat_cusd; char data_pulsa[]; int w3; int a;int b;
int count; int nilai; char *temporary; char dat; dat_cusd=0; ram_bebas3=0; temporary=0; w3=0; nilai=0; count=0; sms_init(); LED2=1;delay_ms(10); ulang: dat_cusd=0; printf("at+cusd=1,*888#"); putchar(0x0d);//enter while(getchar()!=0x0a); while (getchar()!='+'); for (b=0;b<=13;b++) dat_cusd=getchar();
if(dat_cusd=='4') b=0; lcd_gotoxy(0,0);lcd_putsf("gagal ulang lagi"); count++; itoa(count,temporary); lcd_gotoxy(0,1);lcd_puts(temporary); if(count>=20) //jika gagal CUSD sebanyak 20 kali lcd_gotoxy(0,5);lcd_puts("wait"); count=0; LED2=0; delay_ms(60000); sms_init_at(); goto ulang; while(getchar()!='.'); while(ram_bebas3!='.') ram_bebas3=getchar(); take_char3[w3] = ram_bebas3; w3++;
for (a=0;a<=w3-2;a++) lcd_gotoxy(a,1); lcd_putchar(take_char3[a]); data_pulsa[a]=take_char3[a]; ; delay_ms(300); nilai= atol(data_pulsa); if(nilai<=5000) LED2=0; lcd_gotoxy(0,0); lcd_putsf("pulsa habis"); //send_sms_2(); awal_sms: LED2=0; delay_ms(500); lcd_puts(""); lcd_gotoxy(0,0); lcd_putsf("sms_init"); sms_init();
LED2=1; printf("at+cmgf=1"); putchar(0x0d);//enter while(getchar()!='k'); delay_ms(10); lcd_gotoxy(0,0);lcd_putsf("at+cmgf Success"); LED2=0; delay_ms(100); LED2=1; lcd_gotoxy(0,0);lcd_putsf("at+cmgs"); //sms_init_at(); printf("at+cmgs=\""); printf(nomor); printf("\""); putchar(0x0d);//enter while(getchar()!=0x20); //spasi lcd_gotoxy(0,0);lcd_putsf("at+cmgs spasi"); LED2=0; delay_ms(100); LED2=1; printf(isi2); putchar(0x0d);//enter puts(data_pulsa); putchar(0x1a); //kirim Ctrl+z
putchar(0x0d);//enter while((dat=getchar())!=0x0a) if (dat=='o') if(getchar()=='r') getchar(); delay_ms(500); lcd_gotoxy(0,0); lcd_putsf("gagal kirim SMS"); goto awal_sms; ; while((dat=getchar())!=0x0a) if (dat=='o') if(getchar()=='r') getchar();
delay_ms(500); lcd_gotoxy(0,0); lcd_putsf("gagal kirim SMS"); goto awal_sms; ; while((dat=getchar())!=0x0a) if (dat=='o') if(getchar()=='r') getchar(); delay_ms(500); lcd_gotoxy(0,0); lcd_putsf("gagal kirim SMS"); goto awal_sms;
; while((dat=getchar())!=0x0a) if (dat=='o') if(getchar()=='r') getchar(); delay_ms(500); lcd_gotoxy(0,0); lcd_putsf("gagal kirim SMS"); goto awal_sms; ; //delay_ms(400); lcd_gotoxy(0,0);lcd_putsf("sending Succces"); delay_ms(100); goto lewat;
lcd_gotoxy(0,0); lcd_putsf("pulsa Masih banyak"); send_sms(); lewat: ; //======================================================= // Kirim sms Plus check Pulsa apabila lcd mati void send_sms_return(void) char ram_bebas3; unsigned char take_char3[]; char dat_cusd; char data_pulsa[]; int w3; int a;int b; int count; char *temporary; char dat; dat_cusd=0; ram_bebas3=0; temporary=0; w3=0; count=0;
sms_init(); LED2=1;delay_ms(10); ulang: dat_cusd=0; printf("at+cusd=1,*888#"); putchar(0x0d);//enter while(getchar()!=0x0a); while (getchar()!='+'); for (b=0;b<=13;b++) dat_cusd=getchar(); if(dat_cusd=='4') b=0; lcd_gotoxy(0,0);lcd_putsf("gagal ulang lagi"); count++; itoa(count,temporary); lcd_gotoxy(0,1);lcd_puts(temporary); if(count>=20) //jika gagal CUSD sebanyak 20 kali lcd_gotoxy(0,5);lcd_puts("wait"); count=0;
LED2=0; delay_ms(60000); sms_init_at(); goto ulang; while(getchar()!='.'); while(ram_bebas3!='.') ram_bebas3=getchar(); take_char3[w3] = ram_bebas3; w3++; for (a=0;a<=w3-2;a++) lcd_gotoxy(a,1); lcd_putchar(take_char3[a]); data_pulsa[a]=take_char3[a]; ; delay_ms(300); awal_sms: LED2=0;
delay_ms(500); lcd_puts(""); lcd_gotoxy(0,0); lcd_putsf("sms_init"); sms_init(); LED2=1; printf("at+cmgf=1"); putchar(0x0d);//enter while(getchar()!='k'); delay_ms(10); lcd_gotoxy(0,0);lcd_putsf("at+cmgf Success"); LED2=0; delay_ms(100); LED2=1; lcd_gotoxy(0,0);lcd_putsf("at+cmgs"); printf("at+cmgs=\""); printf(nomor); printf("\""); putchar(0x0d);//enter while(getchar()!=0x20); //spasi lcd_gotoxy(0,0);lcd_putsf("at+cmgs spasi"); LED2=0; delay_ms(100);
LED2=1; printf(isi4); putchar(0x0d);//enter puts(data_pulsa); putchar(0x1a); //kirim Ctrl+z putchar(0x0d);//enter while((dat=getchar())!=0x0a) if (dat=='o') if(getchar()=='r') getchar(); delay_ms(500); lcd_gotoxy(0,0); lcd_putsf("gagal kirim SMS"); goto awal_sms; ; while((dat=getchar())!=0x0a)
if (dat=='o') if(getchar()=='r') getchar(); delay_ms(500); lcd_gotoxy(0,0); lcd_putsf("gagal kirim SMS"); goto awal_sms; ; while((dat=getchar())!=0x0a) if (dat=='o') if(getchar()=='r') getchar(); delay_ms(500);
lcd_gotoxy(0,0); lcd_putsf("gagal kirim SMS"); goto awal_sms; ; while((dat=getchar())!=0x0a) if (dat=='o') if(getchar()=='r') getchar(); delay_ms(500); lcd_gotoxy(0,0); lcd_putsf("gagal kirim SMS"); goto awal_sms;
; lcd_gotoxy(0,0);lcd_putsf("sending Succces"); delay_ms(100); ; //======================================================= void tulis_data_ke_eeprom(void) //pointer_eeprom = index; *pointer_eeprom=data; //======================================================= void baca_data_ke_eeprom(void) data=*pointer_eeprom; //======================================================= // Declare your global variables here void main(void) // Declare your local variables here PORTA=0x00; DDRA=0xFC; PORTB=0x00;
DDRB=0xFF; PORTC=0x00; DDRC =0x00; PORTD=0xE0; DDRD=0x00; //TCCR0=0x02; //TCNT0=0x00; //OCR0=0x96; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: khz // Mode: Normal top=ffffh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00;
OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x04; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; /* // ADC initialization // ADC Clock frequency: 1000.000 khz // ADC Voltage Reference: AREF pin // ADC Auto Trigger Source: ADC Stopped // Only the 8 most significant bits of // the AD conversion result are used // ADMUX=ADC_VREF_TYPE & 0xff; // ADCSRA=0x83; */ // ADC initialization // ADC Clock frequency: 62.500 khz
// ADC Voltage Reference: AREF pin // ADC Auto Trigger Source: ADC Stopped ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x87; // External Interrupt(s) initialization // INT0: On // INT0 Mode: Falling Edge // INT1: Off // INT2: Off GICR =0x40; MCUCR=0x03; MCUCSR=0x00; GIFR=0x40; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0xD8; UCSRC=0x86;
UBRRH=0x00; UBRRL=0x33; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // Alphanumeric LCD initialization // Connections specified in the // Project Configure C Compiler Libraries Alphanumeric LCD menu: // RS - PORTC Bit 0 // RD - PORTC Bit 1 // EN - PORTC Bit 2 // D4 - PORTC Bit 4 // D5 - PORTC Bit 5 // D6 - PORTC Bit 6 // D7 - PORTC Bit 7 // Characters/line: 16 lcd_init(16); //=== Global enable interrupts #asm("sei") mulai:
abc=0; PORTA.7=0; pointer_eeprom=0;//alamat eeprom yg akan ditulis/dibaca //pointer_eeprom_suhu=2; baca_data_ke_eeprom();//memanggil fungsi baca eeprom while (1) //============================================================ ========== //Tombol 1 untuk testing Kirim sms if (button2==0) Relay1=1;Relay2=1; delay_ms(700); ; send_sms_pulsa(); delay_ms(500); Relay1=0;Relay2=0; LED2=0; //============================================================ ========== //Tombol 3 untuk setting parameter LCD contras
if (button3==0) delay_ms(100); while(1) lcd_gotoxy(1,0);lcd_putsf("setting"); LED3=1; delay_ms(100); sensor=read_adc(0); itoa(sensor,temp);//menampilkan nilai ADC potensio1 lcd_gotoxy(0,1) ; lcd_puts(temp); if (button2==0)//jika ditekan maka akan menulis data=0 ke EEPROM sensor=read_adc(0); data=sensor; delay_ms(300); tulis_data_ke_eeprom(); LED3=0;delay_ms(100); goto mulai;
; //================monitoring lcd mati ====================================================== if (a==0) sensor=read_adc(0); itoa(sensor,temp);//menampilkan nilai ADC potensio1 lcd_gotoxy(0,1) ; lcd_puts(temp); if(sensor>=data) ; PORTA.7=1; if (a==1) sensor=read_adc(0); itoa(sensor,temp); //menampilkan nilai ADC potensio1 lcd_gotoxy(0,1) ; lcd_puts(temp); data2=data-10; if(sensor<data2) while (rk<100)
LED1=1;delay_ms(100); sensor=read_adc(0); if(sensor>=data) goto selesai3; LED1=0;delay_ms(100); ++rk; a=0; lcd_gotoxy(0,0);lcd_putsf("lcd hidup kembali"); Relay1=1;Relay2=1; delay_ms(200); lcd_gotoxy(0,0);lcd_putsf("sms initing..."); sms_init_at(); lcd_gotoxy(0,0);lcd_putsf("sms init succes...");delay_ms(100); lcd_gotoxy(0,0);lcd_putsf("semding sms return...");delay_ms(100); send_sms_return(); selesai3: Relay1=0;Relay2=0; LED1=0;LED2=0;