cara menggunakan PWM dengan Codevision avr dan simulasi proteus

Posted by


hay sahabat kelas elektronika, kali ini kita akan membahas cara menggunakan PWM dengan codevision avr dan simulasi proteus
langsung saja kita mulai dengan membuat simulasi dengan proteus dengan bahan bahan sebagai berikut:


setelah memilih komponen diatas maka lakukan wiring dengan rangkaian sebagai berikut :
a. rangkai ADC
 b. rangkai motor dan driver l293d
 c. rangkai lcd pada port c

direksi diatas berguna untuk mengatur arah putaran motor, ketika bernilai 1 maka akan memutar kearah kanan dan sebaliknnya jika bernilai 0 maka arahnya akan ke kiri.
setelah selesai merangkainya maka kita pindah ke codevision avr
pertama buat project seperti yang sudah sudah dengan komposisi sebagai berikut :
a. setting atmega yang digunakan dan clock / detaknya
 b. setting adc
disini saya menggunakan adc dengan nilai maksimal 8 bit atau 255. jika tidak di centang maka adc akan bernilai maksimal 1023 / 10 bit.
 b.setting lcd.
pada rangkaian simulasi menggunakan port c maka kita setting port c
 d. setting jenis PWM / timer
karena pada simulasi yang kita gunakan adalah timer 1 a dan 1 b maka timer 0, 2, dan watchdog tidak usah diaktifkan
setting timer seperti pada gambar

setelah kita setting semuanya maka kita generate save and exit
setelah itu kita program seperti ini

listing lengkapnya seperti berikut:
#include <mega32.h>
#include <stdio.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

#include <delay.h>

#define ADC_VREF_TYPE 0x20

// 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
int a;
char adc[30];
char motor[30];

void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x30;

TCCR1A=0xA1;
TCCR1B=0x03;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=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: 750.000 kHz
// ADC Voltage Reference: AREF pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;

// LCD module initialization
lcd_init(16);

while (1)
      {
      //Place your code here
        a=read_adc(0);
        lcd_gotoxy(0,0);
        sprintf(adc,"adc: %d ",a);
        lcd_puts (adc);
       
        lcd_gotoxy(0,1);
        sprintf (motor,"mtr : %d  %d ",OCR1AL, OCR1BL);
        lcd_puts (motor);
        OCR1AL = a;
        OCR1BL = a;
        delay_ms (100);
       
      }
}

lakukan simulasi di proteus dan play hasilnya seperti ini :
adc  0 maka kecepatan motor 0
 ketika adc ditambah maka kecepatan bertambah dan direksi diubah maka motor akan berubah arah


FOLLOW and JOIN to Get Update!

Social Media Widget SM Widgets




kelaselektronika Updated at: 06:52

5 comments: