TENTANG I/O
A. TEORI DASAR
Secara umum setiap mikrokontroler memiliki I/O port. Jumlahnya
berbedabeda untuk masingmasing mikrokontroler. Mikrokontroler AVR AT90SXXX juga
memiliki I/O port yang jumlahnya bervariasi, dari mulai satu port hingga lebih
dari empat port. Meskipun dari sisi jumlah berbeda, namun karakteristik I/O
port mikrokontroler AVR adalah sama. Untuk lebih jelasnya anda dapat membaca
datasheet dari mikrokontroler yang anda pakai.
Untuk mengakses port pada mikrokontoler AVR maka anda harus
mengenal register yang ada pada I/O port. Ada tiga register bit pada I/O port yaitu DDRx, PORTx dan PINx. Register
DDRx digunakan untuk menentukan apakah port tersebut akan dijadikan sebagai
input atau output. Sedangkan register PORTx dipakai untuk mengirim data keluar
dari port ketika DDRx diset sebagai output. Dan register PINx dipakai untuk
membaca data pada port ketika DDRx diset sebagai input.
Karena ketiga register di atas adalah register bit maka
masingmasing pin pada port bisa diset secara bebas. Misalkan, kita menginginkan
sebagian dari PORTA dijadikan sebagai input dan sebagian yang lain dijadikan
sebagai output. Hal ini mudah dilakukan dengan mengatur register DDRA, sebagian
sebagai input dan sebagian yang lain sebagai output. Agar pin pada port
berfungsi sebagai input maka bit pada register DDRx diset 0. Sedangkan, pin
pada port akan berfungsi sebagai output ketika bit pada register DDRx diset 1.
Untuk lebih detailnya anda bisa membaca di datasheet.
B. ALAT DAN BAHAN
1.
Modul AVR Atmega8535/8/16/32
2.
PC (Personal
computer)/laptop
3.
Jumper
D. LANGKAH KERJA DAN PENGAMATAN
1.
Buatlah alat dan bahan seperti rangkaian diatas;
2. Buatlah program seperti yang tertulis berikut, uji cobakan/simulasikanlah di Proteus lalu coba pada hardware nyata;
2. Buatlah program seperti yang tertulis berikut, uji cobakan/simulasikanlah di Proteus lalu coba pada hardware nyata;
#include <mega8535.h>
#include <delay.h>
unsigned char kiri=0b00000001, kanan=0b10000000;
void nyala_led()
{
PORTA = 0xff;
delay_ms(500);
PORTA = 0x00;
}
void geser_led_kanan()
{
if (kanan ==0b00000001)
kanan = 0b10000000;
else kanan >>= 1;
PORTA = kanan;
delay_ms(500);
}
void geser_led_kiri()
{
if (kiri==0b10000000)
kiri = 0b00000001;
else kiri <<= 1;
PORTA = kiri;
delay_ms(500);
}
void tekan_tombol_led_nyala()
{
PORTA = PINB;
}
void main(void)
{
PORTA = 0xff;
DDRA = 0xff;
PORTB = 0x0f;
DDRB = 0x00;
while(1)
{
geser_led_kiri() ; // pemanggilan fungsi };
}
}
4.
Selanjutnya dengan cara yang sama coba program berikut;
while (1)
{
if (PINB.0==0) {PORTA=00xFF;} };
}
5. Selanjutnya dengan cara yang sama coba program
berikut;
while (1)
while (1)
{
if(PINB.0==0) PORTA=15;
delay_ms(1000); PORTA=240; delay_ms(1000);
};
}
6.
Selanjutnya dengan cara yang sama coba program berikut;
#include <avr/io.h>
int main (void)
{
//Jadikan Semua PORTA Sebagai Output
DDRA = 0xFF;
//Hidupkan LED
PORTA = 0x0F;
return 0;
}
7. Buatlah kesimpulan dari
hasil praktik saudara.
8.
Tugas, buatlah program jika SW1 ditekan maka
bit ganjil PORTA menyala, kemudian jika SW2 ditekan bit genap PORTA padam.
9.
Tuliskan hasil praktikum ini dan praktikum
selanjutnya dengan format berikut;
E. HASIL DAN ANALISIS
1. Hasil program dari langkah 3
3. Hasil program dari langkah 5
4. Hasil
program dari langkah 6
5. Program
untuk tugas
while (1)
{
if (PINB.0
==1)
{PORTA =
0b01010101;
}
if
(PINB.1 ==1)
{PORTA =
0b10101010;
}
else {
PORTA =
0b00000000;}
} }
Pada percobaan diatas perlu
menambahkan file library #include <delay.h> untuk bisa memberikan
perintah pada program untuk melakukan waktu penundaan. Pada program diatas ada
yang menggunakan kode biner dan hekadesimal, hal tersebut untuk mengatur keluaran
LED. Pada program ini PORTA sebagai output dan PORTB sebagai input.
F.
KESIMPULAN
Dari percobaan yang sudah dilakukan dapat disimpulkan
bahwa :
1.
Perlunya melakukan
konfigurasi input dan output AVR agar dapat lebih terstruktur dan sesuai yang
diinginkan.
2.
Dalam melakukan
konfigurasi input dan output perlu diperhatikan port yang digunakan agar tidak
terjadi error atau no respon dalam praktik.
TENTANG LCD
A. TEORI DASAR
Mengakses
LCD padaAVR dapat dilakukan dengan mode 4 bit. Untuk menggunakan mode 4 bit,
kita dapat menggunakan library built in pada Code Vision. Library ini telah
terdapat berbagai fungsi untuk menampilkan karakter ke LCD. Beberapa perintah
dasar akses LCD antara lain;
1.Membersihkan layar LCDClear();
2.Set cursor pada posisi tertentu LCDGotoXY(x,y); x merupakan
colom pada LCD, y adalah barisnya. Pada LCD 16x2, terdapat 16 yakni 0-15 dan
0-1.
3.Inisialisasi LCD lcd_init(void)
4.Menuliskan karakter ke LCD lcd_putchar(char c). Misalnya lcd_putchar(”C”) akan
menuliskan karakter C ke LCD.
5.Menuliskan string
ke LCD lcd_putsf(char*str). Misalnya, lcd_putsf(“TEMPERATURE”) akan menuliskan string
TEMPERATURE pada LCD. Sebelum dapat menggunakan berbagai
fungsi tersebut, pada bagian header dari program kita harus menginclude
librarynya.
B. ALAT DAN BAHAN
1.
Modul AVR Atmega8535/8/16/32
2.
PC (Personal
computer)/laptop
3.
Jumper
C.
SKEMA RANGKAIAN
D. LANGKAH KERJA DAN PENGAMATAN
1.
Buatlah alat dan bahan seperti
rangkaian di atas;
2.
Buatlah program seperti yang
tertulis berikut, uji cobakan/simulasikanlah di Proteus lalu coba pada hardware nyata;
3.
Cobalah list program berikut;
#include
<mega8535.h>
#include
<alcd.h>
#include
<delay.h>
char
kolom;
void
main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
lcd_init(16);
while
(1)
{
// Place your code here
for (kolom=0; kolom<=15;
kolom++){
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("NAMA:RIZKI NUR Q");
lcd_gotoxy(kolom,1);
lcd_putsf("NIM :16507134015");
delay_ms(1000);
}
}
}
4.
Buatlah kesimpulan dari hasil
praktik saudara.
5.
Tugas, buatlah program dengan
tulisan “LOADING…” berjalan dari kiri ke kanan setelah itu muncul “MIKRO B
2014” tulisan berjalan dari kanan kekiri.
6.
Tuliskan hasil praktikum ini dan
praktikum selanjutnya dengan format.
E. HASIL DAN ANALISIS
Tugas
:
Program dengan tulisan “LOADING…”
berjalan dari kiri ke kanan setelah itu muncul “MIKRO B 2014” tulisan berjalan
dari kanan kekiri.
#include <mega8535.h>
#include <alcd.h>
#include <delay.h>
char kolom =0;
char kolom1=15;
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0xFF;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
lcd_init(16);
while (1)
{
for (kolom=0; kolom<=15; kolom++){
lcd_clear();
lcd_gotoxy(kolom,1);
lcd_putsf("LOADING...");
delay_ms(50); }
for (kolom1=15; kolom1>=0; kolom1--){
lcd_clear();
lcd_gotoxy(kolom1,1);
delay_ms(50); }
}
Hasil Gambar
TENTANG ADC
A. TUJUAN
Setelah melakukan praktik mahasiswa diharapkan dapat:
1. Memahami konfigurasi ADC
2. Menguasai pemrograman ADC untuk aplikasi input sensor
B. TEORI DASAR
ADC (Analog To Digital Converter) adalah perangkat elektronika yang berfungsi untuk mengubah sinyal analog (kontinyu) menjadi sinyal digital (deskret). Perangkat ADC dapat berbentuk suatu modul atau rangkaian elektronika maupun suatu chip IC. ADC berfungsi untuk menjembatani pemrosesan sinyal analog oleh sistem digital.
Kecepatan sampling suatu ADC menyatakan “seberapa sering sinyal analog dikonversikan ke bentuk sinyal digital pada selang waktu tertentu”. Kecepatan sampling biasanya dinyatakan dalam sample per second (SPS).
Gambar. Kecepatan sampling ADC dalam ketelitian
Resolusi ADC menentukan “ketelitian nilai hasil konversi ADC”. Sebagai contoh: ADC 8 bit akan memiliki output 8 bit data digital, ini berarti sinyal input dapat dinyatakan dalam 255 (2n –1) nilai diskrit, ADC 10 bit memiliki 1023 nilai deskret. ADC 12 bit memiliki 12 bit output data digital, ini berarti sinyal input dapat dinyatakan dalam 4096 nilai diskrit. Dari contoh diatas ADC 12 bit akan memberikan ketelitian nilai hasil konversi yang jauh lebih baik daripada ADC 8 bit.
Resolusi ADC = Vref/(nilai bit-1)
Contoh
Jika diketahui : Vref = 5V Prosesor = Atmega16 (8bit)
Maka, Resolusi ADC = 5/(256-1)
= 0,0196 V
Artinya setiap kenaikan 0,0196 V maka nilai ADC akan bertambah 1 nilai deskret ADC. Dengan cara sebaliknya akan diperoleh nilai tegangan input. Resulosi dapat ditingkatkan dengan memperkecil nilai referensi, misalnya:
Jika diketahui : Vref = 2,5 V Prosesor = ATmega16 (8bit)
Resolusi ADC = 2,5/(256-1)
= 0,0098 V
Dengan demikian dapat diartikan bahwa setiap kenaikan 0,0098 V maka nilai deskret ADC akan naik 1 poin. Prinsip kerja ADC mengkonversi sinyal analog ke dalam bentuk besaran yang merupakan rasio perbandingan sinyal input dan tegangan referensi. Sebagai contoh, bila tegangan referensi 5 volt, tegangan input 3 volt, rasio input terhadap referensi adalah 60%. Jadi, jika menggunakan ADC 8 bit dengan skala maksimum 255, akan didapatkan sinyal digital sebesar 60% x 255 = 153 (bentuk decimal) atau 10011001 (bentuk biner).
Sinyal Analog = (sample/max_value) * reference voltage
= (153/255) * 5
= 3 Volts
D. ALAT DAN BAHAN
1. Modul AVR Atmega8535/8/16/32
2. PC (Personal computer)/laptop
3. Jumper
4. Power supply 5-12V
E. SKEMA RANGKAIAN
E. LANGKAH KERJA DAN PENGAMATAN
1. Buatlah alat dan bahan seperti rangkaian di atas;
2. Buatlah program seperti yang tertulis berikut, uji cobakan/simulasikanlah di Proteus lalu coba pada hardware nyata;
3. Cobalah list program berikut;
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include <alcd.h>
#define ADC_VREF_TYPE 0x00
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
unsigned char data = 0;
char kata [16];
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA4;
SFIOR&=0x1F;
SPCR=0x00;
TWCR=0x00;
lcd_init(16);
while (1)
{
char tempC, tempF, display;
float tempff;
tempC = ADCH; // Output ADCH to PortD
tempff = (float)tempC;
tempff = (tempff*9)/5 + 32;
tempF = tempff;
LCD_goto(2,4);
itoa(tempC/10,display,10);
LCD_print(display);
itoa(tempC%10,display,10);
LCD_print(display);
LCD_send_data(0xDF);
LCD_print("C ");
itoa(tempF/10,display,10);
LCD_print(display);
itoa(tempF%10,display,10);
LCD_print(display);
LCD_send_data(0xDF);
LCD_print("F");
_delay_ms(500);
ADCSRA |= 1<<ADSC;
}
}
4. Berikan input ADC Anda berupa potensiometer, amatai apa yang terjadi.
5. Tugas, buatlah program dengan untuk membuat termometer dengan sensor LM35 DZ.
F. HASIL DAN ANALISIS
#include <mega16.h>
#include <stdlib.h>
#include <delay.h>
#include <alcd.h>
#define ADC_VREF_TYPE 0x20
(ADMUX=adc_input | ADC_VREF_TYPE & 0xff);
ADCSRA|=0x40;
ADCSRA|=0x10;
return ADCH;
int SUHU;
char temp[8];
float suhu_celcius;
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0xFF;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA3;
SFIOR&=0x1F;
SPCR=0x00;
TWCR=0x00;
lcd_init(16);
while (1)
{
lcd_clear();
suhu_celcius = (float)SUHU*500/1023;
lcd_gotoxy(0,0);
lcd_putsf("SUHU : ");
ftoa(suhu_celcius,1,temp);
lcd_gotoxy(0,1);
lcd_puts(temp);
lcd_gotoxy(5,1);
lcd_putchar(0xdf);
lcd_putsf("C");
delay_ms(50);
}
}
Pada percobaan ini untuk menampilkan hasil konversi ADC harus didefinisikan terlebih dahulu tipe ADC yang akan digunakan dengan deklarasi #define ADC_VREF_TYPE 0x20 selanjutnya program akan membuat array untuk menampung hasil pembacaan data analog pada variabel suhu. Untuk bisa menggunakan ADC harus mengatur terlebih dahulu registernya yaitu ADMUX, ADCSRA, dan SFIOR. Pada program ini menggunakan pembacaan ADC secara free running. Input yang digunakan adalah PORTA dengan menggunakan potensiometer sebagai pengatur tegangan dan output PORTD yang ditampilkan melalui LCD. Potensiometer disini hanya sebagai pengganti sensor LM35 sebagai pengatur suhunya diibaratkan tegangan.
Untuk membuat thermometer diperlukan membuat rumus yaitu (float)SUHU*500/1023 dan untuk membuat karakter derajat dengan menggunakan lcd_putchar(0xdf);
G. KESIMPULAN
Dari percobaan yang sudah dilakukan dapat disimpulkan bahwa :
1. Sebelum membuat rangkaian ADC harus memahami dulu fungsi dari tiap port pada mikrokontroller.
TENTANG PWM
A. TUJUAN
Setelah
melakukan praktik mahasiswa diharapkan dapat:
1.
Memahami kerja dari PWM
2.
Menguasai pengontrolan motor DC menggunakan PWM
B. TEORI DASAR
PWM (Pulse
Width Modulation) atau modulasi lebar pulsa adalah salah satu keunggulan Timer/Counter yangterdapat pada
Atmega8535. Ketiga jenis Timer/Counter pada
Atmega8535 dapat menghasilkan pulsa PWM. Pulsa PWM adalah sederetan pulsa yang lebar pulsanya dapat diatur. Pulsa PWM
berfungsi mengatur kecepatan motor DC, mengatur gelap terang LED dan aplikasi
lainnya. PWM adalah Timer mode Output
Compare yang canggih. Mode PWM Timer
juga dapat mencacah turun yang berlawanan dengan mode Timer lainnya yang hanya mencacah naik. Pada mode PWM tersebut,
Timer mencacah naik hingga mencapai nilai TOP, yaitu 0xFF (255) untuk PWM 8 bit
dan 0x3FF (1023) untuk PWM 10 bit. Timer/Counter
0 hanya memiliki PWM 8 bit, sedangkan pada Timer/Counter
1 memiliki 9 bit dan PWM 10 bit, dan
Timer/Counter 2 memiliki PWM 8
bit.
Pemilihan mode PWM diseting melalui bit COM01 dan bit OM00 pada register TCCR. Saat COM00 clear dan COM01 set, pin OC0 clear sat timer mencacah diatas Compare Match dan pin OC0 set saat timer
mencacah dibawah Compare Match atau non-inverting PWM. Kebalikannya, saat COM00 set dan COM01 juga
set, maka pin OC0 set saat timer mencacah dibawah Compare Match atau disebut juga inverting
PWM. Agar lebih jelas, perhatikan gambar berikut.
Gambar 1. Pulsa PWM inverting
dan non-inverting
Gambar 2. Hasil Pulsa PWM
Fasilitas timer mikrokontroler digunakan untuk pengaturan PWM.
Berikut ini pengujian fungsionalitas mikrokontroler Atmega 16 dalam
membangkitkan PWM. Penggunanan PWM menggunakan fasilitas overflow pada timer/counter 1.
C. ALAT DAN BAHAN
1.
Modul AVR Atmega8535/8/16/32
2.
PC (Personal
computer)/laptop
3.
Jumper
4.
Power supply 5-12V
5.
CRO
D.
SKEMA RANGKAIAN
E. LANGKAH KERJA DAN PENGAMATAN
1.
Buatlah alat dan bahan seperti
rangkaian di atas;
2.
Buatlah program seperti yang
tertulis berikut, uji cobakan/simulasikanlah di Proteus lalu coba pada hardware nyata;
3.
Cobalah list program berikut;
Dfasfas
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <alcd.h>
#define PULSE PORTB.0
#define ECHO PINB.0
#define ARAH DDRB.0
#define OUT 1
#define INP 0
#include <alcd.h>
unsigned int ultrasonic()
{
unsigned int count=0;
unsigned int jarak;
ARAH=OUT;
PULSE=1
delay_us(5);
PULSE=0;
ARAH=INP;
PULSE=1;
while (ECHO==0) {};
while (ECHO==1)
{
count++;
}
jarak=(unsigned int)(((float)count)/25);
return(jarak);
}
int SigA,SigB;
char MA[12];
char MB[12];
void main(void)
{
PORTA=0xFF;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0xFF;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0xA1;
TCCR1B=0x01;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
lcd_init(16);
while (1)
{
lcd_gotoxy(0,0);
lcd_putsf("MOT1=");
lcd_gotoxy(0,1);
lcd_putsf("MOT2=");
PORTD.0=1;
PORTD.1=0;
PORTD.3=1;
PORTD.4=0;
if(PINA.0==0){SigA++;}
if(PINA.1==0){SigA--;}
if(PINA.2==0){SigB++;}
if(PINA.3==0){SigB--;}
lcd_gotoxy(5,0);
itoa(SigA,MA);
lcd_puts(MA);
lcd_gotoxy(5,1);
itoa(SigB,MB);
lcd_puts(MB);
OCR1A=SigA;
OCR1B=SigB;
}
}
F.
HASIL
G.
KESIMPULAN
Pulse Width Modulation (PWM) atau yang
biasa dikenal dengan modulasi lebar pulsa adalah salah satu fitur yang dimiliki
oleh mikrokontroller. PWM adalah sebuah fitur yang memungkinkan kita untuk
dapat merubah lebar pulsa sesuai dengan keinginan.
TENTANG UART
A.
Tujuan
Setelah melakukan praktik
mahasiswa diharapkan dapat:
2. Mampu mengirim data
menggunakan UART USB termonitor di hyperterminal
B.
Teori Dasar
UART merupakan sebuah subsistem hardware yang memungkinkan untuk melakukan
transmit dan receipt data secara serial. Fitur ini biasnya telah terinclude
dalam sebuah mikrokontroller. Berbeda dari metode komunikasi lain, komunikasi
secara serial mengandalkan clock pada sisi transmit dan receive dimana kedua
sisi clock ini harus sama. Sehingga pada komunikasi ini hanya dibutuhkan tiga
pin, yakni Tx (Transmit), Rx (Receive), dan GND. Pada PC level tegangan RS232
antara +3 hingga +25 volt untuk data 0, dan -3 hingga -25 untuk logika 1. Perlu
diketahui, bahwa pada Atmega16 terdapat pin Txd dan Rxd yang bekerja pada level
UART. Sementara untuk strandar RS232, kita memerlukan sebuah IC converter untuk
menyesuaikan dengan tegangan RS232. Karena level logika pada AVR hanya sekitar
3 – 5 volt.
Ciri
khas daari komunikasi UART adalah sebagai berikut: 1) Pada transmisi asinkron,
mengirimkan 1 stop bit (1) di awal dan 1 atau lebih start bit (0) di akhir
setiap byte. 2) Data ditransmisikan per karakter dalam satu saat (5 sampai 8
bit). 3) Asinkron berarti “asinkron pada level byte”, tetapi bit-bit tetap
disinkronkan; durasinya sama. Teknik paritas memerlukan tambahan satu bit (bit
paritas) pada data word. Bit paritas dapat bernilai 1 atau 0 tergantung pada:
1.
Jumlah angka
1 di dalam data word
2.
Pola paritas
yang digunakan
3.
Bit Paritas digabungkan
pada byte data, sehingga menjadi 9 bit
Pola paritas genap (even parity) memerlukan total jumlah
angka 1 (termasuk bit paritas sendiri) genap. Pola paritas ganjil (odd
parity) memerlukan total jumlah angka 1 ganjil.
C.
Alat
dan Bahan
1.
Modul AVR Atmega8535/8/16/32
2.
PC (Personal
computer)/laptop
3.
Jumper
4.
Power supply
5-12V
5.
CRO
D.
Skema Rangkaian
E.
Hasil
Kerja
Hasil
Program :
#include
<mega16.h>
#include
<stdio.h>
#include
<delay.h>
unsigned
char m,n,a;
void
main(void)
{
DDRA=0x00;
PORTB=0xFF;
DDRB=0xFF;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRA=0x02;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
ACSR=0x80;
SFIOR=0x00;
n=0;
m=0;
a=0;
while
(1)
{
if(PINB.4==0)
{n=n+1;
if
(n==1)
{
putsf("Kalau
tidak belajar mikro
sekarang, kapan lagi?\r");
delay_ms(200);
{n=0;}
}
}
if(PINB.7==0)
{a=a+1;
if
(a==1)
{
putsf("ayo
bali!!!\r");
delay_ms(200);
{a=0;}
}
}
if(PINB.0==0)
{m=m+1;
if
(m==1)
{
putsf("Kalau
bukan kelas B, siapa lagi?\r");
delay_ms(200);
}
{m=0;}
{n=0;}
}
};
}
F.
Hasil Praktikum
G.
Analisis
Pada
pembahasan ini kita mencoba menulis tulisan penyemangat
dengan program CVAVR yang dimasukan ke program kerja sofware ataupun hardware
dan saat dicompail akan muncul program yang kita inginkan melalui tampilan hyperterminal dengan mode uart.
H.
Kesimpulan
UART merupakan sebuah subsistem hardware yang
memungkinkan untuk melakukan transmit dan receipt data secara serial. Fitur ini
biasnya telah terinclude dalam sebuah mikrokontroller. Berbeda dari metode komunikasi
lain, komunikasi secara serial mengandalkan clock pada sisi transmit dan
receive dimana kedua sisi clock ini harus sama. Sehingga pada komunikasi ini
hanya dibutuhkan tiga pin, yakni Tx (Transmit), Rx (Receive), dan GND. Pada PC
level tegangan RS232 antara +3 hingga +25 volt untuk data 0, dan -3 hingga -25
untuk logika 1.
TENTANG RTC
A. TUJUAN
Setelah melakukan praktik mahasiswa diharapkan dapat:
1.
Memahami prinsip kerja
Real Time Clock (RTC)
2.
Mampu menggunakan RTC
untuk mendukung sistem aplikasi elektronika
B. DASAR TEORI
RTC (Real Time Clock) merupakan
jenis timer yang bekerja berdasarkan waktu nyata, atau dengan kata lain berdasarkan waktu sesaui waktu kita.
Agar dapat berfungsi, pewaktu ini membutuhkan dua parameter utama yang harus
ditentukan, yaitu pada saat mulai (start) dan pada saat berhenti (stop). DS1307
merupakan salah satu tipe IC RTC yang dapat bekerja dalam daya listrik rendah,
yang juga sering kita jumpai dalam PC/hanphone. Di dalamnya berisi waktu jam
dan kalender dalam format BCD,. Waktu jam dan kalender memberikan informasi
detik, menit, jam, hari, tanggal,
bulan, dan tahun. Untuk bagian jam dapat berformat 24 jam atau 12 jam. Pendeteksi
sumber listrik juga disediakan untuk mendeteksi kegagalan sumber listrik dan
langsung mengalihkannya ke sumber baterai.
Gambar 1. RTC DS1307
Komunikasi yang digukan untuk RTC
mengacu I2C-Bus atau Inter-Integrated Circuit Bus, merupakan bus serial yang
dikembangkan oleh Phillips. I2C Bus digunakan untuk menghubungkan berbagai
macam IC yang dikontrol oleh sistem micro-processor atau micro-controller
(intelligent control application). Sebagai catatan umumnyakristal 32,768 KHz
dipasang berbaring dan bodi/can disolder dengan ground.
C. ALAT DAN BAHAN
1.
Modul AVR
Atmega8535/8/16/32
2.
Jumper
3.
Power supply 5-12V
D. SKEMA RANGKAIAN
E.
LANGKAH
KERJA DAN PENGAMATAN
1.
Buatlah alat dan bahan
seperti rangkaian di atas;
2.
Sebelum
Anda menulis program aturlah seperti gambar berikut;
Catatan: apabila Anda menggunkan CVAVR versi
non-commercial maka sangat dimungkinkan fasilitas I2C tidak berfungsi, maka
solusinya lakukan upgrade/downgrade ke versi commercial, contoh ini menggunkan
versi CodeVisionAVR 2.03.
3.
Tuliskan list program berikut;
#include
<mega8535.h>
#include
<delay.h>
#include
<stdio.h>
#include
<i2c.h>
#include
<ds1307.h>
#include
<alcd.h>
unsigned
char s,m,h,d,mo,y,dd, temp[16];
void
main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0xFF;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
i2c_init();
rtc_init(0,0,0);
lcd_init(16);
while
(1)
{
rtc_get_time(&h,&m,&s);
rtc_get_date(&d,&mo,&dd,&y);
lcd_gotoxy(0,0);
sprintf(temp,"Pkl %d:%d:%d",
h,m,s);
lcd_puts(temp);
lcd_gotoxy(0,1);
sprintf(temp,"Tgl %d:%d:%d",
d,mo,y);
lcd_puts(temp);
PORTC=0b11111111;
};
}
4.
Setelah Anda
compile, uji cobakan/simulasikanlah di
Proteus lalu coba pada
hardware;
5.
Tugas, buatlah progam
untuk menjalankan motor DC/lampun (beban) apabila jam telah menunjukkan waktu
tertentu. Misalnya saat pukul 09:09:00, maka
beban akan aktif, kemudian jika sudah
pukul 09:12:00, maka beban akan nonaktif.
F. HASIL DAN ANALISA
Program
tugas :
#include
<mega8535.h>
#include
<delay.h>
#include
<stdio.h>
#include
<i2c.h>
#include
<ds1307.h>
#include
<alcd.h>
unsigned
char s,m,h,d,mo,y,dd, temp[16];
void
main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
i2c_init();
rtc_init(0,0,0);
lcd_init(16);
while
(1)
{
rtc_get_time(&h,&m,&s);
rtc_get_date(&d,&mo,&dd,&y);
lcd_gotoxy(0,0);
sprintf(temp,"Pkl %d:%d:%d",
h,m,s);
lcd_puts(temp);
lcd_gotoxy(0,1);
sprintf(temp,"Tgl %d:%d:%d",
d,mo,y);
lcd_puts(temp);
if ((h==16)&&(m==34))
{
PORTC=0b11111111;
}
else if
((h==16)&&(m==34)&&(s==00))
{
PORTC=0b00000000;
}
}
}
Hasil
tugas :
Pada
percobaan RTC ini berfungsi menampilkan hasil dari coding yang ada untuk
menghasilkan berupa tanggal, bulan, dan tahun dan juga waktu setempat. Pada
hasil diatas didapat tanggal yang tidak sesuai dikarenakan masih menggunakan
simulasi. Untuk dapat mengcoding program ini harus mengatur dulu chip, LCD, dan
i2C seperti pada gambar dilangkah kerja. Bentuk komunikasi data dari IC RTC
adalah I2C yang merupakan kepanjangan dari Inter Integrated Circuit. Komunikasi
jenis ini hanya menggunakan 2 jalur komunikasi yaitu SCL dan SDA. SCL/Serial
clock berfungsi untuk menyelaraskan data yang ada antara master dan slave.
Sedangkan SDA/Serial Data berfungsi sebagai saluran data.
Pada
tugas ditambahkan dengan pengaturan putaran motor dengan penyesuaian waktu yang
diinginkan. Untuk dapat menghasilkan itu tinggal menambahkan coding if else
seperti yang ada diatas. Yang diisi waktu sesuai yang diinginkan.
G. KESIMPULAN
Dari
percobaan yang sudah dilakukan dapat disimpulkan bahwa :
1.
RTC adalah fitur komponen untuk mengatur
waktu dengan tepat.
2.
RTC dapat digunakan untuk
pengaturan saklar
suatu alat sesuai dengan konfigurasi yang
diinginkan.
3.
Prinsip kerja RTC ada 2 jalur komunikasi yaitu
SCL dan SDA. SCL/Serial clock berfungsi untuk menyelaraskan data yang ada
antara master dan slave. Sedangkan
SDA/Serial Data berfungsi sebagai saluran data.
Tidak ada komentar:
Posting Komentar