Haduuhh setelah sekian lama ga nulis karena kemaren lagi sibuk - sibuknya dengan kerjaan yang ga jelas wkwkwkwk tapi walaupun udah lama ditinggal untung ga ada sarang laba - labanya wkwkwkwk..
Lanjut lagii, pada kesempatan kali ini kita akan membahas bagaimana cara memberi nilai kecepatan motor DC berdasarkan dari data ADC yang diterima dimikrokontroler.
Berikut langkah - langkahnya
1. Buat rangkain di ISIS (dari Proteus yaa bukan yg lagi trend skrg wkwkwkwk), kira - kira rangkaiannya seperti ini.
Setelah siap membuat rangkain diatas, lanjut kita ke pemrogramannya
2. Buka CVAVR, File, New, pilih jenis mikrokontroler dan frekuensi Crystall yang digunakan. Kali ini saya menggunakan atmega8535 dengan frekuensi 11.059200 MHz
4. Lanjut setting ADC, buka Tab ADC, Conteng Use 8 bit karena akan kita samakan dengan setting timer 1 yang juga 8 bit. Sedangkan untuk clock nya pilih yang paling kecil saja.
5. Yang terakhir kita seting timer, tepatnya pada timer 1.
Pilih clock value untuk timer 1yang jumlahnya paling kecil.
Sedangkan mode kita pilih yang fast pwm top 00FFh.
Dan untuk yang Output A dan Output B dari timer 1 kita pilih mode Non-Inverted.
Setelah itu kita baru membuat programnya secara keseluruhan.
berikut listing programnya.
- #include <mega8535.h>
- #include <stdio.h>
- #include <stdlib.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;
- }
- char buff[20];
- void gerak(int kecepatan1, int kecepatan2);
- // Declare your global variables here
- void main(void)
- {
- PORTA=0x00;
- DDRA=0x00;
- PORTB=0x00;
- DDRB=0x00;
- PORTC=0x00;
- DDRC=0x00;
- PORTD=0x00;
- DDRD=0x3F;
- TCCR0=0x00;
- TCNT0=0x00;
- OCR0=0x00;
- TCCR1A=0xA1;
- TCCR1B=0x0D;
- TCNT1H=0x00;
- TCNT1L=0x00;
- ICR1H=0x00;
- ICR1L=0x00;
- OCR1AH=0x00;
- OCR1AL=0x00;
- OCR1BH=0x00;
- OCR1BL=0x00;
- ASSR=0x00;
- TCCR2=0x00;
- TCNT2=0x00;
- OCR2=0x00;
- MCUCR=0x00;
- MCUCSR=0x00;
- TIMSK=0x00;
- ACSR=0x80;
- SFIOR=0x00;
- ADMUX=ADC_VREF_TYPE & 0xff;
- ADCSRA=0x87;
- SFIOR&=0xEF;
- // LCD module initialization
- lcd_init(16);
- while (1)
- {
- // Place your code here
- lcd_gotoxy(0,0);
- sprintf(buff,"Speed= %d (ADC1)",read_adc(0));
- lcd_puts(buff);
- lcd_gotoxy(0,1);
- sprintf(buff,"Speed= %d (ADC2)",read_adc(1));
- lcd_puts(buff);
- delay_ms(50);
- lcd_clear();
- gerak(read_adc(0),read_adc(1));
- };
- }
- void gerak(int kecepatan1, int kecepatan2)
- {
- PORTD.0=1;
- PORTD.1=0;
- OCR1B=kecepatan1;
- PORTD.2=1;
- PORTD.3=0;
- OCR1A = kecepatan2;
- }
Berikut simulasinya pada software Isis Proteus
Sekian Dulu yaaa..
semoga bermanfaat..
terima kasihh...
Salamm resissstorrrrrrr!!!!!!!!!!!
No comments:
Post a Comment