Jam Digital Menggunakan AT89C2051 dengan Tampilan Seven Segmen

Mungkin bagi sebagian pembaca Jam Digital merupakan hal yang sangat sederhana atau sudah terlalu umum, tapi dari Jam Digital bisa dipelajari prinsip-prinsip dasar kontrol dengan microcontroller, antara lain  sistem tampilan 7 ruas dan pemakaian ti­mer.
Klik pada gambar untuk ukuran sebenarnya


Rangkaian lengkap Jam Digital ini terlihat pada Gambar 1, dilengkapi 4 buah tampilan 7 ruas LED untuk menampilkan waktu, terdiri atas angka-angka puluhan jam, satuan jam, puluhan menit dan satuan menit. Tombol SW1 dan SW2 dipakai untuk mengatur tampilan waktu, saat SW1 ditekan angka pada tampilan jam akan bertambah setiap detik, sedangkan SW2 dipakai untuk mengatur angka tampilan menit dengan cara yang sama.
Kristal 12 MHz dan kapasitor C1 dan C2 membentuk rangkaian oscilator pembangkit frekuensi kerja AT89C2051, rangkaian ini merupakan rangkaian baku, artinya bentuk rangkaian oscilator ini selalu seperti ini untuk semua rangkaian AT89C51, kecuali untuk keperluan yang lain nilai kristalnya saja yang mungkin berbeda.
Kombinasi kapasitor C3 dan tahanan R8 juga merupakan rangkaian baku, komponen ini dipakai untuk membentuk rangkaian ‘power on reset’, artinya rangkaian yang akan otomatis me-reset AT89C2051 setiap kali AT89C2051 mulai menerima sumber daya listrik.
Melihat rangkaian pada Gambar 1, memang tidak bisa dijelaskan bagaimana Jam Digital ini bekerja, karena rangkaian itu hanyalah bagian tampilan dan tombol pengatur waktu waktu saja, ‘Jam’ yang sesungguh­nya berupa program yang disimpan di dalam ROM yang ada di dalam IC AT89C2051.

Program lengkap Jam Digital ini, berikut dengan gambar skema dan gambar PCB dalam format OrCAD 9, bisa download disini

Pengukur Jarak Ultrasonik Menggunakan AT89C2051 dengan Tampilan Seven Segmen

   Meminjam teknik echo sounder yang dipakai untuk mengukur kedalaman laut, bisa dibuat alat pengukur jarak dengan ultra sonic. Pengukur jarak ini memakai rangkaian yang sama dengan Jam Digital dalam artikel yang lalu, ditambah dengan rangkaian pemancar dan penerima Ultra Sonic.

    Prinsip kerja echo sounder untuk pengukuran jarak digambarkan dalam Gambar 1. Pulsa Ultrasonic, yang merupakan sinyal ultrasonic dengan frekwensi lebih kurang 41 KHz sebanyak 12 periode, dikirimkan dari pemancar Ultrasonic. Ketika pulsa mengenai benda penghalang, pulsa ini dipantulkan, dan diterima kembali oleh penerima Ultrasonic. Dengan mengukur selang waktu antara saat pulsa dikirim dan pulsa pantul diterima, jarak antara alat pengukur dan benda penghalang bisa dihitung.

     Gambar 2 merupakan Rangkaian Jam Digital dalam artikel lalu yang direvisi untuk keperluan ini. Titik desimal pada tampilan satuan dinyalakan dengan tahanan R8. Setiap kali tombol Start ditekan, AT89C2051 membangkitkan pulsa ultrasonic pada Pin P3.4 yang dipancarkan dengan rangkaian Gambar 3, selanjutnya lewat pin P3.5 yang terhubung ke rangkaian penerima ultrasonic di Gambar 4, sambil mengukur selang waktu AT89C2051 memantau datangnya pulsa pantul.
    Hasil pengukuran waktu itu, dengan sedikit perhitungan matematis ditampilkan di sistem penampil 7 ruas sebagai besaran jarak, dengan satuan centimeter dan 1 angka dibelakang titik desimal.
Klik pada gambar untuk melihat ukuran sebenarnya
 

Rangkaian Kontrol & Tampilan




