Sabtu, 16 Maret 2013

PENGENALAN ELEKTRONIKA DIGITAL MENGGUNAKAN Code Vision AVR

Gambar 1. Ilustrasi aplikasi teknologi digital

Berbagai jenis aplikasi teknologi yang ada saat ini, sebagian besar merupakan produk teknologi digital. Begitupula dengan bidang robotika, sebagian besar merupakan pengembangan teknologi digital yang dikombinasikan dengan kecerdasan buatan (soft computing).



PENGENALAN PROGRAM CODE VISION AVR

CodeVisionAVR merupakan salah satu software untuk menmprogram mikrokontroler yang berfungsi sebagai text editor dalam menulis baris perintah sekaligus sebagai compiler yang dapat mengubah file sumber menjadi file hexa. Software CodeVision AVR versi demo dapat di unduh dari http://www.hpinfotech.ro/html/cvavr.htm.

CodeVisionAVR menyediakan berbagai fasilitas yang memudahkan pengguna. Salah satunya adalah CodeWizardAVR yang memberikan kemudahan dalam melakukan konfigurasi fungsi-fungsi pin dan fitur yang yang ingin digunakan. Selain itu juga CodeVisionAVR menyediakan toolbar yang memudahkan pengguna untuk melakukan berbagai interaksi yang diinginkan.
Berikut adalah CONTOH metode penulisan program pada CV AVR:


 
PROYEK DIGITAL 1. MEMBUAT BLINKING LED

Misalkan dalam proyek ini digunakan mikrokontroler AT Mega 16, berikut desain proteusnya untuk simulasi program


 
Gambar 2. Simulasi proteus rangkaian blinking led


Berikut adalah contoh Program untuk menyalakan dan mematikan led secara otomatis bergantian menggunakan CV AVR.

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : Blinking LED
Version : I
Date    : 11/17/2012
Author  : Mada Sanjaya WS, Ph.D
Company : Bolabot Techno Robotic School
Comments: "SEMANGAT!!!"

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

#include <mega16.h>

#include <delay.h>

void main(void)
{


//mendefinisikan output berupa LED

DDRD=0xFF;



while (1)

      {



PORTD=0x00; // LED menyala

delay_ms(1000);   // LED menyala selama satu detik

PORTD=0xFF; // LED mati

delay_ms(1000);   // LED mati selama satu detik



      }

}


 
PROYEK DIGITAL 2. MENYALAKAN LED DENGAN TOMBOL



Simulasi Proteus Menghidupkan LED dengan Tombol


Gambar 3. Simulasi Proteus menghidupkan LED dengan tombol

Berikut adalah contoh Program untuk menyalakan dan mematikan led menggunakan tombol push-Button menggunakan program CV AVR. 



/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : Menghidupkan LED dengan tombol
Version : I
Date    : 11/17/2012
Author  : Mada Sanjaya WS, Ph.D
Company : Bolabot Techno Robotic School
Comments: "SEMANGAT!!!"

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

#include <mega16.h>

void main(void)
{
// Mendefinisikan input tombol
DDRB.0=0;
DDRB.1=0;

//Mendefinisikan output LED
DDRD.1=1;
DDRD.2=1;
DDRD.3=1;
DDRD.4=1;

//kondisi awal PORT
PORTD.1=1;    //semua led mati
PORTD.2=1;
PORTD.3=1;
PORTD.4=1;

while (1)
      {
if (PINB.0==0)
{
PORTD.1=0;   //led biru nyala
PORTD.2=0;   //led biru nyala
PORTD.3=1;   //led kuning mati
PORTD.4=1;   //led kuning mati
}
else if (PINB.1==0)
{
PORTD.1=1;  //led biru mati
PORTD.2=1;  //led biru mati
PORTD.3=0;  //led kuning nyala
PORTD.4=0;  //led kuning nyala
}
else
{
PORTD.1=1;    //semua led mati
PORTD.2=1;
PORTD.3=1;
PORTD.4=1;
}
      }
}


