Sekarang ini, sudah banyak
aplikasi yang dapat digunakan untuk mensimulasikan rangkaian listrik. Mulai
dari yang sederhana, sampai dengan yang kompleks dengan melibatkan
mikrokontroller dan sebagainya. Jadi, sebelum membuat sebuah rangkaian, ada baiknya
kita memanfaatkan teknologi yang tersedia dengan mensimulasikannya terlebih
dahulu. Gunanya agar kita tidak salah membeli komponen, tidak merusak komponen
yang sudah dibeli dan tidak salah membuat rangkaian. Semua kegunaan itu bisa kita
persingkat menjadi menghemat biaya yang dikeluarkan :p (terlebih buat anak kost).
Nah
sekarang, kita lihat contoh membuat simulasi menggunakan program Proteus 8 dan
Code Vision AVR. Proteus 8 digunakan untuk membuat rangkaian (hardware),
sedangkan Code Vision AVR digunakan untuk membuat pemograman (software). Bahasa
yang digunakan dalam Code Vision AVR adalah bahasa C. Kenapa perlu pemograman? Karena
kita akan menggunakan mikrokontroller ATMega 32. Apasih mikrokontroler itu? Mikrokontroler
adalah chip yag dapat digunakan untuk mengendalikan sebuah rangkaian dengan
mengunggah koding ke dalamnya. Dengan demikian, rangkaian kita dapat
diperintahkan sesuai dengan kemauan kita. Sebagai contoh, saat kita menekan
saklar 1, maka akan menyala LED dengan urutan tertentu, saat menekan saklar 2
maka urutan nyala LED berbeda lagi, dan sebagainya. Yoks langsung aja ke
prakteknya.
Sekarang
ini kita buat rangkaian dengan menggunakan 3 push button dan 8 LED. Saat kita
tekan push button yang pertama, maka LED akan menyala dengan urutan 1, 2, 3, 4,
5, 6, 7, 8. Saat push button yang kedua di tekan, LED akan menyala dengan
urutan 8, 7, 6, 5, 4, 3, 2, 1. Sedangkan saat push button ketiga ditekan, maka
LED akan menyala dengan urutan 4 dan 5, 3 dan 6, 2 dan 7, dan 1 dan 8. Pertama,
kita buat rangkaian di Proteus 8 dengan mengikuti skema sebagai berikut.
Setelah itu, kita buat koding
dengan menggunakan Code Vision AVR. Masukkan kosingan seperti dibawah ini:
========================================================================
#include <mega32.h>
#include <delay.h>
void main(void)
{
// 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=T State6=T State5=T
State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// 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=P State1=P State0=P
PORTC=0x07;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=Out Func5=Out
Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0
State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
// 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: 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
// 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;
while (1)
{
if (PINC.0==0){
PORTD.7=1;
PORTD.6=0;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=0;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=1;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=0;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=1;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=0;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
PORTD.4=1;
PORTD.3=0;
PORTD.2=0;
PORTD.1=0;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
PORTD.4=0;
PORTD.3=1;
PORTD.2=0;
PORTD.1=0;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=1;
PORTD.1=0;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=1;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=0;
PORTD.0=1;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=0;
PORTD.0=0;
}
else
if (PINC.1==0){
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=0;
PORTD.0=1;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=1;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=1;
PORTD.1=0;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
PORTD.4=0;
PORTD.3=1;
PORTD.2=0;
PORTD.1=0;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
PORTD.4=1;
PORTD.3=0;
PORTD.2=0;
PORTD.1=0;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=1;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=0;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=1;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=0;
PORTD.0=0;
delay_ms(50);
PORTD.7=1;
PORTD.6=0;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=0;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=0;
PORTD.0=0;
}
else
if (PINC.2==0){
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
PORTD.4=1;
PORTD.3=1;
PORTD.2=0;
PORTD.1=0;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=1;
PORTD.4=0;
PORTD.3=0;
PORTD.2=1;
PORTD.1=0;
PORTD.0=0;
delay_ms(50);
PORTD.7=0;
PORTD.6=1;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=1;
PORTD.0=0;
delay_ms(50);
PORTD.7=1;
PORTD.6=0;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=0;
PORTD.0=1;
delay_ms(50);
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
PORTD.4=0;
PORTD.3=0;
PORTD.2=0;
PORTD.1=0;
PORTD.0=0;
}
}
========================================================================
Setelah itu, tinggal kita unggah
deh ke mikrokontrollernya. Hasilnya adalah seperti pada video di bawah ini.
mantap (y)
BalasHapusntar kembangin lagi yaa