Rangkaian Pemancar Ultra Sonic



Rangkaian Penerima Ultra Sonic


Potongan Program 2 - Mengukur waktu pantulan ultra sonic

      1   SET   TR1                                        Hidupkan untaian pencacah
      2   SampaiNol:    
      3    JNB   TF1,SampaiNol                   Tunggu selama TF1 masih =1
      4   ACALL PulsaUltraSonic                Bangkitkan pulsa Ultrasonic   
      5   TungguPantulan:     
      6   JB    TF1,Selesai                             TL1/TH1 melimpah? Ya, stop
      7   JB    P3.5,TungguPantulan           Tunggu selama P3.5 =1
      8   Selesai:
      9   CLR   TR1                                        Matikan untaian pencacah


Potongan Program 3 - Menghitung jarak

      1      CLR   A
      2      MOV   Operand,TL1
      3      MOV   Operand+1,TH1
      4      MOV   Operand+2,A
      5      MOV   Pengali,#10
      6      MOV   Pengali+1,A
      7      MOV   Pengali+2,A
      8      ACALL Perkalian                HasilKali := 10 * TL1_TH1
      9   ;
  10      MOV   R0,#HasilKali
  11      MOV   R1,#Operand
  12      ACALL Copy                     Copy-kan isi HasilKali ke Operand
  13      MOV   Pembagi,#58
  14      MOV   Pembagi+1,#0
  15      MOV   Pembagi+2,#0
  16      ACALL Pembagian                HasilBagi := (10*TL1_TH1) / 58

Potongan Program 4 - Jarak dalam bentuk biner dirubah ke desimal untuk ditampilkan

      1   MenampilkanHasil:
      2      ACALL HapusTampilan
      3   ;
      4      MOV   DPTR,#AngkaPembagi      Mulai dengan 1000
      5      MOV   R7,#4                   Maksimum 4 digit
      6      MOV   R4,#RuasRatusan
      7      CLR   F0                      Belum pernah simpan
      8           
      9      MOV   R0,#HasilBagi
  10      MOV   R1,#SisaBagi
  11      ACALL Copy
  12   DigitBerikutnya:
  13      MOV   R0,#SisaBagi
  14      MOV   R1,#Operand
  15      ACALL Copy
  16     
  17   * Ambil AngkaPembagi dari Tabel
  18    
  19      CLR   A
  20      MOV   Pembagi+2,A
  21      MOVC  A,@A+DPTR
  22      INC   DPTR
  23      MOV   Pembagi,A
  24    
  25      CLR   A
  26      MOVC  A,@A+DPTR
  27      INC   DPTR
  28      MOV   Pembagi+1,A
  29     
  30      ACALL Pembagian         SisaBagi dibagi 1000; 100; 10 dan 1
  31     
  32      MOV   A,HasilBagi HasilBagi=0?
  33      JNZ   SimpanRuas        Tidak, jadikan simpan ruas
  34      JNB   F0,Berikutnya     Belum pernah simpan dan 0
  35   SimpanRuas:
  36      SETB   F0               Sudah pernah simpan angka
  37      ACALL JadikanRuas
  38      MOV   R0,$04            R0 <- R4
  39      MOV   @R0,A             Simpan
  40   Berikutnya:
  41      INC   R4
  42      DJNZ  R7,DigitBerikutnya
  43      RET
  44    
  45   AngkaPembagi:
  46      DW    1000
  47      DW    100
  48      DW    10
  49      DW    1

 P          Program untuk mengendalikan AT89C2051 harus diisikan ke dalam IC microcontroller itu, untuk itu diperlukan alat yang dinamakan sebagai AT89C2051 Flash PEROM Programmer.
Program Lengkap Pengukur Jarak Ultrasonik menggunakan AT89C2051 dapat anda download disini

Jenis-Jenis Mikrokontroler

Mikrokontroler adalah sebuah sistem mikroprosesor lengkap yang terkandung di dalam sebuah chip. Mikrokontroler berbeda dari mikroprosesor serba guna yang digunakan dalam sebuah PC, karena sebuah mikrokontroler umumnya telah berisi komponen pendukung sistem minimal mikroprosesor, yakni memori dan antarmuka I/O.