SELAMAT MENCOBA !!! (^v^)

Copyright 2013 @ Profesor Bolabot


Share:
Read More

SOURCE CODE PROGRAM Code Vision AVR Robot Kontrol Wireless TLP/RLP 315 MHz RK03

PROGRAM CV AVR REMOTE CONTROL (TRANSMITTER)

Sesuai dengan desain hardware rangkaian seperti pada pembahasan sebelumnya tentang Robot Kontrol Wireless TLP/RLP 315 MHz RK03. Berikut adalah program CV AVR untuk remote control robot.


/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : Remote Kontrol Robot Kontrol Wireless
Version : I Hexapod UHF
Date    : 9/16/2012
Author  : Mada Sanjaya WS, Ph.D
Company : Bolabot Techno Robotic School
Comments: "Semangat harapan itu masih ada"


Chip type               : ATmega8
Program type            : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega8.h>

// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>

unsigned char perintah;

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B 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
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// 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=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
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// 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=0x00;
TCCR1B=0x00;
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
MCUCR=0x00;

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

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 1200
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x02;
UBRRL=0x70;

// 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;

// mendefinisikan input output
DDRD.5=0;     //input tombol perintah belok kiri
DDRD.6=0;     //input tombol perintah belok kanan
DDRD.7=0;     //input tombol perintah mundur
DDRB.0=0;     //input tombol perintah maju
DDRD.2=1;     //output led indikator ketika tombol ditekan

while (1)
      {
      if (PINB.0!=0)
      //program maju
      {
      perintah=1;
      PORTD.2=0;

      }
      else if (PIND.7!=0)
      //program mundur
      {
      perintah=2;
      PORTD.2=0;

      }
      else if (PIND.6!=0)
      //program belok kanan
      {
      perintah=3;
      PORTD.2=0;

      }
      else if (PIND.5!=0)
      //program belok kiri
      {
      perintah=4;
      PORTD.2=0;

      } 
     
      else
      {
      perintah=0; // diam
      PORTD.2=1;

      }
     
      putchar(perintah); // mengirim tipe data perintah
    
      }
      }



PROGRAM CV AVR ROBOT KONTROL DIGITAL (RECEIVER)  


/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : Receiver Robot Kontrol Wireless
Version : I Hexapod
Date    : 9/16/2012
Author  : Mada Sanjaya WS, Ph.D
Company : Bolabot Techno Robotic School
Comments: "Semangat Harapan itu Masih Ada!!!"

Chip type               : ATmega8
Program type            : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega8.h>

#ifndef RXB8
#define RXB8 1
#endif

#ifndef TXB8
#define TXB8 0
#endif

#ifndef UPE
#define UPE 2
#endif

#ifndef DOR
#define DOR 3
#endif

#ifndef FE
#define FE 4
#endif

#ifndef UDRE
#define UDRE 5
#endif

#ifndef RXC
#define RXC 7
#endif

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<DOR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

unsigned char dataku;      // mendefinisikan data

// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE <= 256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
   {
   rx_buffer[rx_wr_index++]=data;
#if RX_BUFFER_SIZE == 256
   // special case for receiver buffer size=256
   if (++rx_counter == 0)
      {
#else
   if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
   if (++rx_counter == RX_BUFFER_SIZE)
      {
      rx_counter=0;
#endif
      rx_buffer_overflow=1;
      }
   }
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index++];
#if RX_BUFFER_SIZE != 256
if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#endif
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=T
PORTB=0x00;
DDRB=0x06;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// 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=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
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11.719 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=0x0D;
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
MCUCR=0x00;

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

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 1200
UCSRA=0x00;
UCSRB=0x90;
UCSRC=0x86;
UBRRH=0x02;
UBRRL=0x70;

// 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;

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



// mendefinisikan output motor DC

DDRD.5=1;  //output motor kiri

