Anda di halaman 1dari 17

LAPORAN PRAKTIKUM

SISTEM MIKROPROSESOR DAN MIKROKONTROLER

Kelas : 2B

Nama/NIM Praktikan : Fitra Sartivian / 191311047

No. Urut Percobaan :1

No/Nama Modul
: CODEVISION & SIMULIDE
Percobaan

Tanggal Penugasan : 22 Maret 2021

Tanggal Pelaporan : 28 Maret 2021

PROGRAM STUDI D3 TEKNIK ELEKTRONIKA


POLITEKNIK NEGERI BANDUNG
Semester 4 2020/2021
1. Tujuan
Sesudah praktikum diharapkan mampu :
➢ Menggunakan compiler codevision
➢ Menggunakan simulator simulide atau proteus
➢ Membuat delay dengan menggunakaan software
➢ Membuat delay dengan menggunakan modul hardware timer
➢ Memahami modul hardware timer

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.

CodeVisionAVR dapat menghasilkan kode program secara otomatis melalui fasilitas


CodeWizardAVR Automatic Program Generator. Dengan adanya fasilitas ini maka penulisan
program dapat dilakukan dengan cepat dan lebih efisien. Seluruh kode dapat diimplementasikan
dengan fungsi sebagai berikut:

➢ Identifikasi sumber reset


➢ Mengatur akses memori eksternal
➢ Inisialisasi port input/output
➢ Inisialisasi interupsi eksternal
➢ Inisialisasi timer/counter dan watchdog timer
➢ Inisialisasi USART dan interupsi buffer untuk komunikasi serial
➢ Inisialisasi komparator analog dan ADC
➢ Inisialisasi interface SPI dan two wire interface (TWI)
➢ Inisialisasi interface CAN
➢ Inisialisasi I2C Bus, sensor suhu LM75, thermometer/thermostat DS1621, dan real time
clock PCF8563, PCF8583, DS1302, DS1307
➢ Inisialisasi 1 wire bus dan sensor suhu DS1820/DS18S20
➢ Inisialisasi modul LCD

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)

3. Alat dan Komponen yang Digunakan


• Laptop/PC
• Software Codevison dan Simulide
4. Langkah-langkah Percobaan
1) Buat project baru, beri nama project, gunakan mikrokontroller atmega 328 dengan
clock 8 Mhz dan simpan pada folder kerja saudara
2) Buat program1 dibawah, compile dan edit program hingga tidak ada error, lalu build
program 1.

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);
}
}

3) Buat rangkaian seperti di bawah, atur properties clock 8 Mhz


Gambar 1.1 gambar rangkaian pada SimulIDE

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
}}

9) Perhatikan berapa durasi waktu setiap perubahan display led?


10) Buat program 8 bit up counter naik 8
11) Buat program 8 bit down counter turun
12) Buat program LED bergeser ke kiri dan kanan berulang

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

Seluruh LED akan flip flop,menyala dan mati

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

5. Program 8 bit down


a. Program
#include <mega328.h>
#include <delay.h>
#include <stdio.h>
void main(void)
{
char x;
x=0x00;
#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 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

7. Program Tambahan langkah 13


a. Program
#include <mega328.h>
#include <delay.h>

// Declare your global variables here


void tunda(int a)
{
delay_ms(a);
}

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;};
}
tunda(1000);
}
b. Output

LED akan flip flop menyala dan mati selama 1 detik


1. Kesimpulan
Dari praktikum kali ini dapat disimpulkan bahwa
1. Codevision AVR dapat memprogram yang akan dilakukan oleh mikrokontroler Atmel
AVR pada hal ini adalah AT Mega 328 dengan menggunakan compiler Bahasa C
2. Codevision dapat melakukan program delay dan loop for
3. SimulIde dapat merealisasikan program yang telah dirancang dari Codevision AVR
untuk kemudian diterapkan pada rangkaian yang telah dibuat pada SimulIde
4. Dengan menggunakan Codevision AVR dan Simulide kita dapat memprogram LED
untuk mengatur nyala dan matinya,pereseran Led,delay,dan counter up serta counter
down

Anda mungkin juga menyukai