Modul Praktikum Mikrokontroler
Modul Praktikum Mikrokontroler
Contoh Program:
Mode 1:
/*****************************************************
Project : Tampilan LED
Project : Latihan1
Version : 01
Date : 15/09/2017
Author : LA
Company : TEKNIK ELEKTRO
Comments:
niki latihan seng nomer setunggal
*****************************************************/
#include <mega16.h>
#include <delay.h>
//=============================
unsigned char data,banyak_ulang;
//=== ini fungsi tampil LED geser kiri = void
geser_kiri(void)
{
int ulang;
data=0x01;
for (ulang=0;ulang<8;ulang++)
{
PORTC=data;
delay_ms(1000);
data=data<<1;
}
}
//=== ini fungsi tampil LED geser kanan == void
geser_kanan(int banyak_ulang)
{
int ulang; data=0x80;
for (ulang=0;ulang<banyak_ulang;ulang++)
{
PORTC=data;
delay_ms(1000);
data=data>>1;
}
}
//=================================
while (1)
{
// Place your code here
geser_kiri(); //panggil fungsi
geser kiri banyak_ulang=3;
geser_kanan(banyak_ulang); //panggil fungsi geser kanan
}
}
//==== Akhir Main Program ===========
1.5 Latihan
- Buatlah program untuk menyalakan beberapa jenis animasi nyala pada LED
1.6 Kesimpulan
- Buatlah kesimpulan tentang percobaan yang telah anda lakukan tersebut.
PERCOBAAN II
AKSES TOMBOL
2.1 Tujuan
- Memahami dasar-dasar akses tombol masukan
- Membaca status tombol sebagai masukan, untuk menyalakan LED dengan
bermacam animasi
Contoh Program:
#include <mega16.h>
#include <delay.h>
#define LED1 PORTD.0
#define LED2 PORTD.1
#define LED3 PORTD.2
#define LED4 PORTD.3
#define LED5 PORTD.4
#define LED6 PORTD.5
#define LED7 PORTD.6
#define LED8 PORTD.7
#define tombol1 PINB.0
#define tombol2 PINB.1
#define tombol3 PINB.2
#define tombol4 PINB.3
#define tombol5 PINB.4
#define tombol6 PINB.5
#define tombol7 PINB.6
#define tombol8 PINB.7
#define hidup 1
#define mati 0
}
if(tombol8==0)
{
if(kondisi8==0)
{
LED8=hidup;
kondisi8=1;
delay_ms(50);
}
else
{
LED8=mati;
kondisi8=0;
delay_ms(50);
}
}
}
}
2.6 Kesimpulan
Buatlah kesimpulan tentang percobaan yang telah anda lakukan tersebut.
PERCOBAAN III
AKSES 7 SEGMENT
3.1 Tujuan
- Memahami dasar-dasar 7 segment.
- Mengetahui dasar-dasar akses 7 segment dengan Mikrokontroler AVR.
Pada rangkaian percobaan tersebut penyalaan dari 7 segment dibuat dengan sistem
penyalaan scanning. Data dikirim secara bergantian. Hanya salah satu 7 segment
yang menyala. Karena menyala bergantian secara cepat, maka seolah-olah menyala
bersamaan.
Cara penyalaan:
- Matikan semua.
- Kirim data angka.
- Aktifkan salah satu segment (transistor).
Contoh Program:
#include <mega16.h>
#include <delay.h>
//=================
#define bit_0 PORTD.0
#define bit_1 PORTD.1
#define bit_2 PORTD.2
#define bit_3 PORTD.3
//===================
#define s1 PORTD.4
#define s2 PORTD.5
#define s3 PORTD.6
#define s4 PORTD.7
Void aktif_s2(void)
{S1=1; s2=0; s3=1; s4=1;}
Void aktif_s3(void)
{S1=1; s2=1; s3=0; s4=1;}
Void aktif_s4(void)
{S1=1; s2=1; s3=1; s4=0;}
Void aktif_semua(void)
{S1=0; s2=0; s3=0; s4=0;}
Void mati_semua(void)
{S1=1; s2=1; s3=1; s4=1;}
//===========================
while (1)
{
// Place your code here
mati_semua();
Kirim_angka();
Aktif_s1();
delay_ms(500);
angka++;
if (angka==10) {angka=0;}
}
Compile lalu kemudian isikan ke IC dan jalankan. Amati hasilnya.
3.5 Latihan
Latihan 1:
- Menyalakan 7 segment dari angka 0-9.
- Kalau sudah angka 9 kembali ke angka 0 lagi dan seterusnya.
- Tampilkan di semua 7 segment bersamaan.
- Tampilkan hanya di satu 7 segment saja.
Latihan 2:
- Tampilkan angka hitung Counter dari 0-9999 pada 7 segment.
- Saat hitung counter < 10, nyala 1 digit.
- Saat hitung counter < 100, nyala 2 digit.
- Saat hitung counter < 1000, nyala 3 digit.
- Saat hitung counter > 1000, nyala 4 digit.
3.6 Kesimpulan
Buatlah kesimpulan tentang percobaan yang telah anda lakukan tersebut.
PERCOBAAN IV
AKSES LCD MENAMPILKAN KARAKTER
4.1 Tujuan
- Memahami dasar-dasar konfigurasi pin LCD.
- Mengetahui dasar-dasar akses LCD dengan Mikrokontroler AVR.
Contoh Program:
Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>
#define T1 PINC.0
#define T2 PINC.1
#define T3 PINC.2
#define T4 PINC.3
#define T5 PINC.4
#define T6 PINC.5
#include <alcd.h>
// Declare your global variables here
int satuan=0,puluhan=0,ratusan=0,ribuan=0,loket=0;
eeprom int simpan_antrian;
eeprom unsigned char simpan_loket;
int antrian=0;
char str_hitung[4];
//=== ini fungsi pecah nilai antrian ==
void pecah_antrian(void)
{
ribuan=antrian/1000;
ratusan=antrian/100;
ratusan=ratusan % 10;
puluhan=antrian/10;
puluhan=puluhan % 10;
satuan=antrian % 10;
}
//=======================
//=== ini fungsi pecah hitung ==
//=======================
//=== ini fungsi Tampil hitung ==
void simpan_di_eeprom(void)
{
simpan_antrian=antrian;
simpan_loket=loket;
}
void tampil_antrian(void)
{ lcd_clear();
// mengahapus tampilan di LCD
lcd_putsf("ANTRIAN LOKET");
lcd_gotoxy(1,1);
sprintf(str_hitung,"%d%d%d%d",ribuan,ratusan,puluhan,sa
tuan);
lcd_puts(str_hitung); lcd_gotoxy(13,1);
sprintf(str_hitung,"%d",loket);
lcd_puts(str_hitung);
delay_ms(100); // Tunda 100 milidetik
}
void main(void)
{
// Declare your local variables here
//====
//Characters/line: 16
lcd_init(16);
lcd_clear(); // menghapus tampilan di LCD
lcd_gotoxy(0,0); //Kursor kolom 0 Baris 0
lcd_putsf("Halo"); // menampilkan string
lcd_gotoxy(0,1); //Kursor kolom 0 Baris 1
lcd_putsf("Elektro UHT"); // menampilkan string
delay_ms(1000);
while (1)
{
//= Bagian baca tombolAntrian ====
if (T1==0)
// jika tombol T1 ditekan
{
loket=1;
antrian++;
pecah_antrian();
tampil_antrian();
simpan_di_eeprom();
while (T1==0);
delay_ms(100);
}
if (T2==0)
// jika tombol T2 ditekan
{
loket=2;
antrian++;
pecah_antrian();
tampil_antrian();
simpan_di_eeprom();
while (T2==0);
delay_ms(100);
}
if (T3==0)
// jika tombol T3 ditekan
{
loket=3;
antrian++;
pecah_antrian();
tampil_antrian();
simpan_di_eeprom();
while (T3==0);
delay_ms(100);
}
if (T4==0)
// jika tombol T4 ditekan
{
loket=4;
antrian++;
pecah_antrian();
tampil_antrian();
simpan_di_eeprom();
while (T4==0);
delay_ms(100);
}
if (T5==0)
// jika tombol T5 ditekan
{
loket=5;
antrian++;
pecah_antrian();
tampil_antrian();
simpan_di_eeprom();
while (T5==0);
delay_ms(100);
}
if (T6==0)
// jika tombol T6 ditekan
{
loket=6;
antrian++;
pecah_antrian();
tampil_antrian();
simpan_di_eeprom();
while (T6==0);
delay_ms(100);
}
//--
//--
if (RESET==0)
// jika tombol T7 ditekan
{
loket=0;
antrian=0;
pecah_antrian();
tampil_antrian();
simpan_di_eeprom();
while (RESET==0);
delay_ms(100);
}
}
// Place your code here*/
}
Compile lalu kemudian isikan ke IC dan jalankan . Amati hasilnya.
4.5 Latihan
- Tampilkan 4 baris kalimat secara bergantian terus menerus.
- Tampilkan nilai counter penambahan 1 angka tiap detik.
4.6 Kesimpulan
Buatlah kesimpulan tentang percobaan yang telah anda lakukan tersebut.
PERCOBAAN V
AKSES KEYPAD
5.1 Tujuan
- Memahami dasar-dasar keypad.
- Mengetahui akses keypad dengan Bascom-AVR.
- Menampilkan hasil penekanan tombol keypad pada LCD.
#define K1 PINB.0
#define K2 PINB.1
#define K3 PINB.2
//=======================//
#define B1 PORTB.3
#define B2 PORTB.4
#define B3 PORTB.5
#define B4 PORTB.6
//=======================//
void baca_keypad(void)
{
// bila baris 1 diberi 0
B1=0; B2=1; B3=1; B4=1;
delay_ms(1);
if(K1==0){data_keypad=1; return;}
if(K2==0){data_keypad=2; return;}
if(K3==0){data_keypad=3; return;}
void animasi_sambut(void)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Hello :)");
delay_ms(30);
lcd_gotoxy(0,1);
lcd_putsf("Elektro - UHT");
delay_ms(30);
}
void main(void)
//====
lcd_init(16);
animasi_sambut();
while (1)
{
// Place your code here
data_keypad=20;
baca_keypad();
if (data_keypad != 20)
{
tampil_LCD();
}
}
}
5.5 Latihan
- Buatlah program input data dengan keypad dan tampilkan di LCD.
- Buatlah program seolah-olah input data nomor HP.
5.6 Kesimpulan
Buatlah kesimpulan tentang percobaan yang telah anda lakukan tersebut.
PERCOBAAN VI
AKSES SERIAL RS-232
6.1 Tujuan
- Memahami dasar-dasar serial RS-232
- Mengetahui komunikasi antara mikrokontroler dengan komputer dengan
Serial RS-232.
- Kontrol nyala LED pada Mikrokontroler lewat Komputer dengan
komunikasi Serial RS-232.
Contoh Program:
Membuat program mikrokontroler dengan Codevision AVR
Perintah kirim data serial dengan Codevision AVR
#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
char terima;
unsigned char datanya;
#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
#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
{
tx_buffer[tx_wr_index++]=c;
#if TX_BUFFER_SIZE != 256
if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
#endif
++tx_counter;
}
else
UDR=c;
#asm("sei")
}
#pragma used-
#endif
void main(void)
{
// Declare your local variables here
// 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=T
State1=T State0=T
PORTC=0x00;
DDRC=0x03;
// 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=0x80;
DDRD=0x00;
// 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;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
}
while (1)
{
// Place your code here
// if (terima=='A') // jika data serial karakter
'A'
if (datanya==0x41) // jika data serial karakter
'A'
{
lcd_clear();
lcd_putsf("Data");
lcd_gotoxy(0,1);
lcd_putsf("DATA DI TERIMA");
delay_ms(1000);
}
//---------
//-- BACA PENEKANAN TOMBOL ---
if (tombol==0)
{
putchar('A');
//printf("A");
delay_ms(500);
lcd_clear();
lcd_putsf("Data");
lcd_gotoxy(0,1);
lcd_putsf("DATA DI KIRIM");
delay_ms(1000);
led1=0;
delay_ms(500);
led1=1;
delay_ms(500);
led1=0;
delay_ms(500);
led1=1;
delay_ms(500);
} else {
lcd_clear();
lcd_putsf("Data");
lcd_gotoxy(0,1);
lcd_putsf("OFF");
}
}
}
Contoh Program pada Delphi7
Program pada Delphi7
Procedure Tform1.Comport1RxChart (Sender: Tobject;
Count: Integer);
Var
Str: string;
Begin
Comport1.ReadStr(str,count);
Edit1.text:=str;
End;
Procedure Tform1.Button_aturComClick (Sender;
Toject);
Begin
Comport1.ShowSetupDialog;
End;
Procedure Tform1.Button_KirimDataClick (Sender;
Toject);
Begin
Comport1.WriteStr(Edit2.text);
End;
6.6 Latihan
- Buatlah program komunikasi data dari mikrokontroler ke komputer.
6.7 Kesimpulan
Buatlah kesimpulan tentang percobaan yang telah anda lakukan tersebut.