Jenis – jenis Mikrokontrol:

Atmel
Atmel AT91 series (ARM THUMB architecture)
AT90, Tiny & Mega series – AVR (Atmel Norway design)
Atmel AT89 series (Intel 8051/MCS51 architecture)

Microchip
Low End, Mikrokontroler PIC 12-bit
Mid Range, Mikrokontroler PIC 14-bit
(PIC16F84, PIC16F877)
16-bit instruction PIC
High End, Mikrokontroler PIC 16-bit

Philips Semiconductors
LPC2000, LPC900, LPC700

Penggunaan microcontrol

Sistem mikrokontroler lebih banyak melakukan pekerjaan-pekerjaaan sederhana yang penting seperti mengendalikan motor, saklar/relay, resistor variabel, atau perangkat elektronis lain. Seringkali satu-satunya bentuk antarmuka yang ada pada sebuah sistem mikrokontroler hanyalah sebuah LED, bahkan ini pun bisa dihilangkan jika tuntutan konsumsi daya listrik mengharuskan demikian.


Alat - Alat pemrograman microcontrol


Untuk membuat suatu aplikasi AVR, perlu beberapa tool yang harus
disiapkan. Tool-tool tersebut diperlukan untuk menjalankan tahap-tahap pemrograman AVR. Pada dasarnya, terdapat tiga tahap utama yang perlu dikerjakan dalam pemrograman AVR, yaitu:


Penulisan / Editing
Asembling dan Debuging
Programming/Downloading/Burning
Alat yang dibutuhkan :
Kit Microcontroller / Trainer Microcontroller
Software Assembler
Programmer/downloader

Bahasa Pemrograman yang sering digunakan :
Assembler ( AVR Studio 4 )
Bahasa C (ext. WinAVR)
Setiap bahasa memiliki kelebihan dan kekurangannya masing-masing. Bahasa assembler dituliskan dengan detail setiap langkah yang dijalankan, sehingga penulisanya relatif lebih panjang. Pemrogram harus mengetahui benar proses yang terjadi dalam program tersebut. Namun demikian, program assembler sangat cocok dalam hal efisiensi penggunaan memori program. Di sisi lain, bahasa C memiliki kemudahan dalam penulisan program, namun terkadang kode yang dihasilkan akan memakan memori program yang besar.

Pemrograman Assembler


Program assembler berisi mnemonic instruksi, label, dan pengarah assembler (directive). Mnemonic instruksi, label, dan pengarah assembler (directive). Mnemonic instruksi dan pengarah sering kali membutuhkan operan dalam penulisannya. Baris kode dalam penulisan program assembler dibatasi hingga 120 karakter.
Software yang dibutuhkan :
AVR Studio 4
Digunakan untuk menulis kode program dan mengcompile kode yang selanjutnya siap untuk didownload ke chip micro.
Ponyprog 2000
Digunakan untuk downloader hasil compile dari AVR Studio kedalam chip micro.

Struktur dasar micro
Terdiri atas :
General purpose register ( R0 – R31) untuk operasi aritmetika
I/O Register ( Register Untuk Input Output )
Port I/O

Register adalah media penyimpanan dengan kapasitas 8 bit.
Register dapat diisidengan bilangan dari 0 sampai 255 atau dengan bilangan
Hexadecimal dari $00 sampai $FF

Cara memulai belajar pemrograman bisa dilihat disini.



Contoh kode :
Output sederhana .
Tuliskan pada editor AVR Studio.


;My Very First AVR Project
.include “2313def.inc" ;Memasukan file definisi 2313 kedalam program
.def Temp = R16 ; mendefinisikan R16 dengan nama Temp
rjmp RESET ;melompat ke label RESET
RESET: ;Reset Label
ldi Temp, $FF ; Mengisi Temp dengan bilangan $FF
out DDRB, Temp ;Mengeset PORTB sebagai Output
Loop: ;Loop Label
ldi Temp, $0F ; Mengisi Temp dengan bilangan $0F
out PORTB, Temp ; outputkan nilai Temp ke PORTB
rjmp Loop ;melompat ke label Loop


