Blue Spinning Frozen Snowflake Vidi Fitriansyah Hidarlan's Blog: Rangkaian Jam Digital 7 Segment dengan ATMEGA 16
WELCOME TO MY BLOG :: Share Tips & Trik Tutorial Gadget dan Tugas Kuliah :: "Indahnya Berbagi"

Kamis, 29 Agustus 2019

Rangkaian Jam Digital 7 Segment dengan ATMEGA 16

        Assalamu'alaikum Wr. Wb. pada kesempatan ini saya akan membagikan tutorial cara membuat Jam Digital 7-segment dengan menggunakan Mikrokontroler ATMEGA 16.
     Langsung saja ke topik pembahasan yang akan kita lakukan, tools yang digunakan sama seperti pada postingan sebelumnya yaitu software Code Vision AVR untuk membuat dan meng-compile programnya dan ISIS Proteus untuk membuat desain sistem dan melakukan simulasi.
        Oke mari kita simak langkah-langkahnya saja :
  1. Langkah pertama yaitu membuat project program dengan CV AVR dengan menggunakan CodeWizardAVR dan pilih chip-nya ATmega16 dengan clock 8 MHz seperti gambar di bawah.
  2. Kemudian klik tab menu Ports dan konfigurasikan semua PORT A sampai D dari bit 0 sampai dengan bit 6 sebagai data keluaran dan beri nilai 0 seluruhnya karena pada program ini menggunakan active low.
  3. Selanjutnya masukkan programnya seperti berikut :
    1. /*****************************************************
    2. This program was produced by the
    3. CodeWizardAVR V2.05.3 Standard
    4. Automatic Program Generator
    5. © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    6. http://www.hpinfotech.com

    7. Project : 
    8. Version : 
    9. Date    : 28/08/2019
    10. Author  : Vidi Fitriansyah Hidarlan
    11. Company : Personal
    12. Comments: 


    13. Chip type               : ATmega16
    14. Program type            : Application
    15. AVR Core Clock frequency: 8,000000 MHz
    16. Memory model            : Small
    17. External RAM size       : 0
    18. Data Stack size         : 256
    19. *****************************************************/

    20. #include <mega16.h>
    21. #include <delay.h>
    22. #include <io.h>

    23. // Declare your global variables here

    24. void main(void)
    25. {
    26. // Declare your local variables here
    27.    unsigned char bil[10]={0b10111111,0b10000110,0b11011011,0b11001111,0b11100110,0b11101101,0b11111101,0b10000111,0b11111111,0b11101111};
    28.    /*data untuk nilai 7 segment dari 0-9*/
    29.    int digit1, digit2, digit3, digit4;
    30. // Input/Output Ports initialization
    31. // Port A initialization
    32. // Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    33. // State7=T State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    34. PORTA=0x00;
    35. DDRA=0x7F;

    36. // Port B initialization
    37. // Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    38. // State7=P State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    39. PORTB=0x80;
    40. DDRB=0x7F;

    41. // Port C initialization
    42. // Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    43. // State7=P State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    44. PORTC=0x80;
    45. DDRC=0x7F;

    46. // Port D initialization
    47. // Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    48. // State7=P State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    49. PORTD=0x80;
    50. DDRD=0x7F;

    51. // Timer/Counter 0 initialization
    52. // Clock source: System Clock
    53. // Clock value: Timer 0 Stopped
    54. // Mode: Normal top=0xFF
    55. // OC0 output: Disconnected
    56. TCCR0=0x00;
    57. TCNT0=0x00;
    58. OCR0=0x00;

    59. // Timer/Counter 1 initialization
    60. // Clock source: System Clock
    61. // Clock value: Timer1 Stopped
    62. // Mode: Normal top=0xFFFF
    63. // OC1A output: Discon.
    64. // OC1B output: Discon.
    65. // Noise Canceler: Off
    66. // Input Capture on Falling Edge
    67. // Timer1 Overflow Interrupt: Off
    68. // Input Capture Interrupt: Off
    69. // Compare A Match Interrupt: Off
    70. // Compare B Match Interrupt: Off
    71. TCCR1A=0x00;
    72. TCCR1B=0x00;
    73. TCNT1H=0x00;
    74. TCNT1L=0x00;
    75. ICR1H=0x00;
    76. ICR1L=0x00;
    77. OCR1AH=0x00;
    78. OCR1AL=0x00;
    79. OCR1BH=0x00;
    80. OCR1BL=0x00;

    81. // Timer/Counter 2 initialization
    82. // Clock source: System Clock
    83. // Clock value: Timer2 Stopped
    84. // Mode: Normal top=0xFF
    85. // OC2 output: Disconnected
    86. ASSR=0x00;
    87. TCCR2=0x00;
    88. TCNT2=0x00;
    89. OCR2=0x00;

    90. // External Interrupt(s) initialization
    91. // INT0: Off
    92. // INT1: Off
    93. // INT2: Off
    94. MCUCR=0x00;
    95. MCUCSR=0x00;

    96. // Timer(s)/Counter(s) Interrupt(s) initialization
    97. TIMSK=0x00;

    98. // USART initialization
    99. // USART disabled
    100. UCSRB=0x00;

    101. // Analog Comparator initialization
    102. // Analog Comparator: Off
    103. // Analog Comparator Input Capture by Timer/Counter 1: Off
    104. ACSR=0x80;
    105. SFIOR=0x00;

    106. // ADC initialization
    107. // ADC disabled
    108. ADCSRA=0x00;

    109. // SPI initialization
    110. // SPI disabled
    111. SPCR=0x00;

    112. // TWI initialization
    113. // TWI disabled
    114. TWCR=0x00;

    115. while (1)
    116.       {
    117.       // Place your code here
    118.        start: //untuk kembali ke menu start
    119.        for(digit1=0;digit1<3;digit1++)//7 segment 1 (puluhan) jam
    120.        {
    121.         PORTA=~bil[digit1];//batas nilai puluhan jam jika sudah=2 kemudian kembali lagi ke 0
    122.            for(digit2=0;digit2<10;digit2++)//7 segment 2 (satuan) jam
    123.            {
    124.                 if (digit1==2&&digit2==4)
    125.                 {goto start;}
    126.                PORTB=~bil[digit2];//batas satuan jam sampai=4 jika puluhannya sudah=2
    127.                for(digit3=0;digit3<6;digit3++)// 7 segment 3 (puluhan) menit
    128.                {
    129.                     PORTC=~bil[digit3];//sebagai pembatas digit puluhan menit=5
    130.                     for(digit4=0;digit4<10;digit4++)// 7 segment 4 (satuan) menit
    131.                     {
    132.                         PORTD=~bil[digit4];//inisialisasi nilai PORTD =! bil array digit4 (fungsinya untuk batas nilai satuan menit=9 jika puluhannya sudah=5)
    133.                         delay_ms(50);//waktu tunda untuk satu detik
    134.                     }
    135.                }
    136.            }
    137.        }
    138.        set :
    139.        while (1){
    140.        if (PINB.7==0)
    141.        {
    142.         PORTA=~bil[digit1];
    143.         PORTB=~bil[digit2];
    144.         PORTC=~bil[digit3];
    145.         PORTD=~bil[digit4];
    146.         delay_ms(1000);
    147.         if (PINC.7==0)
    148.         {
    149.             bil[digit2]++;
    150.         }
    151.         else 
    152.         {
    153.             goto set;
    154.         }  
    155.        }
    156.        else
    157.        {
    158.         goto start;
    159.        }
    160.       }}
    161. }
  4. Setelah program dikompilasi kemudian buat rangkaiannya seperti berikut.
  5. Kemudian double click pada ATmega16 dan masukkan programnya dan atur clock speed-nya menggunakan internal clock sebesar 8MHz seperti pada gambar berikut.
  6. Selesai..!!!
Catatan : karena hanya untuk simulasi dan mengecek apakah rangkaian dan program tersebut berjalan dengan benar maka waktu dalam 1 detik dipercepat menjadi 50 milisekon.
        Untuk hasilnya dapat dilihat pada video di bawah ini.

        Sekian & terima kasih atas kunjungannya...

2 komentar:

  1. Oh iya maaf, itu tombol toggle sebenernya buat setting nilai dari jam sama menitnya, tapi saya belum sempet bikin programnya

    BalasHapus

Atas