Selasa, 28 Juni 2011

KARAKTER BERJALAN (RUNNING CHARACTER) PADA SEVEN SEGMENT MENGGUNAKAN CODEVISION AVR

Pada project ini saya akan membuat sebuah aplikasi yang disebut running character atau karakter berjalan dengan menggunakan seven segment tipe CA (common anoda). Untuk mendapatkan datasheet penampil seven segment silakan download disini. Pada aplikasi ini saya menggunakan 8 buah seven segment CA yang akan digunakan untuk menampilkan angka dari 0-9 yang kemudian akan digeser dari sebelah kanan kesebelah kiri (dari digit8 sampai digit1). Saya menggunakan metode scanning untuk menampilkan angka pada seven segment, setiap 1 detik dengan menggunakan fitur timer1 AVR, saya melakukan penggeseran untuk tiap digitnya. Yaitu yang awalnya ditampilkan pada digit8 digeser kedigit7, dari digit7 ke digit6 dan seterusnya sampai digit1 kemudian diulangi lagi ke awal.

Untuk project ini sudah saya realisasikan dalam bentuk hardware yang sesungguhnya, tetapi belum saya simulasikan, karena saya agak malas. Bagi yang belum jelas mengenai metode scanning dan dasar-dasar seven segment dapat dilihat pada menu tutorial AVR tentang Seven Segment dan untuk timer dapat dibaca pada Timer dan Counter AVR.

Untuk karakter yang saya gunakan, disini saya menggunakan angka 0-9, karakter 0-9 dapat teman-teman ganti sesuai denga keinginan sendiri. Berikut schematic dan listing program lengkapnya: 

#include <mega16.h>
#include <delay.h>

unsigned char huruf0, huruf1, huruf2, huruf3, huruf4, huruf5, huruf6, huruf7, huruf8;
unsigned char huruf9, huruf10, huruf11;

void geser() //fungsi untuk menggeser
{
     huruf11 = huruf0;  
     huruf0 = huruf1;
     huruf1 = huruf2;
     huruf2 = huruf3;
     huruf3 = huruf4;
     huruf4 = huruf5;  
     huruf5 = huruf6;
     huruf6 = huruf7;
     huruf7 = huruf8;
     huruf8 = huruf9;
     huruf9 = huruf10;
     huruf10 = huruf11;
}

// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0xD23A >> 8;
TCNT1L=0xD23A & 0xff;
geser();
}

void karakter()
{
huruf0=0xc0; huruf1=0xf9; huruf2=0xa4; huruf3=0xb0;
huruf4=0×99; huruf5=0×92; huruf6=0×82; huruf7=0xf8;
huruf8=0×80; huruf9=0×90; huruf10=0xff;
}

void tampil_7segment()
{
      PORTC=huruf0;//mengirimkan data kedigit1
      PORTD=0b01111111;//menyalakan digit1
      delay_ms(2);

      PORTC=huruf1;//mengirimkan data kedigit2
      PORTD=0b10111111;//menyalakan digit2
      delay_ms(2);

      PORTC=huruf2;//mengirimkan data kedigit3
      PORTD=0b11011111;//menyalakan digit3
      delay_ms(2); 

      PORTC=huruf3;//mengirimkan data kedigit4
      PORTD=0b11101111;//menyalakan digit4
      delay_ms(2);           

      PORTC=huruf4;//mengirimkan data kedigit5
      PORTD=0b11110111;//menyalakan digit5
      delay_ms(2);

      PORTC=huruf5;//mengirimkan data kedigit6
      PORTD=0b11111011;//menyalakan digit6
      delay_ms(2);

      PORTC=huruf6;//mengirimkan data kedigit7
      PORTD=0b11111101;//menyalakan digit7
      delay_ms(2); 

      PORTC=huruf7;//mengirimkan data kedigit8
      PORTD=0b11111110;//menyalakan digit8
      delay_ms(2);
      //lamanya waktu scanning ditentukan oleh intruksi delay
}

void main(void)
{
PORTC=0xff;
DDRC=0xff;
PORTD=0xff;
DDRD=0xff;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0×00;
TCCR1B=0×05;
TCNT1H=0xD2;
TCNT1L=0x3A;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0×04;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0×80;
SFIOR=0×00;

// Global enable interrupts
#asm(“sei”)

karakter();

while (1)
      {
      tampil_7segment();
      };
}

Untuk mendapatkan file program dalam bentuk CodeVision AVR silakan download pada link dibawah ini.

File program CodeVision AVR

Semoga bermanfaat..

7 komentar:

  1. untuk progam buat dc cdi sepeda motor ada ga gan?minta dunk....

    BalasHapus
  2. boleh minta Schematic nya gan...
    lagi butuh niech.....

    BalasHapus
  3. schematiknya sama persis seperti gambar diatas. silakan anda buat sendiri saja

    BalasHapus
  4. mas, aqq mau buat scoring board 4 digit, bisa bntu buat programnya ga, makasih :)

    BalasHapus
  5. bang share tentang dot matrik donk,pengen belajar ni... thank's

    BalasHapus
    Balasan
    1. saya belum punya modul dot matrik jadi belum pernah nyoba... seandainya saya punya pasti saya posting... hehehehe

      Hapus
  6. mantap nih, bakalan ane coba. maju teruss !! :D

    BalasHapus