Langsung saja kita buat rangkaiannya.
1.
Buka terlebih dahulu CodeVisionAVR, kita akan membuat programnya terlebih
dahulu. Langsung saja buat project baru.
2. Pada pilihan IC, pilih ATMEGA.
3. Pada pilihan Chip, pilih ATmega8, dan Setting crystalnya menjadi 11.059200.
4. Pilih Generate Files terlebih dahulu, agar programnya dibuat.
5. Setelah program dibuat, lalu pilih Generate, Save, and Exit untuk menyimpan. Dalam menyimpan filenya, diusahakan untuk membuat dalam satu folder, dengan penggunaan nama tanpa angka (hanya huruf), dan tidak melakukan apapun saat proses menyimpan, karena bisa menyebabkan file yang akan disimpan gagal.
6. Setelah selesai, block semua program yang dibuat otomatis tadi, lalu copy dengan program Seven Segment dibawah ini.
Programnya
:
/*******************************************************
This program was created by the CodeWizardAVR V3.24
Automatic Program Generator
© Copyright 1998-2015 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : 7Segment NIM
Version : 1
Date : 4/13/2016
Author : Mirza Ahcmad Fazry
Company : POLSRI
Comments: Tugas Pak Ali
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 11.059200 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*******************************************************/
#include <mega8.h>
#include <delay.h>
// Declare your global variables here
#define PIN_SCK PORTB5
#define PIN_MOSI PORTB3
#define PIN_SS PORTB2
#define PIN_SS1 PORTB1
#define ON 1
#define OFF 0
#define cs_lo PORTB |= (1<<PIN_SS)
#define cs_hi PORTB &= ~(1<<PIN_SS)
#define cs1_lo PORTB |= (1<<PIN_SS1)
#define cs1_hi PORTB &= ~(1<<PIN_SS1)
#define MAX7219_MODE_DECODE 0x09
#define MAX7219_MODE_INTENSITY 0x0A
#define MAX7219_MODE_SCAN_LIMIT 0x0B
#define MAX7219_MODE_POWER 0x0C
#define MAX7219_MODE_TEST 0x0F
#define MAX7219_MODE_NOOP 0x00
// I only have 3 digits, no point having the
// rest. You could use more though.
#define MAX7219_DIGIT0 0x01
#define MAX7219_DIGIT1 0x02
#define MAX7219_DIGIT2 0x03
#define MAX7219_DIGIT3 0x04
#define MAX7219_DIGIT4 0x05
#define MAX7219_DIGIT5 0x06
#define MAX7219_DIGIT6 0x07
#define MAX7219_DIGIT7 0x08
#define MAX7219_CHAR_BLANK 0xF
#define MAX7219_CHAR_NEGATIVE 0xA
char jumlah_digit = 8;
void spiSendByte (char databyte)
{
SPDR = databyte;
while (!(SPSR & (1 << SPIF)));
}
void MAX7219_writeData(char data_register, char data,unsigned char chip)
{
cs_hi;
if(chip==0)
{
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(data_register);
spiSendByte(data);
}
if(chip==1)
{
spiSendByte(data_register);
spiSendByte(data);
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(MAX7219_MODE_NOOP);
}
if(chip==2)
{
spiSendByte(data_register);
spiSendByte(data);
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(MAX7219_MODE_NOOP);
}
cs_lo;
}
void clear_display()
{
unsigned char i,j;
for(j=0;j<3;j++)
{
for(i=1;i<=jumlah_digit;i++)
{
MAX7219_writeData(i, MAX7219_CHAR_BLANK,j);
}
}
}
void kirim_display()
{
MAX7219_writeData(MAX7219_DIGIT0, 0,0);
MAX7219_writeData(MAX7219_DIGIT1, 6,0);
MAX7219_writeData(MAX7219_DIGIT2, 1,0);
MAX7219_writeData(MAX7219_DIGIT3, 4,0);
MAX7219_writeData(MAX7219_DIGIT0, 3,1);
MAX7219_writeData(MAX7219_DIGIT1, 0,1);
MAX7219_writeData(MAX7219_DIGIT2, 7,1);
MAX7219_writeData(MAX7219_DIGIT3, 0,1);
MAX7219_writeData(MAX7219_DIGIT0, 2,2);
MAX7219_writeData(MAX7219_DIGIT1, 0,2);
MAX7219_writeData(MAX7219_DIGIT2, 1,2);
MAX7219_writeData(MAX7219_DIGIT3, 0,2);
}
void main(void)
{
unsigned int j;
DDRB |= (1 << PIN_SCK) | (1 << PIN_MOSI) | (1 << PIN_SS)| (1 << PIN_SS1);
SPCR |= (1 << SPE) | (1 << MSTR)| (1<<SPR1);
for(j=0;j<3;j++)
{
MAX7219_writeData(MAX7219_MODE_DECODE, 0xFF,j);
MAX7219_writeData(MAX7219_MODE_SCAN_LIMIT,jumlah_digit - 1,j);
MAX7219_writeData(MAX7219_MODE_INTENSITY, 8,j);
MAX7219_writeData(MAX7219_MODE_POWER, ON,j);
}
while(1)
{
kirim_display();
}
}
This program was created by the CodeWizardAVR V3.24
Automatic Program Generator
© Copyright 1998-2015 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : 7Segment NIM
Version : 1
Date : 4/13/2016
Author : Mirza Ahcmad Fazry
Company : POLSRI
Comments: Tugas Pak Ali
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 11.059200 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*******************************************************/
#include <mega8.h>
#include <delay.h>
// Declare your global variables here
#define PIN_SCK PORTB5
#define PIN_MOSI PORTB3
#define PIN_SS PORTB2
#define PIN_SS1 PORTB1
#define ON 1
#define OFF 0
#define cs_lo PORTB |= (1<<PIN_SS)
#define cs_hi PORTB &= ~(1<<PIN_SS)
#define cs1_lo PORTB |= (1<<PIN_SS1)
#define cs1_hi PORTB &= ~(1<<PIN_SS1)
#define MAX7219_MODE_DECODE 0x09
#define MAX7219_MODE_INTENSITY 0x0A
#define MAX7219_MODE_SCAN_LIMIT 0x0B
#define MAX7219_MODE_POWER 0x0C
#define MAX7219_MODE_TEST 0x0F
#define MAX7219_MODE_NOOP 0x00
// I only have 3 digits, no point having the
// rest. You could use more though.
#define MAX7219_DIGIT0 0x01
#define MAX7219_DIGIT1 0x02
#define MAX7219_DIGIT2 0x03
#define MAX7219_DIGIT3 0x04
#define MAX7219_DIGIT4 0x05
#define MAX7219_DIGIT5 0x06
#define MAX7219_DIGIT6 0x07
#define MAX7219_DIGIT7 0x08
#define MAX7219_CHAR_BLANK 0xF
#define MAX7219_CHAR_NEGATIVE 0xA
char jumlah_digit = 8;
void spiSendByte (char databyte)
{
SPDR = databyte;
while (!(SPSR & (1 << SPIF)));
}
void MAX7219_writeData(char data_register, char data,unsigned char chip)
{
cs_hi;
if(chip==0)
{
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(data_register);
spiSendByte(data);
}
if(chip==1)
{
spiSendByte(data_register);
spiSendByte(data);
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(MAX7219_MODE_NOOP);
}
if(chip==2)
{
spiSendByte(data_register);
spiSendByte(data);
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(MAX7219_MODE_NOOP);
}
cs_lo;
}
void clear_display()
{
unsigned char i,j;
for(j=0;j<3;j++)
{
for(i=1;i<=jumlah_digit;i++)
{
MAX7219_writeData(i, MAX7219_CHAR_BLANK,j);
}
}
}
void kirim_display()
{
MAX7219_writeData(MAX7219_DIGIT0, 0,0);
MAX7219_writeData(MAX7219_DIGIT1, 6,0);
MAX7219_writeData(MAX7219_DIGIT2, 1,0);
MAX7219_writeData(MAX7219_DIGIT3, 4,0);
MAX7219_writeData(MAX7219_DIGIT0, 3,1);
MAX7219_writeData(MAX7219_DIGIT1, 0,1);
MAX7219_writeData(MAX7219_DIGIT2, 7,1);
MAX7219_writeData(MAX7219_DIGIT3, 0,1);
MAX7219_writeData(MAX7219_DIGIT0, 2,2);
MAX7219_writeData(MAX7219_DIGIT1, 0,2);
MAX7219_writeData(MAX7219_DIGIT2, 1,2);
MAX7219_writeData(MAX7219_DIGIT3, 0,2);
}
void main(void)
{
unsigned int j;
DDRB |= (1 << PIN_SCK) | (1 << PIN_MOSI) | (1 << PIN_SS)| (1 << PIN_SS1);
SPCR |= (1 << SPE) | (1 << MSTR)| (1<<SPR1);
for(j=0;j<3;j++)
{
MAX7219_writeData(MAX7219_MODE_DECODE, 0xFF,j);
MAX7219_writeData(MAX7219_MODE_SCAN_LIMIT,jumlah_digit - 1,j);
MAX7219_writeData(MAX7219_MODE_INTENSITY, 8,j);
MAX7219_writeData(MAX7219_MODE_POWER, ON,j);
}
while(1)
{
kirim_display();
}
}
7.
Untuk mengubah tampilan angka yg akan muncul, cari program berikut ini, lalu
ubah pada angka pada awalnya. Program ini telah dibuat dengan nim saya
(061430701434). Urutannya dari atas ke bawah.
8. Jika sudah, pilih Compile terlebih dahulu, lalu pilih Build, setelah itu pilih Build All untuk mencegah file tidak tercompile seluruhnya. Caranya dapat dengan menekan tombol F9, lalu Ctrl + F9.
9. Jika muncul pesan Warning, tidak apa-apa. Ini hanya pesan warning, namun program tetap tercompile. Jangan hapus program yg ditunjukkan sebagai penyebab warning, karena program akan salah atau error. Jadi biarkan saja pesan warning nya.
10. Buka Proteus, lalu buat rangkaian seperti dibawah ini. Saya menggunakan port agar mudah dan rapi dalam penyusunan jalurnya. Untuk penggunaan Seven Segment nya menggunakan jenis CC atau Common Cathode (katoda). Namanya dalam proteus 7SEG-MPX4-CC.
11. Klik 2 kali pada IC ATMEGA8 nya, lalu klik pada tombol folder untuk memilih programnya.
12. Cari program yang tadi kita buat, lalu pilih open.
13. Jalankan rangkaiannya. Jika muncul tampilan sesuai dengan angka yang kalian buat, rangkaian berhasil dibuat.
Terimakasih.
0 komentar:
Posting Komentar