Monday, December 5, 2016

ANTARMUKA MIKROKONTROLER DENGAN MOTOR DC

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 atau motor arus searah adalah suatu mesin listrik yang dapat mengubah energi listrik yang berupa listrik arus searah menjadi energi mekanik (gerak). Energi mekanik tersebut berupa putaran dari rotor.
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

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
2 V
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 :

  1. 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).
  2. 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)
è sebagai posisi bari s (integer)
lcd_putchar(x); è Menampilkan sebuah karakter dengan meng -akses library karakter pada LCD
è 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);
  1. Blok bagian inisialisasi LCD pada awal program adalah sebagai berikut :
// LCD module initialization
lcd_init(16);
  1. Tanpa inisialisasi, LCD tidak dapat mengeluarkan karakter. Maka langkah pertama yang dilakukan adalah melakukan inisialisasi terlebih dahulu.
  2. Dengan menggunakan nilai dalam lcd_init(16) maka tampilan akan berjalan dari kiri ke kanan pada baris 0, kemudian akan melanjutkan ke baris 1.
  3. 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.
  4. Untuk menghapus karakter dan kursor kembali ke awal (0,0), maka digunakan sintaks lcd_clear( );
  5.  




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