Monday, 6 October 2014

Membuat delay sendiri Pada ATmega8535

Salam Capasitorr!!
Sebelumnya saya ucapkan selamat idul adha bagi umat islam diseluruh dunia, semoga momen ini dapat meningkatkan keimanan dan ketakwaan kita kepada Allah SWT aamiin aamiin.
Lanjut ke materi kita hari ini yaitu Membuat delay 1 detik menggunakan timer 0. Teman - teman semua pasti sering menggunakan fungsi delay_ms(nominal);  jika compiler  yang dipakai adalah CVAVR. Nah pada kesempatan kali ini kita akan mencoba membuat fungsi delay sendiri menggunakan timer 0. Berikut cara selengkapnya :


1. Buat rangkain di simulasi proteus seperti dibawah ini.


2. Langsung ke source codenya saja, klo setting timernya bisa dilihat di Jam Digital Pada Mikrokontroler karena setting timernya hampir sama.



  1. #include <mega8535.h>
  2. #include <stdio.h>

  3. // Alphanumeric LCD Module functions
  4. #asm
  5.    .equ __lcd_port=0x15 ;PORTC
  6. #endasm
  7. #include <lcd.h>
  8. int limit;
  9. void _delay_s(int detik);
  10. int satu_per_seratus;
  11. bit cek;
  12. int det;
  13. char data[20];

  14. // Timer 0 overflow interrupt service routine
  15. interrupt [TIM0_OVF] void timer0_ovf_isr(void) // interupsi dijalankan setiap satu per seratus
  16. {
  17. // Reinitialize Timer 0 value
  18.     TCNT0=0x94;
  19.     lcd_gotoxy(0,0);
  20.     sprintf(data,"detik = %d",det);
  21.     lcd_puts(data);
  22.     satu_per_seratus++;
  23.     if(satu_per_seratus >= 100) // satu detik = seperseratus * 100; 
  24.     {   
  25.         det++;
  26.         satu_per_seratus = 0;
  27.             if(det>limit)
  28.             { 
  29.             cek=1; 
  30.             }
  31.         lcd_clear();
  32.     }
  33. // Place your code here

  34. }

  35. // Declare your global variables here

  36. void main(void)
  37. {
  38. // Declare your local variables here

  39. // Input/Output Ports initialization
  40. // Port A initialization
  41. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
  42. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
  43. PORTA=0x00;
  44. DDRA=0x00;

  45. // Port B initialization
  46. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
  47. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
  48. PORTB=0x00;
  49. DDRB=0x0F;

  50. // Port C initialization
  51. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
  52. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
  53. PORTC=0x00;
  54. DDRC=0x00;

  55. // Port D initialization
  56. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
  57. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
  58. PORTD=0x00;
  59. DDRD=0x00;

  60. // Timer/Counter 0 initialization
  61. // Clock source: System Clock
  62. // Clock value: 10,800 kHz
  63. // Mode: Normal top=FFh
  64. // OC0 output: Disconnected
  65. TCCR0=0x05;
  66. TCNT0=0x94;
  67. OCR0=0x00;

  68. // Timer/Counter 1 initialization
  69. // Clock source: System Clock
  70. // Clock value: Timer 1 Stopped
  71. // Mode: Normal top=FFFFh
  72. // OC1A output: Discon.
  73. // OC1B output: Discon.
  74. // Noise Canceler: Off
  75. // Input Capture on Falling Edge
  76. // Timer 1 Overflow Interrupt: Off
  77. // Input Capture Interrupt: Off
  78. // Compare A Match Interrupt: Off
  79. // Compare B Match Interrupt: Off
  80. TCCR1A=0x00;
  81. TCCR1B=0x00;
  82. TCNT1H=0x00;
  83. TCNT1L=0x00;
  84. ICR1H=0x00;
  85. ICR1L=0x00;
  86. OCR1AH=0x00;
  87. OCR1AL=0x00;
  88. OCR1BH=0x00;
  89. OCR1BL=0x00;

  90. // Timer/Counter 2 initialization
  91. // Clock source: System Clock
  92. // Clock value: Timer 2 Stopped
  93. // Mode: Normal top=FFh
  94. // OC2 output: Disconnected
  95. ASSR=0x00;
  96. TCCR2=0x00;
  97. TCNT2=0x00;
  98. OCR2=0x00;

  99. // External Interrupt(s) initialization
  100. // INT0: Off
  101. // INT1: Off
  102. // INT2: Off
  103. MCUCR=0x00;
  104. MCUCSR=0x00;

  105. // Timer(s)/Counter(s) Interrupt(s) initialization
  106. TIMSK=0x01;

  107. // Analog Comparator initialization
  108. // Analog Comparator: Off
  109. // Analog Comparator Input Capture by Timer/Counter 1: Off
  110. ACSR=0x80;
  111. SFIOR=0x00;

  112. // LCD module initialization
  113. lcd_init(16);

  114. #asm ("sei")

  115. while (1)
  116.       {
  117.       // Place your code here 
  118.        PORTB = 0b00000001; 
  119.        _delay_s(1);

  120.        PORTB = 0b00000010; 
  121.        _delay_s(5);
  122.        
  123.        PORTB = 0b00000100; 
  124.        _delay_s(1);                     
  125.       };
  126. }

  127. void _delay_s(int detik) // fungsi delay 
  128. {
  129.     cek = 0;
  130.     limit= detik; 
  131.     while(cek!=1); 
  132.     det= 0;
  133. }


Mohon koreksinya yaaa..
Semoga bermanfaat..
Salam Capasitorrr!!!!

No comments:

Post a Comment