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