Rabu, 30 Mei 2018

LAPORAN UTS PRAKTIK MIKROKONTROLER




LAPORAN
UTS PRAKTIK MIKROKONTROLLER
DOSEN PENGAMPU MUSLIKHIN, M.Pd.






Disusun oleh:
Istiqomah        16507134035  Angkatan 2016



TEKNIK ELEKTRONIKA-D3
PENDIDIKAN TEKNIK ELEKTRONIKA DAN INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS NEGERI YOGYAKARTA
2018


A.    TUJUAN

Setelah melakukan praktik mahasiswa diharapkan dapat:

a.     Memahami konfigurasi I/O, LCD, ADC, dan PWM
b.     Menguasai  I/O, LCD, ADC, dan PWM




B.    ALAT DAN BAHAN
a.    Modul AVR Atmega8535/8/16/32
b.    PC (Personal computer)/laptop
 c. Jumper

C.    SKEMA RANGKAIAN







D.     LANGKAH KERJA

a.         Merangkai alat dan bahan seperti rangkaian di atas;

b.        Membuat program seperti yang tertulis berikut, uji cobakan/simulasikanlah di Proteus lalu coba pada hardware nyata;
c.         Membuat program berikut;

E.     DATA HASIL PRAKTIKUM
Berikut hasil simulasi menggunakan Proteus 8


/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 05/04/2018
Author  : tyery08
Company : embeeminded.blogspot.com
Comments:


Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 11,059200 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>
// Alphanumeric LCD functions
#include <alcd.h>

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here

}

#define ADC_VREF_TYPE 0x20
unsigned char data1,data2;
char lcd_buffer[33];

// Read the 8 most significant bits
// of the AD conversion result
unsigned char 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 ADCH;
}

// Declare your global variables here
    void kec1(unsigned char motor1)
{
OCR1AL=motor1;
PORTD.0=0;
PORTD.1=1;
}
void kec2(unsigned char motor2)
{
OCR1BL=motor2;
PORTD.2=0;
PORTD.3=1;
}
void main(void)
{
// Declare your local variables here

// 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=0x00;

// 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;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 10,800 kHz
// Mode: Fast PWM top=0xFF
// OC0 output: Disconnected
TCCR0=0x4D;
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.
// 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
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

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

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// USART initialization
// USART disabled
UCSRB=0x00;

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

// ADC initialization
// ADC Clock frequency: 691,200 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=0x84;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 2
// RD - PORTC Bit 1
// EN - PORTC Bit 3
// 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")

while (1)
      {
      // Place your code here
             data1=read_adc(0);
kec1(data1);
data2=read_adc(1);
kec2(data2);
lcd_clear();
lcd_putsf("Putaran motor");
lcd_gotoxy(0,1);
sprintf(lcd_buffer,"PWM1=%d",data1);
lcd_puts(lcd_buffer);
lcd_gotoxy(8,1);
sprintf(lcd_buffer,"PWM2=%d",data2);
lcd_puts(lcd_buffer);
delay_ms(100);
      }
}

F.    ANALISA DATA
Pada Projek ini menggunakan mikrokontroler ATMega16 sebagai display menggunakan LCD 16×2. Output yang akan dikontrol kecepatannya yaitu  menneggunakan motor DC sebagai inputnya menggunakan Potensiometer. Disini potensiometer diibarartkan sebagai sensor dan Driver motornya memakai IC L298. Untuk mengatur suatu kecepatan motor yaitu disini menggunakan menggunakan teknik Pulse Width Modulation PWM yaitu dengan mengatur duty cyclenya. Duty cycle itu sendiri menyatakan presentase keadaan logika high dalam satu periode sinyal. Selama satu siklus atau satu periode jika waktu sinyal pada keadaan high sama dengan low maka dapat dikatakan sinyal mempunyai duty cycle 50%. Semakin besar duty cycle atau keadaan high dalam satu periode maka motor akan berputar semakin cepat begitu juga sebaliknya.
Pada projek ini pengaturan duty cyclenya berasal dari input Potensiometer. Potensiometer ini dihubungkan dengan pin ADC mikrokontroler.  Hasil dari konversi nilai Analog ke digital dari potensio ditampilkan pada LCD.  Semakin besar nilai potensio maka motor akan berputar semakin cepat. Timer/counter 1 digunakan untuk membangkitkan 2 channel Pulse Width Modulation (PWM) yang masing-masing berdiri sendiri atau tidak tergantung satu sama lainnya. Timer Mode yang digunakan yaitu mode Fast PWM 8 bit.  Fast PWM memberikan pulsa PWM frekuensi tinggi. Fast PWM berbeda dengan mode PWM lain, Fast PWM berdasarkan operasi single slope. Counter menghitung dari BOTTOM hingga TOP kemudian kembali lagi mulai menghitung berawal dari BOTTOM. Output mode FAST PWM Timer 1 ini yaitu pada Pin OC1A (PORTD.5) dan Pin OC1B (PORTD.4) yang dihubungkan dengan ENA dan ENB pada driver motor L298D.


G.    KESIMPULAN
       Berdasarkan hasil praktikum yang telah dilakukan dan teori yang telah ada maka dapat disimpulkan bahwa pada proyek ini menggunakan mikrokontroler ATMega16 sebagai display menggunakan    LCD 16×2. Output yang akan dikontrol kecepatannya yaitu  menneggunakan motor DC sebagai inputnya menggunakan Potensiometer serta PWM. Potensiometer diibarartkan sebagai sensor dan Driver motornya memakai IC L298





Tidak ada komentar:

Posting Komentar