Top Banner

of 14

Aplikasi ADC - Pengaman Undervoltage Dan Overvoltage Dengan Menggunakan Mikrokontroller Atmega 128 Melalui ADC0

Oct 15, 2015

Download

Documents

Indra Wahyudi

Contoh Aplikasi ADC pada Mikrokontroller Atmega 128 untuk Pengaman Undervoltage Dan Overvoltage pada Motor Induksi
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript

Pengaman Undervoltage dan Overvoltage dengan menggunakan Mikrokontroller Atmega 128 melalui ADC

By Indra Wahyudi / 1303121014D3 A Teknik Elektro Industri PENS

ADC (Analog Digital Converter) merupakan fitur pada mikrokontroler yang berfungsi untuk mengkonversi sinyal/data dari besaran analog menjadi besaran digital. Mengapa harus di konversi ? Karena sebagian besar data/sinyal yang ada di dunia ini merupakan besaran analog. Pengkonversian data dari analog ke digital merupakan suatu cara untuk mengolah data analog tersebut agar dapat di modifikasi, di manipulasi dan mengubah karakteristiknya.Contoh besaran analog yang sering di temui dalam kehidupan sehari-hari yaitu suhu, cahaya, kecepatan,tegangan, suara, dll. Fitur ADC ini sering digunakan dalam proses industri dan komunikasi digital. ADC inilah yang menghubungkan antara sensor dengan sistem komputer yang telah terintegrasi.

Gambar diatas merupakan lokasi PIN untuk ADC pada Atmega 128. Pada program pengaman ini digunakan ADC 0 saja yang terhubung ke sensor tegangan apakah tegangan terlalu rendah atau terlalu tinggi untuk menjalankan motor.

Gambar Wiring Diagram pada ProteusPada percobaan ini digunakan sensor tegangan yang diumpamakan variable resistor yang kemudian dihubungkan ke ADC 0. ADC 0 akan membaca berapa tegangan yang ada saat ini, ketika variable resistor di geser geser maka pembacaan ADC 0 juga akan berubah ubah. Saat tegangan terlalu rendah maka LED merah akan menyala dan LED lain mati serta motor akan otomatis diputus dari sumber dengan menggunakan relay. Dan saat tegangan terlalu tinggi LED biru akan menyala dan LED lain mati, dan motor juga akan otomatis terputus dari sumber tegangan dengan relay. Buzzer juga akan otomatis berbunyi saat tegangan terlalu rendah atau tinggi. LCD berfungsi untuk menampilkan pembacaan sensor pada ADC dan status motor saat itu Setting Code Wizzard AVR1. Setting Chip

2. Setting LCD pada PORTA

3. Setting ADC Volt referensi AVCC pin dan clock 1000kHz

Program C Codevision AVR

#include #include #include

// Alphanumeric LCD functions#include

#define ADC_VREF_TYPE 0x40

// Read the AD conversion resultunsigned int read_adc(unsigned char adc_input){ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);// Delay needed for the stabilization of the ADC input voltagedelay_us(10);// Start the AD conversionADCSRA|=0x40;// Wait for the AD conversion to completewhile ((ADCSRA & 0x10)==0);ADCSRA|=0x10;return ADCW;}

// Declare your global variables here

