Rabu, 20 April 2016

TUTORIAL RANGKAIAN SEVEN SEGMENT MENGGUNAKAN PROTEUS DENGAN ATMEGA8 DAN MAXIM 7219 DAN CODEVISION AVR

Hello para saudara coegh-coegh ku :V
Kali ini ya,,, gue memberi tutorial Rangkaian Seven Segment menggunakan Proteus 8.1 dengan IC mikrokontroller ATMEGA8 dengan bantuan IC driver MAXIM 7219.
Simulasi kali ini adalah membuat tampilan Seven Segment MPX4 sebanyak 3 buah untuk menampilkan angka sebanyak 12 buah. Angka yang akan gue tampilkan adalah Nomor Induk Mahasiswa (NIM) gue sediri, yaitu 0614 3070 1446. Untuk membuat programnya saya menggunakan CodeVisionAVR.



1. Pertama-tama, 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. Klik Program kemudian pilih Generate, 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 All (Ctrl+a) program yang dibuat otomatis tadi,
    lalu copy program di bawah 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 :
Version :
Date    : 4/13/2016
Author  :
Company :
Comments:

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, 1,2);
MAX7219_writeData(MAX7219_DIGIT1, 4,2);
MAX7219_writeData(MAX7219_DIGIT2, 4,2);
MAX7219_writeData(MAX7219_DIGIT3, 6,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();
}
}

*tambahan*
ubah angka yang sudah saya tandai.


7. Jika sudah, Compile program tersebut.

8. Jika muncul pesan Warning, its no problem coegh :V tidak apa-apa.
    Ini hanya pesan warning.

9. Buka Proteus, lalu buat rangkaian *ya sesuai selera elu aje dah coegh :V mau kek mana yang penting hidup udah gitu aja*
      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.


10. Klik 2 kali IC ATMEGA8, lalu klik tombol folder masukkan program yang kita buat tadi kemudian open.


11. Jalankan rangkaiannya. Jika muncul tampilan sesuai dengan angka
      yang kalian buat,rangkaian berhasil dibuat dan siap untuk di sajikan coegh :V


FILE : DOWNLOAD

oke sekian dari saya,, semoga bermanfaat.
terima kasih.

Tidak ada komentar:

Posting Komentar