DDRD.6=1;  //output motor kiri

DDRD.7=1;  //output motor kanan

DDRB.0=1;  //output motor kanan



// kondisi awal

PORTD.5=1;

PORTD.6=1;

PORTD.7=1;

PORTB.0=1;



// mengatur kecepatan motor dengan PWM

OCR1A=200; // kecepatan motor kiri

OCR1B=200; // kecepatan motor kanan



while (1)

      {

dataku=rx_buffer[0];

if(dataku==1)    // program maju, kedua motor bergerak kedepan

{

PORTD.5=1;      

PORTD.6=0;

PORTD.7=1;

PORTB.0=0;

}



else if (dataku==2)   //program mundur, kedua motor bergerak kebelakang

{



PORTD.5=0;

PORTD.6=1;

PORTD.7=0;

PORTB.0=1;

}



else if (dataku==3)  //program belok kanan, motor kanan mundur, motor kiri maju

{



PORTD.5=1;

PORTD.6=0;

PORTD.7=0;

PORTB.0=1;

}



else if (dataku==4) //program belok kiri, motor kanan maju, motor kiri mundur

{



PORTD.5=0;

PORTD.6=1;

PORTD.7=1;

PORTB.0=0;

}



else           // tidak ada perintah kedua motor diam

{


PORTD.5=0;

PORTD.6=0;

PORTD.7=0;

PORTB.0=0;

}



      }

}



Copyright 2013@ Profesor Bolabot
Share:
Read More

Metode Runge-Kutta Orde 4 Menggunakan MATLAB


Berikut dibahas tentang persamaan diferensial biasa, ordinary differential equations (ODE) yang diklasifikasikan kedalam masalah nilai awal (initial value) dan masalah nilai batas (boundary value), dimana kedua keadaan ini solusinya dispesifikasi pada waktu awal (initial time). Banyak hukum-hukum fisika yang ‘sangat pas ’ diformulasikan dalam bentuk persamaan diferensial. Lebih lanjut, tidak mengherankan bahwa solusi komputasi numerik dari persamaan-persamaan diferensial menjadi bagian yang umum dalam pemodelan sistem-sistem fisika. Beberapa hukum mendasar diantaranya sebagai berikut:


METODE EULER

Sistem persamaan diferensial yang kompleks dapat dengan mudah dipecahkan menggunakan metode numerik, salah satu metode yang paling sederhana adalah metode Euler.

Pendekatan metode Euler menggunakan pendekatan ekspansi Taylor berikut:


Dengan orde yang besar dari persamaan diatas nilainya kecil, maka Euler hanya menggunakan sampai orde 1 saja, sehingga diperoleh


dengan h adalah step size.

Metode Euler ini memiliki kelemahan, untuk t yang semakin besar, nilai eror dari solusi akan semakin besar, untuk itu lahirlah metode Runge-Kutta yang menawarkan penyelesaian persamaan diferensial dengan pertumbuhan truncation error yang jauh lebih kecil.

METODE RUNGE KUTTA ORDE 4

Persamaan Runge-Kutta orde 4 dapat dituliskan sebagai berikut:


CONTOH KASUS SISTEM DIFERENSIAL BIASA

Contoh aplikasi sistem persamaan diferensial orde satu terkopel adalah persamaan Lorenz tahun 1963, yang menggambarkan fenomena konveksi udara yang dibangun atas tiga persamaan diferensial terkopel berikut

dimana a adalah bilangan Prandtl, r adalah bilangan Rayleighr, dan b adalah geometris dari sistem fisik yang ditinjau. Sedangkan x adalah laju aliran konveksi. y adalah perbedaan temperature horizontal aliran konveksi dan z perbedaan temperature horizontal aliran konveksi terhadap titik equilibrium.

Untuk dapat memahami fenomena dari persamaan Lorenz diatas, maka persamaan tersebut harus dicari solusinya. Berikut adalah solusi untuk sistem persamaan Lorenz diatas menggunakan MATLAB.