void main(void){// Declare your local variables herefloat voltage ;char b[100];int a;// Input/Output Ports initialization// Port A initialization// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00;DDRA=0x00;

// Port B initialization// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00;DDRB=0xFF;

// Port C initialization// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00;DDRC=0x00;

// Port D initialization// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00;DDRD=0x00;

// Port E initialization// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTE=0x00;DDRE=0xFF;

// Port F initialization// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTF=0x00;DDRF=0x00;

// Port G initialization// Func4=In Func3=In Func2=In Func1=In Func0=In // State4=T State3=T State2=T State1=T State0=T PORTG=0x00;DDRG=0x00;

// Timer/Counter 0 initialization// Clock source: System Clock// Clock value: Timer 0 Stopped// Mode: Normal top=0xFF// OC0 output: DisconnectedASSR=0x00;TCCR0=0x00;TCNT0=0x00;OCR0=0x00;

// Timer/Counter 1 initialization// Clock source: System Clock// Clock value: Timer1 Stopped// Mode: Normal top=0xFFFF// OC1A output: Discon.// OC1B output: Discon.// OC1C output: Discon.// Noise Canceler: Off// Input Capture on Falling Edge// Timer1 Overflow Interrupt: Off// Input Capture Interrupt: Off// Compare A Match Interrupt: Off// Compare B Match Interrupt: Off// Compare C Match Interrupt: OffTCCR1A=0x00;TCCR1B=0x00;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;OCR1CH=0x00;OCR1CL=0x00;

// Timer/Counter 2 initialization// Clock source: System Clock// Clock value: Timer2 Stopped// Mode: Normal top=0xFF// OC2 output: DisconnectedTCCR2=0x00;TCNT2=0x00;OCR2=0x00;

// Timer/Counter 3 initialization// Clock source: System Clock// Clock value: Timer3 Stopped// Mode: Normal top=0xFFFF// OC3A output: Discon.// OC3B output: Discon.// OC3C output: Discon.// Noise Canceler: Off// Input Capture on Falling Edge// Timer3 Overflow Interrupt: Off// Input Capture Interrupt: Off// Compare A Match Interrupt: Off// Compare B Match Interrupt: Off// Compare C Match Interrupt: OffTCCR3A=0x00;TCCR3B=0x00;TCNT3H=0x00;TCNT3L=0x00;ICR3H=0x00;ICR3L=0x00;OCR3AH=0x00;OCR3AL=0x00;OCR3BH=0x00;OCR3BL=0x00;OCR3CH=0x00;OCR3CL=0x00;

// External Interrupt(s) initialization// INT0: Off// INT1: Off// INT2: Off// INT3: Off// INT4: Off// INT5: Off// INT6: Off// INT7: OffEICRA=0x00;EICRB=0x00;EIMSK=0x00;

// Timer(s)/Counter(s) Interrupt(s) initializationTIMSK=0x00;

ETIMSK=0x00;

// USART0 initialization// USART0 disabledUCSR0B=0x00;

// USART1 initialization// USART1 disabledUCSR1B=0x00;

// Analog Comparator initialization// Analog Comparator: Off// Analog Comparator Input Capture by Timer/Counter 1: OffACSR=0x80;SFIOR=0x00;

// ADC initialization// ADC Clock frequency: 250,000 kHz// ADC Voltage Reference: AVCC pinADMUX=ADC_VREF_TYPE & 0xff;ADCSRA=0x85;

// SPI initialization// SPI disabledSPCR=0x00;

// TWI initialization// TWI disabledTWCR=0x00;

// Alphanumeric LCD initialization// Connections are specified in the// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:// RS - PORTA Bit 0// RD - PORTA Bit 1// EN - PORTA Bit 2// D4 - PORTA Bit 4// D5 - PORTA Bit 5// D6 - PORTA Bit 6// D7 - PORTA Bit 7// Characters/line: 20lcd_init(20);

while (1) { // Place your code here lcd_gotoxy(0,0); lcd_putsf(" Traffic Voltage"); voltage=read_adc(0) ; a=(voltage*300)/1023; sprintf(b,"Data : %d",a); lcd_gotoxy(0,1) ; lcd_puts(b); lcd_gotoxy(14,1); lcd_putsf("Volt"); if (a242) { if (a242) { PORTB.0=0; PORTB.1=0; PORTB.2=1; PORTE.0=0; PORTE.1=1; lcd_gotoxy(0,2); lcd_putsf("Status :"); lcd_gotoxy(0,3); lcd_putsf("Over Voltage!!!"); } } else { PORTB.0=0; PORTB.1=1; PORTB.2=0; PORTE.0=1; PORTE.1=0; lcd_gotoxy(0,2); lcd_putsf("Status :"); lcd_gotoxy(0,3); lcd_putsf("Normal Voltage"); } } }Dari code diatas dapat dilihat bahwa program yang membaca ADC0 :lcd_gotoxy(0,0); lcd_putsf(" Traffic Voltage"); voltage=read_adc(0) ; a=(voltage*300)/1023; sprintf(b,"Data : %d",a); lcd_gotoxy(0,1) ; lcd_puts(b); lcd_gotoxy(14,1); lcd_putsf("Volt");

Hasil dari skematik & coding diatas dapat dilihat pada gambar berikut :1. Normal voltageProgram :// LED setting PORTB.0=0; PORTB.1=1; PORTB.2=0; //buzzer dan kontrol relay PORTE.0=1; PORTE.1=0; lcd_gotoxy(0,2); lcd_putsf("Status :"); lcd_gotoxy(0,3); lcd_putsf("Normal Voltage");

2. Over voltage, buzzer bunyiProgram : else if (a>242) // a merupakan hasil baca ADC 0 {// LED setting PORTB.0=0; PORTB.1=0; PORTB.2=1; // buzzer dan kontrol relay PORTE.0=0; PORTE.1=1; lcd_gotoxy(0,2); lcd_putsf("Status :"); lcd_gotoxy(0,3); lcd_putsf("Over Voltage!!!"); }

3. Undervoltage, buzzer bunyiProgram : if (a242) //a merupakan hasil baca ADC0 { if (a