Contoh kode :
Input sederhana .
Tuliskan pada editor AVR Studio.

;My Very First AVR Project
.include “2313def.inc" ;Memasukan file definisi 2313 kedalam program
.def Temp = R16 ; mendefinisikan R16 dengan nama Temp
rjmp RESET ;melompat ke label RESET
RESET: ;Reset Label
ldi Temp, $00 ;Mengisi Temp dengan bilangan $00
out DDRD, Temp ;mengeset PORTD sebagai Input
ldi Temp, $FF ; Mengisi Temp dengan bilangan $FF
out DDRB, Temp ;Mengeset PORTB sebagai Output
LOOP:
sbis PIND,0 ;Lewati perintah selanjutnya jika PIND bit 0 Kondisi HIGH
rcall NYALA ;Memanggil Instruksi dalam label NYALA
sbis PIND,1 ;Lewati perintah selanjutnya jika PIND bit 1 Kondisi HIGH
rcall MATI ;Memanggil Instruksi dalam label MATI
rjmp LOOP ;Melompat ke label LOOP
NYALA:
sbi PORTB,0 ;Mengeset HIGH pada PORTB bit 0
ret ;Return / Kembali
MATI:
cbi PORTB,0 ;Mengeset LOW pada PORTB bit 0
Ret ;Return / Kembali


Contoh kode :
Delay.
Tuliskan pada editor AVR Studio.

.include “2313def.inc"
.def Temp = R16
rjmp RESET
RESET: ldi TEMP,low(RAMEND)
out SPL,TEMP
ldi Temp, $FF
out DDRB, Temp
LEDBLINK: ldi Temp,$0F
out PORTB,Temp
rcall DELAY
ldi Temp,$F0
out PORTB,Temp
rcall DELAY
rjmp LEDBLINK
DELAY: ldi R17, $48
WGLOOP0: ldi R18, $BC
WGLOOP1: ldi R19, $C4
WGLOOP2: dec R19
brne WGLOOP2
dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
ldi R17, $02
WGLOOP3: dec R17
brne WGLOOP3
nop
nop
ret

Konverter USB Ke RS232/serial

Pada artikel berikut akan dibahas bagaimana caranya mengimplementasikan dan membuat Converter USB to Serial sendiri dengan microcontroller ATmega8. Pada ATmega8 ini nanti akan diberikan source code firmwarenya Free dan bisa di download di bagian bawah.
Karena pada ATmega8 tidak tersedia fasilitas untuk komunikasi dengan USB, maka mau tidak mau protokol komunikasi data dengan USB harus dibuat sendiri pada firmware tersebut.  Pada firmware yang bisa didownload sudah ada code untuk menghandle protokol usb, sehingga bisa langsung digunakan, tetapi jika anda ingin menambahkan fasilitas lain, anda bisa meng-edit firmware tersebut. Firmware yang disediakan ditulis dalam bahasa assembler yang bisa di kerjakan dan di compile dengan AVR Studio 4. Selain code Assemblernya disertakan juga code Hexa-nya hasil kompilasi dari AVR Studio 4 yang bisa langsung di masukkan di IC-nya.
Berikut ini adalah gambar schematic rangkaian USB to Serial converter dengan ATmega8.


Configurasi Port serialnya


Line data USB yaitu D+ dan D- dihubungkan dengan PB0 dan PB1 pada ATmega8, koneksi ini tidak boleh dirubah karena pada pin ini bisa dilakukan transfer data dengan kecepatan tinggi. Agar terjadi suatu koneksi dan pen-signal-an yang bagus antara USB dan devais ini, maka ATmega8 akan diperkerjakan pada kecepatan data Low Speed yaitu dengan cara mem-pull-up resistor 1k5 Ohm pada line data D-. Untuk komponen yang lain hanya digunakan sebagai pelengkap agar system dapat beropersai dengan bagus, misalnya Xtall digunakan sebagai clock dan capacitor digunakan sebagai filter power supply.
Jika pada rangkaian ini anda menginginkan USB to RS-232 converter maka anda perlu menambahkan IC MAX 232 sebagai converter dari Level TTL ke level RS232. Jika hanya ingin digunakan untuk mengontrol LED anda bisa langsung hubungkan ke PIN I/O langsung yang di seri dengan resistor sebelumnya.
Untuk implementasi firmwarenya sebagai penerima dan coding dari USB protocolnya, akan menerima semua paket data dari USB dan kemudian disimpan di dalam internal buffer. Dimulai dari penerimaan pertama yang diperoleh dari external interrupt (INT0) adalah data untuk “sync pattern”, selama proses penerimaan hanya paket yang terakhir yang di check yaitu signal EOP (End of Packet). Setelah proses penerimaan berhasil, berikutnya firmware akan mong-coding sejumlah paket data yang diterimanya dan kemudian menganalisanya.


