By | 28/03/2018

Hello Sahabat Anak Kendali

kali ini saya akan mencoba mengakses Motor DC dengan Driver L293 yang mana mikrokontroller yang saya gunakan adalah mikrokontroller berbasis Atmega yang diprogram dengan CVAVR
untuk mengontrol Motor DC kita menggunakan fungsi PWM dan fungsi PWM ini sangat terkait dengan penggunaan Timer pada mikrokontroller, untuk itu alangkah baiknya jika agan membaca terlebih dahulu postingan tentang cara menggunakan timer pada ATmega dengan CVAVR

jika agan sudah membacanya, sekarang kita bisa menlajutkan untuk percobaan mengontrol motor DC L293 dengan Atmega CVAVR,

karena Driver yang saya gunakan hanyalah IC l293 bukan module nya maka saya membuat rangkaian sendiri untuk driver ini, dan rangkaian yang saya gunakan seperti pada gambar dibawah ini !

Cara Mengontrol Motor DC l293 Atmega CVAVR

dari gambar diatas terdapat dua chanel yang bisa kita gunakan untuk menghubungkan ke motor DC tapi disini saya hanya menggunakan satu motor DC, sekarang silahkan hubungkan Motor DC sobat pada Connector chanel Motor A kemudian untuk wirig ke mikrokontroller Atmega nya, silahkan hubungkan ke PORTD.3 dan PORTD.4
Port D 4 digunakan sebagai keluaran PWM dan port D 3 digunakan sebagai keluaran digital biasa

kemudian bukalah aplikasi CVAVR sobat lalu konfigurasi codewizard seperti pada gambar berikut !

Cara Mengontrol Motor DC l293 Atmega CVAVR

selanjutnya buat lah program seperti berikut :

/*****************************************************
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    : 1/19/2018
Author  : Chaerul Anam
Company : Sixty Light
Comments: 


Chip type               : ATmega32
Program type            : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 512
*****************************************************/

#include <mega32.h>

// Alphanumeric LCD functions
#include <alcd.h>
#include <delay.h>
#include <stdlib.h>
void motor (int kec){
 if (kec<0){
 PORTD.3=1;
 OCR1B = kec+255;
 }               
 else if (kec >= 0){
 PORTD.3 =0;
 OCR1B = kec;
 }
}


// Declare your global variables here
char buff [10];
int hitung=0;
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=P State6=P State5=P State4=P State3=T State2=T State1=T State0=T 
PORTB=0xFF;
DDRB=0x0F;

// 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=Out Func4=Out Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x74;

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

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 16000.000 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// 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=0xA1;
TCCR1B=0x09;
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=0x00;

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

// 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 0
// RD – PORTC Bit 1
// EN – PORTC Bit 2
// D4 – PORTC Bit 4
// D5 – PORTC Bit 5
// D6 – PORTC Bit 6
// D7 – PORTC Bit 7
// Characters/line: 20
lcd_init(20);

while (1)
      {
      // Place your code here
        lcd_clear();
       if (PINB.7 == 0){
       hitung++;
       PORTB.1=0;
       PORTB.0=1;
        lcd_gotoxy(0,1);
       lcd_putsf(“Increase”);}
       else if (PINB.6==0) {
       hitung–;
       PORTB.1=1;
       PORTB.0=0;
       lcd_gotoxy(0,1);
       lcd_putsf(“Decrease”);}
          
      motor(hitung);
      itoa (hitung, buff);
      lcd_gotoxy(0,0);  
      lcd_putsf(“PWM value = “);
      lcd_puts(buff);
      delay_ms(100);    
}
       }

Download My Project || DOWNLOAD
Jadi hasil yang akan dihasilkan, kita dapat mengontrol Motor DC, kecepatan dan Arahnya dengan Pushbutton dimana Pushbutton itu untuk menambah dan mengurangi nilai PWM
mungkin cukup sekian apa yang bisa saya bagikan, semoga bermanfaat, silahkan beri masukan, saran, kritik atau pertanyaan di kolom komentar !


keyword:
Anak kendali
motor dc
mengakses motor dc cvavr
mengakses motor dc atmega16
mengakses motor dc atmega32
mengontrol motor dc l293
program cvavr motor dc
program cvavr l293D


Leave a Reply

Your email address will not be published. Required fields are marked *