Makalah Mikroprosesor - Jam Digital
Makalah Mikroprosesor - Jam Digital
Makalah Mikroprosesor - Jam Digital
SHERLY MELISA SEMBIRING YOHANA BR. SITEPU LELY DAHLYANA ABNER SORITUA SIDAURUK
KOM C EKSTENSI
PROGRAM STUDI S1 ILMU KOMPUTER DEPARTEMEN ILMU KOMPUTER FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA MEDAN 2014
BAB 1
PENDAHULUAN
1.1
Latar Belakang
Jam digital merupakan salah satu aplikasi dari mikrokontroler AT89S51, hal ini sangat masuk akal karena harga dari mirokontroler cukup ekonomis apabila dijadikan sebuah jam digital, masalah utama dalam pembuatannya adalah pada penyingkronan waktu dan bagaimana mengendalikan display yang dalam hal ini digunakan seven segmen melalui port serial yang terdapat pada mikrokontroler, disini juga digunakan Shif Register untuk mengeser data pada Seven Segment, adapun pemogramannya disini digunakan bahasa pemograman assembly yang sesuai dengan mata kuliah yang diajarkan.
1.2
Batasan Masalah
Pembuatan jam digital ini hanya sebatas menampilkan jam, menit dan detik.
1.3
Tujuan
Tujuan dari pembuatan makalah ini adalah untuk memenuhi tugas microprosesor serta untuk menambah pengetahuan tentang microcontroler.
BAB 2
TINJAUAN PUSTAKA
2.1
Definisi Mikrokontroler
Mikrokontroler adalah suatu chip yang digunakan untuk mengontrol alat-alat elektronik secara digital dan analog. Selain itu mikrokontroler juga dapat digunakan untuk mengontrol suatu proses yang dipengaruhi oleh lingkungan dan dieksekusi oleh mikrokontroler secara otomatis.
2.2
Fungsi Mikrokontroler
Mikrokontroler secara umum berfungsi menekankan biaya produksi. Mikrokontroler adalah pengendali kecil dimana sebuah sistem elektronik yang sebelumnya banyak memerlukan komponen-komponen pendukung seperti IC TTL dan CMOS dapat direduksi/diperkecil dan akhirnya terpusat serta dikendalikan oleh mikrokontroler ini. Jadi intinya adalah menekan penggunaan komponen yang terlalu banyak menjadi sedikit.
2.3
Secara teknis hanya ada 2 jenis mikrokontroler yaitu RISC dan CISC dan masing-masing mempunyai keturunan/keluarga sendiri-sendiri. RISC kepanjangan dari Reduced Instruction Set Computer : instruksi terbatas tapi memiliki fasilitas yang lebih banyak. Sedangkan CISC kepanjangan dari Complex Instruction Set Computer : instruksi bisa dikatakan lebih lengkap tapi dengan fasilitas secukupnya.
Tentang jenisnya banyak sekali ada keluarga Motorola dengan seri 68xx, keluarga MCS51 yang diproduksi Atmel, Philip, Dallas, keluarga PIC dari Microchip, Renesas, Zilog. Masing-masing keluarga juga masih terbagi lagi dalam beberapa tipe. Jadi sulit sekali untuk menghitung jumlah mikrokontroler
2.4
1. Berdasarkan data yang ada pada register Program Counter. Mikrokontroler mengambil data dari ROM dengan alamat sebagaimana ditunjukkan dalam Program Counter. Selanjutnya Program Counter ditambah nilainya dengan 1 (increment) secara otomatis. Data yang diambil tersebut merupakan urutan instruksi program pengendali mikrokontroler yang sebelumnya telah dituliskan oleh pembuatnya. 2. Instruksi tersebut diolah dan dijalankan. Proses pengerjaan bergantung pada jenis instruksi; bisa membaca, mengubah nilai-nilai dalam register, RAM, isi port atau melakukan pembacaan dan dilanjutkan dengan pengubahan data. 3. Program Counter telah berubah nilainya (baik karena penambahan secara otomatris sebagaimana dijelaskan pada langkah 1 di atas atau karena pengubahan data pada langkah 2). Selanjutnya yang dilakukan mikrokontroler adalah mengulang kembali siklus ini pada langkah 1. Demikian seterusnya hingga catu daya dimatikan.
2.5
Seven Segment
Seven Segment merupakan Kombinasi dari beberapa ruas Led yang disusun sedemikian rupa sehingga membentuk suatu karakter angka yang biasa dikenal dalam kehidupan seharihari. Seven Segmen terbagi atas dua jenis yaitu: Comon anoda dan comon katoda, disini yang kita pakai adalah comon anoda, yang merupakan seven segmen aktif low. Dimana seven segment ini akan aktif apabila inputnya diberi logika low.
2.6
AVR merupakan salah satu jenis mikrokontroler yang di dalamnya terdapat berbagai macam fungsi. Perbedaannya pada mikro yang pada umumnya digunakan seperti MCS51 adalah pada AVR tidak perlu menggunakan oscillator eksternal karena di dalamnya sudah terdapat internal oscillator. Selain itu kelebihan dari AVR adalah memiliki Power Power-On Reset, yaitu tidak perlu ada tombol reset dari luar karena cukup hanya dengan mematikan supply, maka secara otomatis AVR akan melakukan reset. Untuk beberapa jenis AVR terdapat beb beberapa fungsi khusus seperti ADC, EEPROM sekitar 128 byte sampai dengan 512 byte.
AVR ATmega8 adalah mikrokontroler CMOS 8-bit 8 bit berarsitektur AVR RISC yang memiliki 8K byte in-System System Programmable Flash. Mikrokontroler dengan konsumsi daya rendah ini mampu mengeksekusi instruksi dengan kecepatan maksimum 16MIPS pada frekuensi 16MHz. Jika dibandingkan dengan ATmega8L perbedaannya hanya terletak pada besarnya tegangan yang diperlukan untuk bekerja. Untuk ATmega8 tipe L, mikrokontroler ini dapat bekerja dengan tegangan antara 2,7 - 5,5 V sedangkan untuk ATmega8 hanya dapat bekerja pada tegangan antara 4,5 5,5 V.
2.6.1
ATmega8 memiliki 28 Pin, yang masing-masing pin nya memiliki fungsi yang berbeda-beda baik sebagai port maupun fungsi yang lainnya. Berikut akan dijelaskan fungsi dari masingmasing kaki ATmega8 : 1. VCC Merupakan supply tegangan digital.
3. Port B (PB7...PB0) Didalam Port B terdapat XTAL1, XTAL2, TOSC1, TOSC2. Jumlah Port B adalah 8 buah pin, mulai dari pin B.0 sampai dengan B.7. Tiap pin dapat digunakan sebagai input maupun output. Port B merupakan sebuah 8-bit bi-directional I/O dengan internal pull-up resistor. Sebagai input, pin-pin yang terdapat pada port B yang secara eksternal diturunkan, maka akan mengeluarkan arus jika pull-up resistor diaktifkan. Khusus PB6 dapat digunakan sebagai input Kristal (inverting oscillator amplifier) dan input ke rangkaian clock internal, bergantung pada pengaturan Fuse bit yang digunakan untuk memilih sumber clock. Sedangkan untuk PB7 dapat digunakan sebagai output Kristal (output oscillator amplifier) bergantung pada pengaturan Fuse
bit yang digunakan untuk memilih sumber clock. Jika sumber clock yang dipilih dari oscillator internal, PB7 dan PB6 dapat digunakan sebagai I/O atau jika menggunakan Asyncronous Timer/Counter2 maka PB6 dan PB7 (TOSC2 dan TOSC1) digunakan untuk saluran input timer.
4. Port C (PC5PC0) Port C merupakan sebuah 7-bit bi-directional I/O port yang di dalam masing-masing pin terdapat pull-up resistor. Jumlah pin nya hanya 7 buah mulai dari pin C.0 sampai dengan pin C.6. Sebagai keluaran/output port C memiliki karakteristik yang sama dalam hal menyerap arus (sink) ataupun mengeluarkan arus (source).
5. RESET/PC6 Jika RSTDISBL Fuse diprogram, maka PC6 akan berfungsi sebagai pin I/O. Pin ini memiliki karakteristik yang berbeda dengan pin-pin yang terdapat pada port C lainnya. Namun jika RSTDISBL Fuse tidak diprogram, maka pin ini akan berfungsi sebagai input reset. Dan jika level tegangan yang masuk ke pin ini rendah dan pulsa yang ada lebih pendek dari pulsa minimum, maka akan menghasilkan suatu kondisi
reset meskipun clock-nya tidak bekerja.
6. Port D (PD7PD0) Port D merupakan 8-bit bi-directional I/O dengan internal pull-up resistor. Fungsi dari port ini sama dengan port-port yang lain. Hanya saja pada port ini tidak terdapat kegunaan-kegunaan yang lain. Pada port ini hanya berfungsi sebagai masukan dan keluaran saja atau biasa disebut dengan I/O.
7. Avcc Pin ini berfungsi sebagai supply tegangan untuk ADC. Untuk pin ini harus dihubungkan secara terpisah dengan VCC karena pin ini digunakan untuk analog saja. Bahkan jika ADC pada AVR tidak digunakan tetap saja disarankan untuk menghubungkannya secara terpisah dengan VCC. Jika ADC digunakan, maka AVcc harus dihubungkan ke VCC melalui low pass filter.
Pada AVR status register mengandung beberapa informasi mengenai hasil dari kebanyakan hasil eksekusi instruksi aritmatik. Informasi ini digunakan untuk altering arus program sebagai kegunaan untuk meningkatkan performa pengoperasian. Register ini di-update setelah operasi ALU (Arithmetic Logic Unit) hal tersebut seperti yang tertulis dalam datasheet khususnya pada bagian Instruction Set Reference. Dalam hal ini untuk beberapa kasus dapat membuang 10 penggunaan kebutuhan instrukasi perbandingan yang telah didedikasikan serta dapat menghasilkan peningkatan dalam hal kecepatan dan kode yang lebih sederhana dan singkat. Register ini tidak secara otomatis tersimpan ketika memasuki sebuah rutin interupsi dan juga ketika menjalankan sebuah perintah setelah kembali dari interupsi. Namun hal tersebut harus dilakukan melalui software. Berikut adalah gambar status register.
9. Bit 7(I) Merupakan bit Global Interrupt Enable. Bit ini harus di-set agar semua perintah interupsi dapat dijalankan. Untuk perintah interupsi individual akan di jelaskan pada bagian yang lain. Jika bit ini di-reset, maka semua perintah interupsi baik yang individual maupun yang secara umum akan di abaikan. Bit ini akan dibersihkan atau cleared oleh hardware setelah sebuah interupsi di jalankan dan akan di-set kembali oleh perintah RETI. Bit ini juga dapat diset dan di-reset melalui aplikasi dan intruksi SEI dan CLL.
10. Bit 6(T) Merupakan bit Copy Storage. Instruksi bit Copy Instructions BLD (Bit Load) and BST (Bit Store) menggunakan bit ini sebagai asal atau tujuan untuk bit yang telah dioperasikan. Sebuah bit dari sebuah register dalam Register File dapat disalin ke dalam bit ini dengan menggunakan instruksi BST, dan sebuah bit di dalam bit ini dapat disalin ke dalam bit di dalam register pada Register File dengan menggunakan perintah BLD.
11. Bit 5(H) Merupakan bit Half Carry Flag. Bit ini menandakan sebuah Half Carry dalam beberapa operasi aritmatika. Bit ini berfungsi dalam aritmatika BCD.
12. Bit 4(S) Merupakan Sign bit. Bit ini selalu merupakan sebuah ekslusif di antara Negative Flag (N) dan twos Complement Overflow Flag (V).
13. Bit 3(V) Merupakan bit Twos Complement Overflow Flag. Bit ini menyediakan fungsi aritmatika dua komplemen.
14. Bit 2(N) Merupakan bit Negative Flag. Bit ini mengindikasikan sebuah hasil negative di dalam sebuah fungsi logika atai aritmatika.
15. Bit 1(Z) Merupakan bit Zero Flag. Bit ini mengindikasikan sebuah jasil nol 0 dalan sebuah fungsi aritmatika atau logika.
16. Bit 0(C) Merupakan bit Carry Flag. Bit ini mengindikasikan sebuah Carry atau sisa dalam sebuah aritmatika atau logika.
10
BAB 3
3.1
1. 2. 3. 4. 5. 6. 7. 8. 9.
r 10K ohm r 330 ohm r 100 ohm r 4K7 ohm c 100uf/ 16 volt c 22pf non polar Transistor NPN C9013 xtall 12Mhz Xtall 32,XXX Mhz
1 6 8 2 2 2 6 1 1 1 1 1 5 1 6 1 1 2 6 14 1 2 1 1 1 1
Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah Buah
10. Soket baterai kancing 11. RTC DS1307+socket 12. ATmega8 + socket 13. Push button (tombol) 14. IC ULN 2803 + socket 15. 7 Segmen (Anoda) 16. IC ATmega8 17. Crystal 12Mhz 18. Capasitor 22pf 19. Transistor NPN C9013 20. Resistor 330 ohm 21. Resistor 10 Kohm 22. Resistor 4K7 23. Crystal 32Mhz 24. Soket baterai kancing 25. Baterai kancing CR2032 26. Push button untuk reset
11
1 1
Buah Buah
3.2
12
3.2
13
BAB 4
PENUTUP
4.1
Kesimpulan
Mikrokontroler AT89S51 dapat dirancang menjadi sebuah jam digital, Dengan rangkaian sederhana dalam membuat sebuah rangkaian kita tentunya dituntut untuk paham dari dari sebuah microcontroler yang kita gunakan. Pada program, waktu pertama dimulai jam 00.00.00, maka dalam awal pengoperasiannya perlu menunggu waktu tengah malam supaya jam ini sesuai dengan waktu yang sebenarnya. Hai ni merupakan salah satu kelemahan jam ini, namun jika kita tidak ingin menunggu waktu sampai tengah malam maka perlu ada sedikit modifikasi pada awal program
14
LISTING PROGRAM
1. Jam.c /***************************************************** Chip type Program type Clock frequency Memory model External SRAM size Data Stack size : ATmega8 : Application : 12.000000 MHz : Small : 0 : 256
*****************************************************/ #include <mega8.h> #include <delay.h> #define satu #define dua #define tiga #define empat #define lima #define enam #define tujuh #define delapan #define sembilan #define nol #define padam #define dot #define angka PORTD=0b00011000 PORTD=0b11010110 PORTD=0b11011100 PORTD=0b01111000 PORTD=0b11101100 PORTD=0b11101110 PORTD=0b10011000 PORTD=0b11111110 PORTD=0b11111100 PORTD=0b10111110 PORTD=0b00000000 PORTD=0b00000001 PORTD
#define dig1 #define dig3 #define dig4 #define dig5 #define dig6 #define dig2
PORTB=0b00000010; delay_ms(1); PORTB=0b00000100; delay_ms(1); PORTB=0b00001000; delay_ms(1); PORTB=0b00010000; delay_ms(1); PORTB=0b00100000; delay_ms(1); PORTB=0b00000001; delay_ms(1);
15
// I2C Bus functions #asm .equ __i2c_port=0x15 ;PORTC .equ __sda_bit=4 .equ __scl_bit=5 #endasm #include <i2c.h>
// Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=T State6=T State5=0 State4=0 State3=0 State2=0
16
// 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
// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00;
// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off
17
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: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00;
// Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00;
18
// DS1307 Real Time Clock initialization // Square wave output on pin SQW/OUT: Off // SQW/OUT pin state: 0 rtc_init(0,0,0);
if(haur==24){haur=0;delay_ms(100);}
if(mmin==0){minut--;delay_ms(100);} if(mplus==0){minut++;delay_ms(100);}
if(minut==60){minut=0;delay_ms(100);}
jam(h10,h1,m10,m1,s10,s1);
rtc_set_time(haur,minut,0); //untuk menset jam 09:10:26 //rtc_set_date(8,11,87); //untuk menset tanggal: 8 nov 1987
19
} }
while (1) { // Place your code here rtc_get_time(&h,&m,&s); menit dan detik //rtc_get_date(&d,&mo,&y); tanggal, bulan dan tahun //mendapatkan nilai //mendapatkan nilai jam,
jam(h10,h1,m10,m1,s10,s1);
}; }
20
2. Kalkulasi.c
unsigned char h, m, s, d, mo, y; //unsigned nol,padam,satu,dua,tiga,empat,lima,enam,tujuh,delapan,sembilan ,angka; unsigned char haur,minut; //unsigned dot,dig1,dig2,dig3,dig4,dig5,dig6;
void
jam(unsigned
char
angka1,unsigned
char
angka2,unsigned
char angka3,unsigned char angka4,unsigned char angka5,unsigned char angka6) { if(angka1==0){digit1=padam;} if(angka1==1){digit1=satu;} if(angka1==2){digit1=dua;} if(angka1==3){digit1=tiga;} if(angka1==4){digit1=empat;} if(angka1==5){digit1=lima;} if(angka1==6){digit1=enam;} if(angka1==7){digit1=tujuh;} if(angka1==8){digit1=delapan;} if(angka1==9){digit1=sembilan;}
21
if(angka3==0){digit3=padam;} if(angka3==1){digit3=satu;} if(angka3==2){digit3=dua;} if(angka3==3){digit3=tiga;} if(angka3==4){digit3=empat;} if(angka3==5){digit3=lima;} if(angka3==6){digit3=enam;} if(angka3==7){digit3=tujuh;} if(angka3==8){digit3=delapan;} if(angka3==9){digit3=sembilan;}
if(angka4==0){digit4=nol;} if(angka4==1){digit4=satu;} if(angka4==2){digit4=dua;} if(angka4==3){digit4=tiga;} if(angka4==4){digit4=empat;} if(angka4==5){digit4=lima;} if(angka4==6){digit4=enam;} if(angka4==7){digit4=tujuh;} if(angka4==8){digit4=delapan;} if(angka4==9){digit4=sembilan;}
22
if(angka5==8){digit5=delapan;} if(angka5==9){digit5=sembilan;}
if(angka6==0){digit6=nol;} if(angka6==1){digit6=satu;} if(angka6==2){digit6=dua;} if(angka6==3){digit6=tiga;} if(angka6==4){digit6=empat;} if(angka6==5){digit6=lima;} if(angka6==6){digit6=enam;} if(angka6==7){digit6=tujuh;} if(angka6==8){digit6=delapan;} if(angka6==9){digit6=sembilan;}