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 :
- 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.
- 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.
- Selanjutnya masukkan programnya seperti berikut :
- /*****************************************************
- This program was produced by the
- CodeWizardAVR V2.05.3 Standard
- Automatic Program Generator
- © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
- http://www.hpinfotech.com
- Project :
- Version :
- Date : 28/08/2019
- Author : Vidi Fitriansyah Hidarlan
- Company : Personal
- Comments:
- Chip type : ATmega16
- Program type : Application
- AVR Core Clock frequency: 8,000000 MHz
- Memory model : Small
- External RAM size : 0
- Data Stack size : 256
- *****************************************************/
- #include <mega16.h>
- #include <delay.h>
- #include <io.h>
- // Declare your global variables here
- void main(void)
- {
- // Declare your local variables here
- unsigned char bil[10]={0b10111111,0b10000110,0b11011011,0b11001111,0b11100110,0b11101101,0b11111101,0b10000111,0b11111111,0b11101111};
- /*data untuk nilai 7 segment dari 0-9*/
- int digit1, digit2, digit3, digit4;
- // Input/Output Ports initialization
- // Port A initialization
- // Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
- // State7=T State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
- PORTA=0x00;
- DDRA=0x7F;
- // Port B initialization
- // Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
- // State7=P State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
- PORTB=0x80;
- DDRB=0x7F;
- // Port C initialization
- // Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
- // State7=P State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
- PORTC=0x80;
- DDRC=0x7F;
- // Port D initialization
- // Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
- // State7=P State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
- PORTD=0x80;
- DDRD=0x7F;
- // Timer/Counter 0 initialization
- // Clock source: System Clock
- // Clock value: Timer 0 Stopped
- // Mode: Normal top=0xFF
- // OC0 output: Disconnected
- TCCR0=0x00;
- TCNT0=0x00;
- OCR0=0x00;
- // Timer/Counter 1 initialization
- // Clock source: System Clock
- // Clock value: Timer1 Stopped
- // Mode: Normal top=0xFFFF
- // OC1A output: Discon.
- // OC1B output: Discon.
- // Noise Canceler: Off
- // Input Capture on Falling Edge
- // Timer1 Overflow Interrupt: Off
- // Input Capture Interrupt: Off
- // Compare A Match Interrupt: Off
- // Compare B Match Interrupt: Off
- 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: Timer2 Stopped
- // Mode: Normal top=0xFF
- // OC2 output: Disconnected
- ASSR=0x00;
- TCCR2=0x00;
- TCNT2=0x00;
- OCR2=0x00;
- // External Interrupt(s) initialization
- // INT0: Off
- // INT1: Off
- // INT2: Off
- MCUCR=0x00;
- MCUCSR=0x00;
- // Timer(s)/Counter(s) Interrupt(s) initialization
- TIMSK=0x00;
- // USART initialization
- // USART disabled
- UCSRB=0x00;
- // Analog Comparator initialization
- // Analog Comparator: Off
- // Analog Comparator Input Capture by Timer/Counter 1: Off
- ACSR=0x80;
- SFIOR=0x00;
- // ADC initialization
- // ADC disabled
- ADCSRA=0x00;
- // SPI initialization
- // SPI disabled
- SPCR=0x00;
- // TWI initialization
- // TWI disabled
- TWCR=0x00;
- while (1)
- {
- // Place your code here
- start: //untuk kembali ke menu start
- for(digit1=0;digit1<3;digit1++)//7 segment 1 (puluhan) jam
- {
- PORTA=~bil[digit1];//batas nilai puluhan jam jika sudah=2 kemudian kembali lagi ke 0
- for(digit2=0;digit2<10;digit2++)//7 segment 2 (satuan) jam
- {
- if (digit1==2&&digit2==4)
- {goto start;}
- PORTB=~bil[digit2];//batas satuan jam sampai=4 jika puluhannya sudah=2
- for(digit3=0;digit3<6;digit3++)// 7 segment 3 (puluhan) menit
- {
- PORTC=~bil[digit3];//sebagai pembatas digit puluhan menit=5
- for(digit4=0;digit4<10;digit4++)// 7 segment 4 (satuan) menit
- {
- PORTD=~bil[digit4];//inisialisasi nilai PORTD =! bil array digit4 (fungsinya untuk batas nilai satuan menit=9 jika puluhannya sudah=5)
- delay_ms(50);//waktu tunda untuk satu detik
- }
- }
- }
- }
- set :
- while (1){
- if (PINB.7==0)
- {
- PORTA=~bil[digit1];
- PORTB=~bil[digit2];
- PORTC=~bil[digit3];
- PORTD=~bil[digit4];
- delay_ms(1000);
- if (PINC.7==0)
- {
- bil[digit2]++;
- }
- else
- {
- goto set;
- }
- }
- else
- {
- goto start;
- }
- }}
- }
- Setelah program dikompilasi kemudian buat rangkaiannya seperti berikut.
- Kemudian double click pada ATmega16 dan masukkan programnya dan atur clock speed-nya menggunakan internal clock sebesar 8MHz seperti pada gambar berikut.
- Selesai..!!!
Untuk hasilnya dapat dilihat pada video di bawah ini.
Sekian & terima kasih atas kunjungannya...