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
// Alphanumeric LCD Module functions #include #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<
#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_clear();lcd_gotoxy(0,0);lcd_putsf("LCD MATI"); } a=1; lcd_clear();lcd_gotoxy(0,0);lcd_putsf("LCD sudah mati selama 50 detik");
Relay1=1;Relay2=1; delay_ms(100); lcd_clear();lcd_gotoxy(0,0);lcd_putsf("sms init"); sms_init(); LED2=1; lcd_clear();lcd_gotoxy(0,0);lcd_putsf("sms init success");delay_ms(100); lcd_clear();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; lcd_clear(); } //======================================================= 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_clear(); 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_clear();
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_clear(); 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_clear(); 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_clear(); lcd_gotoxy(0,0); lcd_putsf("Gagal kirim SMS");
goto awal_sms; } } }; delay_ms(500); lcd_clear();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; lcd_clear(); 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_clear();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++;
} lcd_clear(); 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_clear();lcd_gotoxy(0,0); lcd_putsf("Pulsa habis"); //send_sms_2(); awal_sms: LED2=0; delay_ms(500); lcd_clear(); 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_clear();lcd_gotoxy(0,0);lcd_putsf("AT+CMGF Success"); LED2=0; delay_ms(100); LED2=1; lcd_clear();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_clear();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_clear(); 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_clear(); 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_clear(); 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_clear(); lcd_gotoxy(0,0); lcd_putsf("Gagal kirim SMS");
goto awal_sms; } } }; //delay_ms(400); lcd_clear();lcd_gotoxy(0,0);lcd_putsf("sending Succces"); delay_ms(100); goto lewat;
} lcd_clear();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; lcd_clear(); 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_clear();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++; } lcd_clear(); 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_clear(); 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_clear();lcd_gotoxy(0,0);lcd_putsf("AT+CMGF Success"); LED2=0; delay_ms(100); LED2=1; lcd_clear();lcd_gotoxy(0,0);lcd_putsf("AT+CMGS"); printf("AT+CMGS=\""); printf(nomor); printf("\""); putchar(0x0D);//ENTER while(getchar()!=0x20){}; //spasi lcd_clear();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_clear(); 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_clear(); 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_clear(); 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_clear(); lcd_gotoxy(0,0); lcd_putsf("Gagal kirim SMS");
goto awal_sms; } }
};
lcd_clear();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; lcd_clear(); 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); lcd_gotoxy(0,1) ; lcd_puts(temp); data2=data-10; if(sensor
//menampilkan nilai ADC potensio1
{ LED1=1;delay_ms(100); sensor=read_adc(0); if(sensor>=data) { goto selesai3; } LED1=0;delay_ms(100); ++rk; } a=0; lcd_clear(); 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_clear();lcd_gotoxy(0,0);lcd_putsf("semding sms return...");delay_ms(100); send_sms_return(); selesai3: Relay1=0;Relay2=0; LED1=0;LED2=0;
} } } }