Desain Minimum Sistem Atmega 16 For Servo Controllers

Anda ingin membuat minimum sistem untuk keperluan servo controller? Ah gampang..! cukup dengan fokus membaca artikel ini maka anda akan disulap menjadi desainer layout PCB yang handal, tentunya dengan syarat harus mempelajari artikel ini sampai selesai, apakah anda sudah siap? jika sudah siap mari melesat ke TKP haha simak artikel Desain Minimum Sistem Atmega 16 For Servo Controllers dengan cermat.

Membuat desain layout PCB wabilkhusus untuk mengendalikan motor servo wajib menyertakan tiga pin yaitu ground,  tegangan positif, dan pin micro (gnd + pin) dari tiga pin ini harus dijadikan satu agar sesuai dengan pin pada motor servo yang juga berjumlah tiga pin.

Walaupun didesain khusus untuk servo controllers namun desain layout ini juga bisa digunakan untuk berbagai keperluan misalnya untuk robot lengan, robot line follower dan transporter yang menggunakan motor servo untuk mengambil suatu benda dengan gripper/penjepit.

Software untuk mendesain dalam membuat layout servo controllers ini menggunakan software Diptrace, namun anda bisa menggunakan software lain yang anda kuasai misalnya eagle, ares, atau software pembuat layout PCB lainya.

Berikut ini gambar hasil layout PCB Servo Controllers pada software diptrace :
Desain layout tampak atas
Desain layout tampak bawah
Desain layout on Diptrace
Untuk kode programnya ini saya sempilkan sedikit hanya untuk referensi saja, untuk kode program pengendalian motor servo yang kompleks bisa anda cari sendiri diinternet saya rasa sudah banyak yang share. Kode program ini untuk mengendalikan tiga buah motor servo dan programnya dibuat dengan software CodeVision AVR. Monggo dimanfaatkan.

Project : Servo Controllers
Version : v.05
Date    : 24/07/2012
Author  : pujar diki
Company : Mutekla
Comments:

Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 11,059200 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include

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

#define ADC_VREF_TYPE 0x00

// Read the AD conversion result
unsigned int 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 ADCW;
}

char lcd_buff[33];

#define pservo_1 PORTD.0
#define pservo_2 PORTD.1
#define pservo_3 PORTD.2

//Program servo Portd0 Portd1 Portd2
unsigned char servo_1=0,servo_2=0,servo_3=0;
int srvx,srvy;
//Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
srvx++;
if(srvx==867){
srvx=0;
pservo_1=1;
pservo_2=1;
pservo_3=1;
};
if(20    srvy=(char)srvx;
    if(srvy==servo_1){pservo_1=0;}
    if(srvy==servo_2){pservo_2=0;}
    if(srvy==servo_3){pservo_3=0;}
}
}

void servo1(int derajat){servo_1=derajat;}  
void servo2(int derajat){servo_2=derajat;}
void servo3(int derajat){servo_3=derajat;}

void setup()
{
// Declare your local variables here
 
PORTA=0x00;
DDRA=0b10000000;

PORTB=0xf0;
DDRB=0x0f;

PORTC=0x00;
DDRC=0x08;

PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 11059.200 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x01;

// Clock value: 172,800 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
TCCR1A=0xA1;
TCCR1B=0x0B;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC Clock frequency: 691,200 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: ADC Stopped
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;

// Alphanumeric LCD initialization
lcd_init(16);

// Global enable interrupts
#asm("sei")

/*SERVO postitions
0der=23 ; 90der=64 ; 180der=108 ;
example:
servo1(23);
servo2(23);
servo3(23);
*/

while(1)
{
bla bla bla...
};
}

Semoga artikel ini bermanfaat, saya +sudarmanto saputra mohon maaf jika ada kekurangan dan kesalahan bahasa, ini karena efect dari training cara menulis efektif haha. Selamat mencoba. 

2 Responses to "Desain Minimum Sistem Atmega 16 For Servo Controllers"

Unknown mengatakan...

MANTAP MS.... AJARIN ORANG BONTANG JUGA,...AK BARU TAU INI BLOG PUNYA SOUDARA LAMPUNG,....

Proyek Sederhana mengatakan...

Mohon maaf sebelumnya, maksud dari kondisi ini bagaimana ya?
if(20 srvy=(char)srvx;
if(srvy==servo_1){pservo_1=0;}
if(srvy==servo_2){pservo_2=0;}
if(srvy==servo_3){pservo_3=0;}
}
memang if(20 srvy ... ) atau if(20 <= srvy ...) atau bagaimana? terima kasih