Metode Numerik Sistem Lorenz
Program berikut dibuat dalam tiga file terpisah, yaitu file fungsi, file metode numerik, dan file untuk memplot grafik karena pada MATLAB memiliki fasilitas dapat memanggil file. Sebenarnya program juga dapat dibuat hanya dalam satu file saja, tetapi ketika kita akan membuat fungsi baru program menjadi tidak efisien karena semuanya harus diubah, tetapi dengan sistem panggil file, ketika kita akan merubah fungsi atau output tidak perlu lagi untuk merubah metode numeriknya.

Fungsi M-File Sistem Lorenz

function f = lorenz(t,y)

f = zeros(1,3);
f(1) = 10 * (y(2) - y(1));
f(2) = -y(1) * y(3) + 28 * y(1) - y(2);
f(3) = y(1) * y(2) - 8 * y(3) / 3;


Fungsi Metode Runge Kutta  Orde 4
function [tSol,ySol] = RK4(dEqs,t,y,tStop,h)
% Cara Menggunakan Metode Runge Kutta Orde Empat
% Cara Menggunakan: [tSol,ySol] = RK4(@namafungsidiferensial,t,y,tStop,h)
% INPUT:
% namafungsidiferensial= merupakan sistem pers.diferensial orde satu
% F(t,y) = [dy1/dt dy2/dt dy2/dt ...].
% t,y = kondisi awal; y harus dibuat dalam vektor kolom.
% tStop = batas akhir waktu
% h = step size
% OUTPUT:
% t = variabel bebas (waktu)
% y = variabel yang bergantung waktu
if size(y,1) > 1 ;
    y = y';
end
tSol = zeros(2,1); ySol = zeros(2,length(y));
tSol(1) = t; ySol(1,:) = y;
i = 1;
while t < tStop
i = i + 1;
h = min(h,tStop - t);
K1 = h*feval(dEqs,t,y);
K2 = h*feval(dEqs,t + h/2,y + K1/2);
K3 = h*feval(dEqs,t + h/2,y + K2/2);
K4 = h*feval(dEqs,t + h,y + K3);
y = y + (K1 + 2*K2 + 2*K3 + K4)/6;
t = t + h;
tSol(i) = t; ySol(i,:) = y; % Untuk mengeluarkan solusi
end

Script Eksekusi Program M-File Sistem Lorenz
[t,y] = RK4(@lorenz,0,[0.1 0.1 0.1],50,0.01);
figure(1)
plot3(y(:,1),y(:,2),y(:,3))
xlabel('x')
ylabel('y')
zlabel('z')
title('DIAGRAM FASE SISTEM KONVEKSI LORENZ')
figure (2)
plot(t,y)
xlabel('Waktu')
ylabel('Dinamika')
title('TIME SERIES SISTEM KONVEKSI LORENZ')
legend('x','y','z')

Output Program

Gambar 1. Diagram fase sistem Lorenz

Gambar 2. Grafik time series sistem Lorenz

Dari gambar 1 dan 2 terlihat bahwa sistem Lorenz memiliki solusi yang tidak periodik, solusi ini dikenal dengan fenomena CHAOS yang memiliki ciri sulit untuk diprediksi untuk interval waktu yang lama. dan ketika kita mengubah sedikit saja salah satu parameter atau kondisi awal sistem, maka akan melahirkan solusi yang sangat berbeda untuk selang waktu yang lama.

Copyright 2013 @ Profesor Bolabot














Share:
Read More

Kamis, 14 Maret 2013

PROFESOR BOLABOT: Bolabot Robot Kontrol Digital RK02

PROFESOR BOLABOT: Bolabot Robot Kontrol Digital RK02: Teknologi robot sebenarnya telah ada sebelum kata “robot” digunakan, ilmuwan muslim merupakan pionier pertama teknologi robot. Donald Rout...
Share:
Read More