MODUL IX
ANTARMUKA MIKROKONTROLER
DENGAN MOTOR DC
TUJUAN
·
Mengetahui,dan
memahami bagaimana mengantarmukakan mikrokontroler dengan motor DC.
·
Mengetahui,
memahami dan mempraktekkan pemrograman mikrokontroler untuk mengatur arah
putaran motor DC.
·
Mengetahui,
memahami dan mempraktekkan pemrograman mikrokontroler untuk mengatur kecepatan
putaran motor DC dengan PWM (Pulse Width
Modulation).
MOTOR DC
Motor DC memerlukan suplai tegangan
searah pada kumparan medan untuk diubah menjadi energi mekanik. Kumparan medan
pada motor DC disebut stator (bagian yang tidak berputar dan kumparan jangkar
disebut rotor (bagian yang berputar). Jika terjadi putaran pada kumparan jangkar
dalam medan magnet, maka akan timbul tegangan (GGL) yang berubah-ubah arah pada
setiap setengan putaran, sehingga menghasilkan tegangan bolak-balik.
Gambar 9.1 Gambar
9.2
Catu tegangan DC dari baterai menuju ke
lilitan melalui sikat yang menyentuh komutator, dua segmen yang terhubung
dengan dua ujung lilitan. Kumparan satu lilitan pada Gambar 9.1 disebut angker
dinamo, Angker dinamo adalah sebutan untuk komponen yang berputar di antara
medan magnet.
Cara kerja motor DC: (1) Arus medan
(DC) yang mengalir pada belitan medan akan menghasilkan medan magnet. Medan magnet ini akan memotong
belitan jangkar yang ada di rotor motor DC; (2) Belitan jangkar dialiri arus
listrik. Karena belitan berarus listrik ini berada dalam pengaruh medan magnet,
maka pada belitan akan timbul gaya magnet yang selanjutnya akan menimbulkan
torsi; (3) Jika torsi awal yang dihasilkan lebih besar daripada torsi beban,
maka jangkar akan berputar.
Gambar 9.4 Rangkaian driver
motor
1. Buka program Code Vision AVR
2. Buatlah project baru. Setelah mengeset chip dan clock, set juga bagian
PORTD sebagai output, Timer1 dan ADC seperti Gambar 9.5. Kemudian simpanlah
file tersebut.
Gambar
9.5 Setting PORTD, Timer1, dan ADC
1. Tuliskan script berikut dalam program utama:
while (1)
{
OCR1A=255;
PORTD.0=1;
PORTD.1=0;
2. Perhatikan arah putaran motor, ke arah mana motor berputar (CW atau
CCW)?
3. Ubah nilai PORTD.0 dan PORTD.1 sesuai tabel berikut dan catat hasilnya
No
|
PORD.0
(IN1)
|
PORD.1
(IN2)
|
Kondisi Motor / Arah Putar
|
1
|
0
|
0
|
Mati
|
2
|
0
|
1
|
Cww/berlawanan arah jarum jam
|
3
|
1
|
0
|
Cw/searah jarum jam
|
4
|
1
|
1
|
Pengerman/berhenti
|
4. Untuk mengubah kecepatan motor DC dengan PWM, ganti script dalam
program utama menjadi seperti berikut:
while (1)
{
// Place your code here
OCR1A=read_adc(0);
PORTD.0=1;
PORTD.1=0;
}
5. Hubungkan multimeter ke Vout potensiometer, putar potensiometer sampai
multimeter menunjukkan nilai 0V!Ukur dan catat tegangan pada terminal OUTA dan OUTB serta catat kondisi
motor DC!
6. Putar potensiometer sampai multimeter menunjukkan nilai 2V!Ukur dan
catat tegangan pada terminal OUTA dan
OUTB serta catat kondisi motor DC!
7. Putar potensiometer sampai multimeter menunjukkan nilai maksimum!Ukur
dan catat tegangan pada terminal OUTA
dan OUTB serta catat kondisi motor DC!
8. Ubah register TCCR1B menjadi 0x02, build lalu download program ke
mikrokontroler!
9. Putar potensiometer hingga maksimal lalu putar kembali pelan-pelan
hingga motor berhenti, ukur dan catat tegangan output potensiometer, tegangan
terminal OUTA, dan tegangan terminal OUTB pada saat motor berhenti!
10. Ubah register Timer1 menjadi TCCR1A=0xC1 dan TCCR1B=0x04; (Compare
Mode Out A = Inverting; Prescaller =
256)
11. Build lalu download program ke mikrokontroler
12. Ulangi langkah 8-10
`
DATA HASIL PERCOBAAN
DATA HASIL PERCOBAAN
Tabel 9.1
No
|
PORD.0
(IN1)
|
PORD.1
(IN2)
|
Kondisi Motor /
Arah Putar
|
Tegangan
OUT A
|
Tegangan
OUT B
|
1
|
0
|
0
|
Mati
|
0v
|
0v
|
2
|
0
|
1
|
Cww/berlawanan arah jarum jam
|
4v
|
0,68v
|
3
|
1
|
0
|
Cw/searah jarum jam
|
0.73v
|
3,92v
|
4
|
1
|
1
|
Pengerman/berhenti
|
4,75v
|
4,73v
|
Tabel 9.2
Langkah Percobaan
|
TCCR1A
|
TCCR1B
|
Tegangan Potensio
|
Tegangan OUT A
|
Tegangan OUT B
|
Kondisi Motor
|
Duty Cycle
|
8
|
0x81
|
0x04
|
0 V
|
0,3
|
0,6
|
Berputar pelan
|
0%
|
9
|
0x81
|
0x04
|
0,6
|
1,9
|
Berputar sedang kekanan
|
40%
|
|
10
|
0x81
|
0x04
|
Max (4,8)
|
0,9
|
2,9
|
Berputar kekanan
|
100%
|
12
|
0x81
|
0x02
|
0
|
0.3
|
1,5
|
Berhenti
|
0%
|
15 a
|
0xC1
|
0x04
|
0 V
|
1
|
3,1
|
Berputar cepat kiri
|
0%
|
15 b
|
0xC1
|
0x04
|
2 V
|
0,9
|
2,8
|
Berputar sedang kiri
|
40%
|
15 c
|
0xC1
|
0x04
|
Max (4,8)
|
0,5
|
2
|
Berputar pelan kiri
|
100%
|
ANALISA DATA
1. Analisa tabel 9.1!
Pada
saat PORTD.0=1; PORTD.1=0; maka motor akan berputar berlawanan arah jarum jam (CCW).
Vout A = 0,75V dan Vout B = 4,02V.
·
Pada saat PORTD.0=0; PORTD.1=1;
maka motor akan berputar searah jarum jam (CW). Vout A = 4,09V dan Vout B =
0,7V.
·
Pada saat PORTD.0 dan PORTD.1
sama-sama diberi logika 0, motor tidak berputar dan Vout A = 132,8mv dan Vout B
= 135,3mv. Sementara jika keduanya diberi logika 1, motor juga tidak berputar
tetapi tegangan outputnya berbeda yaitu sebesar : Vout A = 4,7V dan Vout B =
4,6V
2. Dengan melihat data pada tabel 9.2, bandingkan hasil percobaan langkah
nomor 8-10 dengan langkah nomor 15!
Pada tabel hasil percobaan ini terdapat 2
percobaan dengan settingan yang berbeda dari settingan yang berbeda ini juga
mengakibatkan hasil yang sangat jauh berbeda. Pada settingan yang pertama
TCCR1A = 0x81 dan TCCR1B = 0x04, settngan ini mencakup langkah percobaan8, 9
dan 10 Pada langkah percobaan 8 tegangan potensio di set menjadi 0 volt
sehingga out A mempunyai tegangan 2,3 volt dan out B 2,3 volt. Kondisi ini
menyebabkan motor tidak bergerak, karena tidak ada perbedaan potensial antara
out A dan out B. Pada langkah percobaan nomor 9 tegangan potensio diatur
menjadi 2 volt, sehingga tegangan pada out A adalah 1,35 volt dan pada out B
3,33 volt. Kondisi motor berjalan pelan dan diketahui duty cyclenya adalah 40
%. Out A dan out B sama-sama memiliki tegangan, namun motor DC tetap bisa
berputar karena tegangan out B jauh lebih tinggi darpada out A. Pada langkah
percobaan nomor 10 tegangan potensio diset menjadi max sehingga tegangan pada
out A sebesar 0,75 volt dan ou B sebesar
4,0 volt dan diketahui duty cycle sebesar 46 %.
Pada settingan yang pertama TCCR1A = 0xC1 dan TCCR1B = 0x04, settngan
ini mencakup langkah percobaan 15a, 15b dan 15c. Pada langkah percobaan 15a
tegangan potensio di set menjadi 0 volt sehingga out A mempunyai tegangan 0,75
volt dan out B 3,94 volt. Kondisi ini menyebabkan motor berputar cepat, dan
diketahui duty cycle adalah 45 %. Pada langkah percobaan nomor 15b tegangan potensio diatur menjadi 2 volt,
sehingga tegangan pada out A adalah 1,15 volt dan pada out B 3,5 volt. Kondisi
motor berjalan pelan dan diketahui duty cyclenya adalah 41 %. Pada langkah
percobaan nomor 15c tegangan potensio diset menjadi max sehingga tegangan pada
out A sebesar 2,2 volt dan out B sebesar
2,3 volt. Pada kondisi ini motor DC tidak berputar karena perbedaan potensial
yang kurang sehingga tidak cukup untuk mencatu daya motor DC sehingga dapat
berputar.
3. Apakah perbedaan antara compare mode non-invering dan inverting?
·
Pada mode inverting, jika nilai
sinyal lebih besar dari titik pembanding (compare level) maka output akan di
set HIGH(5V) dan sebaliknya jika nilai sinyal lebih kecil maka output akan di
set LOW(0V).
·
Pada mode non-inverting, output
akan bernilai HIGH(5V) jika titik pembanding (compare level) lebih besar dari
nilai sinyal dan sebaliknya jika bernilai LOW(0V) pada saat titik pembanding
lebih kecil dari nilai sinyal.
4. Apa pengaruh duty cycle dari PWM yang masuk pada pin EN1 terhadap
tegangan pada terminal OUT A dan OUT B?
Duty cycle yang
digunakan mempengeruhi kecepatan motor.
5. Mengapa pada langkah nomor 12 motor berhenti saat tegangan
potensiometer belum mencapai 0 V?
Motor DC berhenti ketika tegangan potensio
meter belum mencapai 0 volt karena tidak ada perbedaan potensial antara
teganggan out A dan tegangan out B sehingga tidak mencukupi untuk mencatu daya
motor DC, sehingga motor DC dapat berputar. Hal tersebut disebabkan settingan
TCCR1B = 0x02 yang berarti prescaler yang digunakan adalah 8, sedangkan
prescaler sebelumnya adalah 256. Menurut rumus dengan menggunakan prescaler 256
frekuensi PWM yang didapatkan jauh lebih besar dibandingkan menggunakan prescaler
8. Sedangkan frekuensi yang dihasilkan akan digunakan untuk mengatur lebar
pulsa PWM. Dan pulsa PWM dimasukkan ke EN1 digunakan untuk mengatur output
tegangan pada OUT A dan OUT B. Semakin besar nilai frekuensi maka nilai
tegangan dari OUT A dan OUT B akan memiliki nilai yang lebih besar dibandingkan
dengan frekuensi yang rendah.
DAFTAR PUSTAKA
Andrianto,
Heri. 2007. Pemrograman Mikrokontroler
AVR Atmega 16. Jakarta: Informatika.
Atmel
Corporation. Atmega 8535 Datasheet (Complete).
Gadre, Dhananjay V.
2001. Programming
and Customizing the AVR Microcontroller.
New York: Mc Graw Hill.
Heryanto,
M Ary. 2007. Pemrograman Bahasa C untuk
Mikrokontroler Atmega 8535. Yogyakarta; Penerbit Andi.
Ibrahim, Dogan. 2002. Microcontroller Based Temperature Monitoring
& Control. Newnes
John Crisp. Introduction
to Microprocessors and microcontrollers. OXFORD: Newnes
KESIMPULAN
Dari
hasil praktikum yang telah dilakukan, dapat disimpulkan bahwa :
- LCD
16 x 2 dilengkapi dengan
mikrokontroler yang didisain khusus untuk mengendalikan LCD
yakni mikrokontroler HD44780 buatan Hitachi yang berfungsi sebagai
pengendali LCD ini mempunyai CGROM (Character Generator Read Only Memory),
CGRAM (Character Generator Random Access Memory), dan DDRAM (Display Data
Random Access Memory).
- Berikut
beberapa instruksi yang disediakan oleh CVAVR :
lcd_clear(); è Menghapus LCD
lcd_gotoxy(x,y); è Meletakkan posisi
dalam memulai menampilkan karakter
x è sebagai posisi kolom (integer)
y è sebagai posisi bari s (integer)
lcd_putchar(x); è Menampilkan sebuah karakter dengan meng -akses library
karakter pada LCD
x è bilangan decimal/Hexadecimal
lcd_putsf(x); è Menampilkan char/string yang tersimpan pada
flash
x è data char/string
(kata/kalimat) contoh: lcd_puts f(“Hallo Word”);
lcd_puts(x); è Menampilkan char/string yang tersimpan pada
RAM
x è data char/string
(kata/kalimat) contoh: lcd_pustf(data);
- Blok bagian inisialisasi LCD pada awal program
adalah sebagai berikut :
// LCD module initialization
lcd_init(16);
- Tanpa
inisialisasi, LCD tidak dapat mengeluarkan karakter. Maka langkah pertama
yang dilakukan adalah melakukan inisialisasi terlebih dahulu.
- Dengan
menggunakan nilai dalam lcd_init(16) maka tampilan akan berjalan dari kiri
ke kanan pada baris 0, kemudian akan melanjutkan ke baris 1.
- Dengan
menggunakan nilai dalam lcd_init(40) maka tampilan akan berjalan
dari kiri ke kanan, tetapi hanya pada baris 0 (tidak melanjutkan ke baris
1) karena dengan menggunakan nilai lcd_init (40) berarti mampu memuat
lebih banyak karakter.
- Untuk
menghapus karakter dan kursor kembali ke awal (0,0), maka digunakan
sintaks lcd_clear( );
DAFTAR
RUJUKAN
Asmara, Andik.2013.Modul Proteus Profesional Untuk Simulasi Rangkaian
Digital dan Mikrokontroler.Yogyakarta.
Modul 6.2014. Antarmuka Mikrokontroler
Dengan LCD.Malang:Universitas Negeri Malang, Jurusan Teknik
Elektro.
Dian Puspita. 2010. Antarmuka Mikrokontroller dengan LCD.
http://puspitaasmara.blogspot.com/2010/12/antarmuka-mikrokontroler-dengan.html
, diakses 07 Oktober 2016
Lampiran
SCRIPT Lengkap Modul 9
A. SCRIPT
Tabel 9.1
1.
PORD.0=0
dan PORD.1=0
#include
<mega8535.h> //file header
#include
<delay.h> //file delay
#define
ADC_VREF_TYPE 0x60 //pendefinisian ADC
//deklarasi variabel
unsigned
char read_adc(unsigned char adc_input)
{
ADMUX=adc_input
| (ADC_VREF_TYPE & 0xff);
delay_us(10);
//selang waktu untuk ADC terhadap V input
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while
((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return
ADCH;
}
void
main(void)
{
// Inisialisasi Port Input/Output
// Inisialisasi Port A
PORTA=0x00;
DDRA=0x00;
// Inisialisasi Port B
PORTB=0x00;
DDRB=0x00;
// Inisialisasi Port C
PORTC=0x00;
DDRC=0x00;
// Inisialisasi Port D
PORTD=0x00;
DDRD=0xFF;
//PORTD sebagai output
// Timer/Counter 0 initialization
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Menggunakan Timer/Counter 1
// Clock source: System Clock
// Clock value: 15.625 kHz
// Mode: Ph. correct PWM top=0x00FF
// OC1A output: Non-Inv.
// Input Capture on Falling Edge
TCCR1A=0x81; //NILAI TCCR1A
TCCR1B=0x04;
//nilai TCCR1B
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
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=0x00;
// USART initialization, USART disabled
UCSRB=0x00;
// Analog Comparator initialization
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 31.250 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE
& 0xff;
ADCSRA=0xA7;
SFIOR&=0x0F;
// SPI initialization, SPI disabled
SPCR=0x00;
// TWI initialization,TWI disabled
TWCR=0x00;
while (1)
{
OCR1A=255;//Motor putaran penuh
PORTD.0=0;//Motor
mati
PORTD.1=0;
}
}
2.
PORD.0=0
dan PORD.1=1
#include
<mega8535.h> //file header
#include
<delay.h> //file delay
#define
ADC_VREF_TYPE 0x60 //pendefinisian ADC
//deklarasi variabel
unsigned
char read_adc(unsigned char adc_input)
{
ADMUX=adc_input
| (ADC_VREF_TYPE & 0xff);
delay_us(10);
//selang waktu untuk ADC terhadap V input
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while
((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return
ADCH;
}
void
main(void)
{
// Inisialisasi Port Input/Output
// Inisialisasi Port A
PORTA=0x00;
DDRA=0x00;
// Inisialisasi Port B
PORTB=0x00;
DDRB=0x00;
// Inisialisasi Port C
PORTC=0x00;
DDRC=0x00;
// Inisialisasi Port D
PORTD=0x00;
DDRD=0xFF;
//PORTD sebagai output
// Timer/Counter 0 initialization
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Menggunakan Timer/Counter 1
// Clock source: System Clock
// Clock value: 15.625 kHz
// Mode: Ph. correct PWM top=0x00FF
// OC1A output: Non-Inv.
// Input Capture on Falling Edge
TCCR1A=0x81; //NILAI TCCR1A
TCCR1B=0x04;
//nilai TCCR1B
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
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=0x00;
// USART initialization, USART disabled
UCSRB=0x00;
// Analog Comparator initialization
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 31.250 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE
& 0xff;
ADCSRA=0xA7;
SFIOR&=0x0F;
// SPI initialization, SPI disabled
SPCR=0x00;
// TWI initialization,TWI disabled
TWCR=0x00;
while (1)
{
OCR1A=255;//Motor putaran penuh
PORTD.0=0;// motor putar berlawanan arah jarum jam
PORTD.1=1;
}
}
3. PORD.0=1 dan PORD.1=0
#include
<mega8535.h> //file header
#include
<delay.h> //file delay
#define
ADC_VREF_TYPE 0x60 //pendefinisian ADC
//deklarasi variabel
unsigned
char read_adc(unsigned char adc_input)
{
ADMUX=adc_input
| (ADC_VREF_TYPE & 0xff);
delay_us(10);
//selang waktu untuk ADC terhadap V input
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while
((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return
ADCH;
}
void
main(void)
{
// Inisialisasi Port Input/Output
// Inisialisasi Port A
PORTA=0x00;
DDRA=0x00;
// Inisialisasi Port B
PORTB=0x00;
DDRB=0x00;
// Inisialisasi Port C
PORTC=0x00;
DDRC=0x00;
// Inisialisasi Port D
PORTD=0x00;
DDRD=0xFF;
//PORTD sebagai output
// Timer/Counter 0 initialization
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Menggunakan Timer/Counter 1
// Clock source: System Clock
// Clock value: 15.625 kHz
// Mode: Ph. correct PWM top=0x00FF
// OC1A output: Non-Inv.
// Input Capture on Falling Edge
TCCR1A=0x81; //NILAI TCCR1A
TCCR1B=0x04;
//nilai TCCR1B
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
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=0x00;
// USART initialization, USART disabled
UCSRB=0x00;
// Analog Comparator initialization
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 31.250 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE
& 0xff;
ADCSRA=0xA7;
SFIOR&=0x0F;
// SPI initialization, SPI disabled
SPCR=0x00;
// TWI initialization,TWI disabled
TWCR=0x00;
while (1)
{
OCR1A=255;//Motor putaran penuh
PORTD.0=1;//Motor putar searah jarum jam
PORTD.1=0;
}
}
4. PORD.0=1 dan PORD.1=1
#include
<mega8535.h> //file header
#include
<delay.h> //file delay
#define
ADC_VREF_TYPE 0x60 //pendefinisian ADC
//deklarasi variabel
unsigned
char read_adc(unsigned char adc_input)
{
ADMUX=adc_input
| (ADC_VREF_TYPE & 0xff);
delay_us(10);
//selang waktu untuk ADC terhadap V input
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while
((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return
ADCH;
}
void
main(void)
{
// Inisialisasi Port Input/Output
// Inisialisasi Port A
PORTA=0x00;
DDRA=0x00;
// Inisialisasi Port B
PORTB=0x00;
DDRB=0x00;
// Inisialisasi Port C
PORTC=0x00;
DDRC=0x00;
// Inisialisasi Port D
PORTD=0x00;
DDRD=0xFF;
//PORTD sebagai output
// Timer/Counter 0 initialization
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Menggunakan Timer/Counter 1
// Clock source: System Clock
// Clock value: 15.625 kHz
// Mode: Ph. correct PWM top=0x00FF
// OC1A output: Non-Inv.
// Input Capture on Falling Edge
TCCR1A=0x81; //NILAI TCCR1A
TCCR1B=0x04;
//nilai TCCR1B
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
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=0x00;
// USART initialization, USART disabled
UCSRB=0x00;
// Analog Comparator initialization
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 31.250 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE
& 0xff;
ADCSRA=0xA7;
SFIOR&=0x0F;
// SPI initialization, SPI disabled
SPCR=0x00;
// TWI initialization,TWI disabled
TWCR=0x00;
while (1)
{
OCR1A=255;//Motor putaran penuh
PORTD.0=1;//Motor dalam pengereman/berhenti
PORTD.1=1;
}
}
B. SCRIPT
Tabel 9.2
1.
Script
Langkah percobaan 8,9, dan 10 (sama)
TCCR1A = 0x81
dan TCCR1B= 0x04
Berbeda pada
pengaturan potensio, yaitu: Langkah 8 (V. Potensio= 0V),
langkah 9 (V.
Potensio= 2V) dan langkah 10 (V. Potensio= Max)
#include
<mega8535.h> //file header
#include
<delay.h> //file delay
#define
ADC_VREF_TYPE 0x60 //pendefinisian ADC
//deklarasi variabel
unsigned
char read_adc(unsigned char adc_input)
{
ADMUX=adc_input
| (ADC_VREF_TYPE & 0xff);
delay_us(10);
//selang waktu untuk ADC terhadap V input
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while
((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return
ADCH;
}
void
main(void)
{
// Inisialisasi Port Input/Output
// Inisialisasi Port A
PORTA=0x00;
DDRA=0x00;
// Inisialisasi Port B
PORTB=0x00;
DDRB=0x00;
// Inisialisasi Port C
PORTC=0x00;
DDRC=0x00;
// Inisialisasi Port D
PORTD=0x00;
DDRD=0xFF;
//PORTD sebagai output
// Timer/Counter 0 initialization
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Menggunakan Timer/Counter 1
// Clock source: System Clock
// Clock value: 15.625 kHz
// Mode: Ph. correct PWM top=0x00FF
// OC1A output: Non-Inv.
// Input Capture on Falling Edge
TCCR1A=0x81; //NILAI TCCR1A
TCCR1B=0x04;
//nilai TCCR1B
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
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=0x00;
// USART initialization, USART disabled
UCSRB=0x00;
// Analog Comparator initialization
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 31.250 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE
& 0xff;
ADCSRA=0xA7;
SFIOR&=0x0F;
// SPI initialization, SPI disabled
SPCR=0x00;
// TWI initialization,TWI disabled
TWCR=0x00;
while (1)
{
OCR1A=read_adc(0);//kecepatan motor bergantung pada nilai OCR yang
dihasilkan dari konversi ADC
PORTD.0=1;//Motor putar searah jarum jam
PORTD.1=0;
}
}
2.
SCRIPT
Langkah percobaan 12
TCCR1A = 0x81
dan
TCCR1B= 0x02
#include
<mega8535.h> //file header
#include
<delay.h> //file delay
#define
ADC_VREF_TYPE 0x60 //pendefinisian ADC
//deklarasi variabel
unsigned
char read_adc(unsigned char adc_input)
{
ADMUX=adc_input
| (ADC_VREF_TYPE & 0xff);
delay_us(10);
//selang waktu untuk ADC terhadap V input
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while
((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return
ADCH;
}
void
main(void)
{
// Inisialisasi Port Input/Output
// Inisialisasi Port A
PORTA=0x00;
DDRA=0x00;
// Inisialisasi Port B
PORTB=0x00;
DDRB=0x00;
// Inisialisasi Port C
PORTC=0x00;
DDRC=0x00;
// Inisialisasi Port D
PORTD=0x00;
DDRD=0xFF;
//PORTD sebagai output
// Timer/Counter 0 initialization
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Menggunakan Timer/Counter 1
// Clock source: System Clock
// Clock value: 15.625 kHz
// Mode: Ph. correct PWM top=0x00FF
// OC1A output: Non-Inv.
// Input Capture on Falling Edge
TCCR1A=0x81; //NILAI TCCR1A
TCCR1B=0x02;
//nilai TCCR1B
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
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=0x00;
// USART initialization, USART disabled
UCSRB=0x00;
// Analog Comparator initialization
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 31.250 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE
& 0xff;
ADCSRA=0xA7;
SFIOR&=0x0F;
// SPI initialization, SPI disabled
SPCR=0x00;
// TWI initialization,TWI disabled
TWCR=0x00;
while (1)
{
OCR1A=read_adc(0);//kecepatan motor bergantung pada nilai OCR yang
dihasilkan dari konversi ADC
PORTD.0=1;//Motor putar searah jarum jam
PORTD.1=0;
}
}
3.
Script
Langkah percobaan15 a, 15 b, dan 15 c (sama)
TCCR1A = 0xC1
dan TCCR1B= 0x04, menggunakan timer 1
Berbeda pada
pengaturan potensio, yaitu:
Langkah 15 a
(V. Potensio= 0V),
langkah 15 b
(V. Potensio= 2V) dan langkah 15 c (V. Potensio= Max)
#include
<mega8535.h> //file header atmega 8535
#include
<delay.h> //file delay
#define
ADC_VREF_TYPE 0x60 //pendefinisian ADC
unsigned
char read_adc(unsigned char adc_input)
{
ADMUX=adc_input
| (ADC_VREF_TYPE & 0xff);
// selang waktu untuk ADC terhadap V input
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while
((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return
ADCH;
}
void
main(void)
{
// Input/Output Ports initialization
// Port A initialization
PORTA=0x00;
DDRA=0x00;
// Port B initialization
PORTB=0x00;
DDRB=0x00;
// Port
C initialization
PORTC=0x00;
DDRC=0x00;
// Port D initialization
PORTD=0x00;
DDRD=0xFF; //PORTD sebagai output
// Timer/Counter 0 initialization
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Menggunakan Timer/Counter 1
// Clock source: System Clock
// Clock value: 15.625 kHz
// Mode: Ph. correct PWM top=0x00FF
// OC1A output: Inverted
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xC1;
//Nilai TCCR1A
TCCR1B=0x04;
//Nilai TCCR1B
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
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=0x00;
// USART initialization, USART disabled
UCSRB=0x00;
// Analog Comparator initialization
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 31.250 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE
& 0xff;
ADCSRA=0xA7;
SFIOR&=0x0F;
// SPI initialization, SPI disabled
SPCR=0x00;
// TWI initialization, TWI disabled
TWCR=0x00;
while (1)
{
OCR1A=read_adc(0); );//kecepatan motor bergantung pada nilai OCR yang
dihasilkan dari konversi ADC
PORTD.0=1;//motor
putar berlawanan arah jarum jam karena pada compare mode inverting
PORTD.1=0;
}
}
No comments:
Post a Comment