Kelas : 2B
No/Nama Modul
: CODEVISION & SIMULIDE
Percobaan
2. Landasan Teori
CodeVisionAVR adalah sebuah compiler C yang telah dilengkapi dengan fasilitas Integrated
Development Environment (IDE) dan didesain agar dapat menghasilkan kode program secara
otomatis untuk mikrokontroler Atmel AVR. Program ini dapat berjalan dengan menggunakan
sistem operasi Windows® XP, Vista, Windows 7, dan Windows 8, 32-bit dan 64-bit.
Integrated Development Environment (IDE) telah dilengkapi dengan fasilitas pemrograman chip
melalui metode In-System Programming sehingga dapat secara otomatis mentransfer file
program ke dalam chip mikrokontroler AVR setelah sukses dikompilasi.
SimulIDE Merupakan software simulator rangkaian elektronika real time, untuk keperluan
belajar logika dan syntax pemrograman mikrokontroler dari keluarga AVR, Arduino dan PIC.
SimulIDE dapat ini dapat dijalankan di Windows ataupun Linux. Dengan menggunakan
simulator SimulIDE kita dapat lebih bebas untuk melakukan pengaturan input dan output pada
sistem.
Misalnya,
menggunakan Port D sebagai output utama karena pada SimulIDE port ini (bersama Port B)
memiliki I/O yang terbanyak dapat dipergunakan (8 pin).
Sementara Port B diatur sebagai keluaran berupa indikator tambahan, yang visualisasinya
menggunakan probe.
Sedangkan Port C dipergunakan sebagai masukan, bukan dua tetapi empat yaitu PC0, PC1, PC2,
dan PC3.
Kekurangan SimulIDE masih ini sendiri menurut saya masih tergolong biasa aja, ya karena gratis
jangan minta banyak banyak ya. kekurangnya ada di belum banyaknya tipe mikrokontroler yang
di dukung, seperti Atmega16 dan Atmega32. nah, alternatifnya anda dapat menggunakan
Atmega328 yang telah tersedia di aplikasi itu.
Referensi :
Pengenalan CodeVision AVR - Immersa Lab (immersa-lab.com)
Software Simulasi Gratis Untuk Belajar Elektonika (initialboard.com)
Program 1.
/*
* delay.c
*
* Created: 21/03/2021 11:46:50
* Author: dell
*/
void main(void)
{
// Crystal Oscillator division factor: 1
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (1<<CLKPS2) | (1<<CLKPS1) |
(1<<CLKPS0);
// Port D initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out
Bit0=Out
DDRD=(1<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) |
(1<<DDD2) | (1<<DDD1) | (1<<DDD0);
// State: Bit7=1 Bit6=1 Bit5=1 Bit4=1 Bit3=1 Bit2=1 Bit1=1 Bit0=1
// All LEDs are initally off
PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) |
(1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);
while (1)
{
if(PORTD=255) PORTD=0; else PORTD=255;
delay_ms(1000);
}
}
4) Upload file biner untuk program no.1 ke chip atmega328 Aktifkan tegangan 5V dan
simulasikan rangkaian Amati output.
5) Ubah properties clock pada atmega 328 dengan nilai yang lain dan ulangi langkah no
3.
6) Ubah nilai factor pembagi clock pada register CLKPR (clock prescaller) dengan nilai
yang berbeda dan ulang langkah no.3
7) Ulangi langkah 1 s/d langkah 6 untuk program 2.
Program 2.
/*
* delay.c
*
* Created: 21/03/2021 11:46:50
* Author: dell
*/
void main(void)
{
// Crystal Oscillator division factor: 1
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) |
(0<<CLKPS1) | (0<<CLKPS0);
// Port D initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out
Bit2=Out Bit1=Out Bit0=Out
DDRD=(1<<DDD7) | (1<DDD6) | (1<<DDD5) | (1<<DDD4) |
(1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
// State: Bit7=1 Bit6=1 Bit5=1 Bit4=1 Bit3=1 Bit2=1 Bit1=1 Bit0=1
PORTD=(1<<PORTD7) & (1<PORTD6) | (1<<PORTD5) |
(1<<PORTD4) | (1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) |
(1<<PORTD0);
while (1)
{
if(PORTD==25
5) PORTD=0; else PORTD=255;
tunggu(10);
}
}
void tunggu(int tunda)
{ for(x=0;x<1000;x++) for(y=0;y<tunda;y++);
}
8) Ulangi langkah 1 s/d langkah 6 untuk program 3.
Program 3.
/*
* delay.c
*
* Created: 21/03/2021 11:46:50
* Author: dell
*/
/*
* newled.c
*
* Created: 18/03/2021 21:51:41
* Author: dell
*/
#include <mega328.h>
void main(void)
{
char x; int i;
x=0xfe;
// Port D initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out
Bit0=Out
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) |
(1<<DDD2)
| (1<<DDD1) | (1<<DDD0);
// State: Bit7=1 Bit6=1 Bit5=1 Bit4=1 Bit3=1 Bit2=1 Bit1=1 Bit0=1
PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) |
(1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) |
(0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) |
(0<<CS11) | (1<<CS10);
while (1)
{
PORTD=x;
for(i=0;i<122;i++){ while(!(TIFR1.TOV1));
TIFR1.TOV1=1;
}
x=(x<<1)|1; if(x==0xff) x=0xfe;
// Please write your application code here
}}
5.Hasil Pengamatan
1. Program 1
a. Program
#include <mega328.h>
#include <delay.h>
void main(void)
{
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (1<<CLKPS2) | (1<<CLKPS1) |
(1<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) |
(0<<DDB2) | (0<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) |
(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) |
(0<<DDC1) | (0<<DDC0);
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) |
(0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) |
(1<<DDD2) | (1<<DDD1) | (1<<DDD0);
PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) |
(1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);
while (1)
{
if(PORTD==255){
PORTD=0;
}
else {
PORTD=255;
};
delay_ms(1000);
}
}
b. Output
Seluruh LED akan menyala selama 1 detik kemudian akan mati selama 1 detik dan
akan terus
2. Program 2
a. Program
#include <mega328.h>
#include <io.h>
#include <stdio.h>
void tunggu(int tunda)
{
int x,y;
for(x=0;x<1000;x++)
for(y=0;y<tunda;y++)
}
void main(void)
{
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) |
(0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) |
(0<<DDB2) | (0<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) |
(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) |
(0<<DDC1) | (0<<DDC0);
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) |
(0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) |
(1<<DDD2) | (1<<DDD1) | (1<<DDD0);
PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) |
(1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);
while (1)
{
if(PORTD==255){
PORTD=0; }
else {
PORTD=255;};
tunggu(10);
}
}
b. Output
3. Program 3
a. Program
#include <mega328.h>
void main(void)
{
char x;
int i;
x=0xfe;
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) |
(0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) |
(0<<DDB2) | (0<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) |
(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) |
(0<<DDC1) | (0<<DDC0);
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) |
(0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) |
(1<<DDD2) | (1<<DDD1) | (1<<DDD0);
PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) |
(1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) |
(0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) |
(0<<CS11) | (1<<CS10);
while (1)
{
PORTD=x;
for (i=0;i<122;i++){
while (!(TIFR1.TOV1));
TIFR1.TOV1=1;
}
x=(x<<1)|1;
if (x==0xff){
x=0xfe;
}
}
}
b. Output
LED akan menyala bergeser dari kanan ke kiri dengan delay sekitar 1 detik
4. Program 8 bit up
a. Program
#include <mega328.h>
#include <delay.h>
void main(void)
{
char x;
x=0xfe;
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) |
(0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) |
(0<<DDB2) | (0<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) |
(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) |
(0<<DDC1) | (0<<DDC0);
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) |
(0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) |
(1<<DDD2) | (1<<DDD1) | (1<<DDD0);
PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) |
(1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);
while (1)
{
PORTD=x;
delay_ms(1000);
x--;
}
}
b. Output
LED 8bit counter up dengan delay sekitar 1 detik dan akankembali mengulang ketika
seluruh LED telah menyala
b. Output
LED 8bit counter down dengan delay sekitar 1 detik dan akan kembali mengulang
ketika seluruh LED mati
6. Program led bergeser ke kiri dan kanan berulang
a. Program
#include <mega328.h>
#include <delay.h>
#include <stdio.h>
void main(void)
{
char x;
int i;
x=0xfe;
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) |
(0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) |
(0<<DDB2) | (0<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) |
(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) |
(0<<DDC1) | (0<<DDC0);
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) |
(0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
Bit0=Out
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) |
(1<<DDD2) | (1<<DDD1) | (1<<DDD0);
PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) |
(1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);
while (1)
{
back:
PORTD=x;
x=(x<<1)|1;
delay_ms(1000);
if (x==0x7f){
for (i=0;i<7;i++){
PORTD=x;
x=(x>>1)|0x80;
delay_ms(1000);
if(x==0xfe){
goto back;};
};
};
}
}
b. Output
LED akan menyala bergeser dari kiri ke kanan, dengan delay 1 detik,maka setelah
sampai ke ujung kanan akan mengulang
void main(void)
{
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) |
(0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
while (1)
{
if(PORTD==255){
PORTD=0; }
else {
PORTD=255;};
}
tunda(1000);
}
b. Output