Firmware secara umum dibagi menjadi beberapa bagian blok utama, yaitu :
  • Interrupt Routine
  • Decoding Routine (Termasuk NRZI Encoding, BitStuffing Removal/Addition).
  • USB Reception
  • USB Transmission
  • Requested Action Decoding
  • Performing Requested Custom Actions
User dapat menambah function function tertentu kedalam firmware, seperti function untuk membuat “Customer-Specific”, function untuk “Direct Pin Control” dan lain sebagainya. Untuk firmware lengkapnya bisa anda download di bagian bawah. 
Untuk ATmega8 yang akan dipakai berikut support untuk 800 byte FIFO buffer, dengan baudrate 300 sampai 115200 baudrate, databit (5,6,7,8), stopbit (1,2), dan parity-nya (none, odd, even,  mark, space). 
Dengan menggunakan ATmega8 ini ada beberapa kemungkinan fitur yang bisa ditambahkan misalnya :
  • USB read/write ke dalam internal memori EEPROM yang berukuran 512 byte untuk menyimpan data misalnya data kalibrasi atau data kode produk.
  • Kemungkinan untuk memanfaatkan PWM dan ADC (Analog to Digital Converter) yang ada pada ATmega8.
  • Dengan space memori program yang masih besar, user bisa menambahkan fasilitas lain misalnya untuk USB to I2C converter atau USB to Serial PS2 dan converter – converter yang lain.
  • User bisa membuat / menambahkan semacam bootloader kedalam ATmega8, sehingga apabila ingin dilakukan Upgrade Firmware cukup dilakukannya lewat USB.
Pada contoh artikel dibawah ini digunakan Delphi sebagai program antarmuka di komputernya. Untuk source code dan executable Delphi ini bisa di download dibagian bawah. Bentuk program delphi executablenya seperti pada gambar dibawah ini :


Download section:
  • Program Interface dengan delphi download disini
  • Driver dan File DLL (Dynamic Link Library) download disini
  • Source code AVR download disini
Catatan: Dikutip dari http://iddhien.com/ 

Perbedaan AT89C51 dengan AT89S51

AT89C51 Features:
• Compatible with MCS-51™ Products
• 4K Bytes of In-System Reprogrammable Flash Memory
– Endurance: 1,000 Write/Erase Cycles
• Fully Static Operation: 0 Hz to 24 MHz
• Three-level Program Memory Lock
• 128 x 8-bit Internal RAM
• 32 Programmable I/O Lines
• Two 16-bit Timer/Counters
• Six Interrupt Sources
• Programmable Serial Channel
• Low-power Idle and Power-down Modes





AT89S51Features:
• Compatible with MCS®-51 Products
• 4K Bytes of In-System Programmable (ISP) Flash Memory
– Endurance: 1000 Write/Erase Cycles
• 4.0V to 5.5V Operating Range
• Fully Static Operation: 0 Hz to 33 MHz
• Three-level Program Memory Lock
• 128 x 8-bit Internal RAM
• 32 Programmable I/O Lines
• Two 16-bit Timer/Counters
• Six Interrupt Sources
• Full Duplex UART Serial Channel
• Low-power Idle and Power-down Modes
• Interrupt Recovery from Power-down Mode
• Watchdog Timer
• Dual Data Pointer
• Power-off Flag
• Fast Programming Time
• Flexible ISP Programming (Byte and Page Mode)
• Green (Pb/Halide-free) Packaging Option



Tinggal dibandingkan aja sendiri, sekilas tipe S51 lebih unggul.