Sistem Minimum ATmega8

Lama tak menulis di blog 🙂
Kali ini saya akan mempostingkan tentang Sistem Minimum ATmega8, Board ini bisa berfungsi sekaligus untuk mengisi firmware bootloader USBasp, Cloning Arduino, Dll yang memerlukan firmware dan setting fuse bit.

Berikut adalah skematiknya

Gambar

Untuk komponennya:

  • ATmega8 DIP + Socket = 1 Buah
  • XTAL 12/16 MHz = 1 Buah
  • Cap 22pF = 2 Buah
  • Cap 1uF/25V = 1 Buah
  • Cap 22uF/25V = 1 Buah
  • Cap 10uF/25V = 1 Buah
  • Res 10K = 1 Buah
  • Res 100ohm = 1 Buah
  • Led Merah/Hijau= 1 Buah
  • Dioda 1N4007 = 1 Buah
  • LM 7805 = 1 Buah
  • Header 2pin = 5 Buah
  • Pin Molex/Sisir 2pin Male
  • Pin Molex/Sisir 1pin Male
  • Push Button 2pin
  • Socket DC Female

ini untuk tampilan layout pcb nya, kali ini saya menggunakan software DXP 2009
Gambar

ini tampilan lainnya

Gambar

Jika ingin mencobanya silahkan download saja filenya FREE disini
Selamat mencoba, Semoga bermanfaat 🙂

Maintenance

Maaf untuk semua yang request skematik & board, Dll. Untuk sementara ini belum bisa terlayani karna laptop saya sedang bermasalah, diperlukan beberapa waktu untuk recovery harddisk. Terimakasih sudah berkunjung 🙂

Timer/Counter Pada ATmega8535

Pada kali ini saya akan membahas tentang timer/counter untuk memberi waktu tunda pada setiap pengolahan mikrokontroller

1. Prescaler
Timer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama dengan frekuensi crystal yang dipasang atau dapat diperlambat menggunakan prescaler dengan faktor 8, 64, 256 atau 1024. Berikut penjelasannya : Sebuah AVR menggunakan crystal dengan frekuensi 8 MHz dan timer yang digunakan adalah timer 16 bit, maka maksimum waktu timer yang bisa dihasilkan adalah :
TMAX = 1/fCLK x (FFFFh+1)
= 0.125uS x 65536
= 0.008192 S

Untuk menghasilkan waktu timer yang lebih lama dapat digunakan prescaler, misalnya 1024, maka maksimum waktu timer yang bisa dihasilkan adalah :
TMAX = 1/fCLK x (FFFFh+1) x N
= 0.125uS x 65536 x 1024
= 8.388608 S

Ketika presacaler digunakan, waktu timer dapat diperpanjang namun tingkat ketelitiannya menjadi turun. Misalnya dengan prescaler 1024 nilai timer akan bertambah 1 setiap kelipatan 1024 pulsa dan membutuhkan waktu 1/fCLK x 1024 = 0.125uS x 1024 = 128 uS bandingkan tingkat resolusi ini jika tanpa precsaler (0.125uS).

2. Timer 16 Bit Normal Mode
Pada mode normal, TCNT1 akan menghitung naik dan membangkitkan interrupt Timer/Counter 1 ketika nilainya berubah dari 0xFFFF ke 0x0000. Seringkali kita menganggap untuk menggunakan timer cukup dengan memasukkan nilai yang diinginkan ke TCNT1 dan menunggu sampai terjadi interrupt. Ini menjadi benar pada timer yang menghitung mundur, tetapi untuk timer yang menghitung maju, maka anda harus memasukkan nilai 65536-(timer value) ke dalam TCNT1.

3

3. Register Timer 16 Bit
• TCNT1
Timer/Counter1 Register digunakan untuk menyimpan nilai timer yang diinginkan. TCNT1
dibagi menjadi 2 register 8 bit yaitu TCNT1H dan TCNT1L.

4

• TIMSK & TIFR
Timer Interrupt Mask Register (TIMSK) dan Timer Interrupt Flag (TIFR) Register digunakan
untuk mengendalikan interrupt mana yang diaktifkan dengan cara melakukan setting pada
TIMSK dan untuk mengetahui interrupt mana yang sedang terjadi.

12• TCCR1B
Timer/Counter1 Control Register B digunakan untuk mengatur mode timer, prescaler dan pilihan lainnya.

5CS12..10: Clock Select bits ;
Tiga bit pemilih prescaler timer/counter 1 dan hubungannya dengan clock eksternal pada
pin T1.

6

7

5. Maksimum Waktu Timer
Timer 16 bit AVR8535 dapat menghasilkan waktu tunda maksimum sebesar 6,068055555 detik pada frekuensi 11,0592MHz

8

7. Mengaktifkan Timer
Setelah tahu nilai yang harus dituliskan ke TCNT1 maka anda harus mengaktifkan bit interrupt terkait dan global interrupt enable. Berikut adalah flowchart apa yang terjadi pada timer :

9

Langkah yang perlu dilakukan adalah :
• Aktifkan TOIE1 pada TIMSK
• Masukkan nilai timer ke TCNT1 misalnya : D5D0h
• Set prescaler pada 1024 ( set bit CS12 dan CS10 pada TCCR1B)
• Aktifkan bit global interrupt pada SREG
• Tunggu. Atau lakukan hal yang lain. Semua perhitungan dan pengecekan flag dilakukan
oleh hardware.

Contoh Program :
.include "m8535def.inc"
.equ timer_value = 0xD5D0
.org 0x0000
rjmp mulai
mulai:
   ldi r16,low(RAMEND)
   out SPL,r16
   ldi r16,high(RAMEND)
   out SPH,r16
ulang:
   ldi r16,0xff
   out ddra,r16
   out PortA,r16
   rcall timer1d
   ldi r16,0x00
   out PortA,r16
   rcall timer1d
   rjmp ulang
timer1d:
   ldi r16,0b00000100 ;aktifkan enable interupt
   out TIMSK,r16
   ldi r16,high(timer_value) ;masukkan nilai timer
   out TCNT1H,r16
   ldi r16,low(timer_value)
   out TCNT1L,r16
   ldi r16,0b00000101 ;masukkan prescaler 1024
   out TCCR1B,r16
looptimer:
   in r17,TIFR
   sbrs r17,TOV1 ;tunggu sampai timer1 overflow set
   rjmp looptimer
   ldi r16,0b00000100 ;TOV1 dinolkan dengan memberi logika 1
   out TIFR,r16
ret

Nah sekian dulu untu materi mengenai timer/counter, selamat mencoba 😀