Sabtu, 21 Desember 2013

Tutorial Membuat Stopwatch dengan ATMega 16 melalui CVAVR dan Simulasi ISIS

Ini adalah pertama kalinya saya menulis blog mengenai keprofesian saya (maklum masih amateur. hehe)
Baiklah, kali ini saya akan menjelaskan cara membuat stopwatch menggunakan ATMega 16 yang akan diprogram melalui CVAVR serta akan disimulasikan melalui ISIS Proteus. 
 
Langkah pertama, sudah pasti, ayo kita buat dulu project pada CVAVR!!!
 

tinggal kita pilih menu file, lalu kita pilih new. Maka akan tampil kotak dialog new file, kemudian kita pilih file typenya project, lalu klik OK dehhhh!
Sehingga tampil kotak dialog lain... Kemudian untuk mempermudah kodingan kita, maka kita pilih OK pada konfirmasi penggunaan Code Wizard.
Kemudian di kotak dialog selanjutnya, kita pilih chip ATMega. Kemudian akan muncul :
  
Setelah muncul kotak dialog tersebut, kita atur clock sesuai yang kita inginkan, dan atur chip yang digunakan menjadi ATMega 16. Selain itu, atur pula Port yang digunakan (disini kita hanya mengubah PORT C menjadi output direction), External IRQ untuk penambahan fitur interupt, serta pada submenu Alphanumeric LCD. Langkah-langkahnya seperti gambar di bawah ini :
 
 Lalu kita lakukan generate and save project kita. Gunakanlah hanya satu folder untuk tempat penyimpanan file-file ini.

Kemudian akan muncul, source code kosong yang belum ada algoritma untuk program utamanya.
Untuk mempermudah tuliskanlah code pada source code tersebut seperti kode di bawah ini :

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

// Alphanumeric LCD functions
#include <alcd.h>

char tampung[16];     // array tempat kita memunculkan kata2 pada LCD
int ms1,ms2,s1,s2,m1,m2;  // variabel2 parameter waktu milidetik, detik, dan menit
int p,r;        // variabel state untuk pause dan reset


// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
     p = p + 1;
     r = 0;
}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
     r = 1;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// 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: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Falling Edge
// INT2: Off
GICR|=0xC0;
MCUCR=0x0A;
MCUCSR=0x00;
GIFR=0xC0;

// 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;

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(16);

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here
       delay_ms (4);
       if (r == 0)
       {
        if (p == 0)
        {
        ms1 = ms1;
        }
        else if (p == 1)
        {
        ms1 = ms1 + 1;
        }
        else if (p == 2)
        {
         p = 0;
        }
        }
       else if (r == 1)
       {
        ms1 = 0; ms2 = 0; s1 = 0; s2 = 0; m1 = 0; m2 = 0;
       }
        if (ms1 == 10)
       {
            ms1 = 0;
            ms2 = ms2 + 1;
       }
       if (ms2 == 6)
       {    
            ms2 = 0;
            s1 = s1 + 1;
       }   
       if (s1 == 10)
       {
            s1 = 0;
            s2 = s2 + 1;
       }
       if (s2 == 6)
       {    
            s2 = 0;
            m1 = m1 + 1;
       }
       if (m1 == 10)
       {
            m1 = 0;
            m2 = m2 + 1;
       }  
      
       lcd_gotoxy(0,0);  //menampilkan data di kolom 0 baris ke-0
       lcd_puts("stopwatch");

       sprintf(tampung,"%i%i : %i%i : %i%i ",m2,m1,s2,s1,ms2,ms1 );  // simpan data integer ke array tampung[16]
       lcd_gotoxy(0,1);         //menampilkan data di kolom 0 baris ke-2         
       lcd_puts(tampung);      //menampilkan array tampung bertype char
      }
}

Kemudian kita save, lalu lakukan build all pada file ini. Dan kita buat file .hex dengan cara memilih menu tools, dan pihih chip programmer. maka akan muncul kotak dialog :

  
Kita pilih menu file pada kotak dialog tadi, dan pilih save Flash. Dan gunakanlah ekstensi filenya .hex.

Akhirnya, source code telah berhasil dibuat. Sekarang ayo kita lakukan simulasi pada ISIS Proteus!!!
Buatlah design rangkaian seperti dibawah ini :

 
Lalu, kita save terlebih dahulu, di folder yang sama seperti source code. Kemudian kita downloadkan file.hex tadi dengan cara melakukan double klik pada chip ATMega 16, sehingga muncul :

Kita cari file .hex kita pada sub menu program file. Setelah itu, lalu kita klik OK.
Dan akhirnya, Stopwatch pun dapat kita simulasikan!!!
(gunakan PORTD.2 untuk play atau pause dan PORTD.3 untuk reset)

  

Sekian aja tutorial  pembuatan stopwatch dengan ATMega 16 melalui CVAVR dan Simulasi ISIS.

SEMOGA BERMANFAAT (^o^)
(aku sangat membutuhkan kritik dan saran anda!)

Sabtu, 27 Juli 2013

Resume MBC Day 11



   MBC day ke-11 berlangsung pada tanggal 26 Juli 2013 di Basement Labtek VIII. Pada hari itu, kami dikumpulkan jam 13.00 untuk melaksanakan apel awal. Ternyata kuorum kami adalah 174, dan lagi-lagi kami tidak dapat mendatangkan anggota sebanyak itu, kami hanya mampu mendatangkan 170 orang, berarti kami gagal mencapai kuorum.
  Di awal acara kami diberi materi tentang lagu suporteran HME lainnya, yaitu Masa Bodoh, HME Bawah Tanah, dan Kami Bukan Bonek. Walaupun awalnya saya merasa aneh dengan nada dari lagu-lagu ini, tapi akhirnya saya mampu mempelajari dan menghafalkan lagu-lagu ini.
  Kemudian, kami diberikan permainan yang cukup menarik yaitu tebak kata. Awalnya kami dibagi dulu menjadi dua regu yaitu regu utara dan regu selatan. Pemain pertama dimulai dari regu selatan yang perwakilannya adalah Machi sebagai penebak dan Rozzi sebagai pemandu atau pembantu machi dalam menebak kata-kata tersebut. Katanya cukup sulit yaitu google glass, dan Machi puncukup kebingungan untuk menebaknya. Akhirnya setelah hamper empat menit kemudian Machi berhasil menebak kata tersebut. Dan selanjutnya giliran tim utara yang mendapatkan kata-kata gampang yaitu NIM tag. Dalam waktu kurang dari satu menit Arfi berhasil menebak kata tersebut, sehingga kami pun (tim selatan) harus menyerahkan poin ke tim utara, Skornya menjadi 1-0. Dan di permainan kedua kami berhasil mendapatkan poin sehingga skor 1-1. Tapi akhirnya kami kalah 2-1 oleh tim utara, sehingga kami harus mendapatkan hukuman.
   Permainan berikutnya adalah mengenai menebak orang melalui cirri-cirinya. Tapi pada saat permainan ini berlangsung kelompok utara telah mengetahui teknik permainan ini, sehingga mereka berbuat curang dengan cara menuliskan ciri-ciri wakil mereka yang sulit ditebak, sehingga mau tidak mau kami gagal mengalahkan tim utara. Esensi dari permainan ini adalah kami dapat bersenang-senang dengan angkatan kami dan juga dengan senior-senorita hingga tertawa terbahak-bahak dan tak ada rasa canggung diantara kami. Kemudian kami berolahraga bersama di saraga, yaitu bermain basket, dan yang lainnya melaksanakan supporteran seperti halnya mendukung tim HME bertanding.

Rabu, 24 Juli 2013

Resume MBC Day 10



   MBC day 10 dilaksanakan pada pukul 13.45 di Basement Labtek 8. Lagi-lagi, kami tidak dapat memenuhi jumlah kuorum yaitu 210 orang, sedangkan jumlah kami yang hadir adalah 170 orang. Karena itu, kami diberikan sanksi berupa menulis tentang eltoro beserta kegagalannya dalam memenuhi kuorum, lalu dishare melalui jejaring sosial media.
   Materi berikutnya dimulai dengan pengenalan program pengabdian masyarakat di HME yang sudah cukup terkenal yaitu Palapa. Program ini telah dilaksanakan sejak tahun 2006, dan telah menghasilkan tiga kali community development di desa-desa terpencil yang kebetulan dilaksanakan di desa-desa kabupaten Garut. Palapa I (biasa disebut Palapa Jaya) dilaksanakan di desa Jayamukti. Awal perancangannya dimulai pada tahun 2006, dan launching pada tahun 2007. Pada Palapa I, dikembangkan proyek desa dengan tenaga mandiri, yaitu dengan membuat PLTA di desa tersebut. Palapa II dilaksanakan di desa Mekarwangi. Dengan survey pertama pada tahun 2008, dan eksekusinya pada tahun 2010. Palapa II juga mengembangkan desa mandiri energi, namun yang berbeda adalah pada Palapa ini digunakan PLTS (tenaga surya), tapi masih dalam skala yang kecil sehingga listriknya hanya digunakan pada beberapa tempat penting seperti jalan-jalan, mesjid, dll. Palapa III dilaksanakan di tempat yang sama dengan Palapa II. Kali ini, tim Palapa hanya melakukan maintenance terhadap PLTS yang telah dibangun agar dapat bekerja dengan baik lagi. Tapi tidak hanya itu, Palapa III ini pun melaksanakan kegiatan pengabdian lainnya yaitu Rumah baca, membangun peternakan domba, dan juga membangun peternakan lele.
   Kemudia kami diajari materi mengenai problem solving menggunakan metode DSPA yaitu define problem, structure problem, prioritize issue, dan action plan. Awalnya kita harus melakukan define terhadap problem yang akan kita atasi dengan cara mempertimbangkan possibility, time work, dan juga harus spesifik. Setelah itu, kita harus menstrukturkan problem dengan cara membuat issue tree, yang isinya yaitu langkah-langkah yang dapat kita lakukan untuk mengatasi hal tersebut. Kemudian, kita harus melakukan prioritisasi terhadap langkah-langkah tersebut dengan membuat effort-impact matrix, sehingga langkah-langkah tersebut akan terseleksi. Dan yang terakhir kita dapat melakukan action plan untuk mendetailkan langkah-langkah tersebut dengan dibuat menjadi tugas-tugas yang memiliki deadline serta ada penanggung jawabnya.  

Kamis, 18 Juli 2013

Resume MBC Day 9


   MBC Day ke-9 dimulai pada hari Kamis tanggal 18 Agustus 2013. Dimulai pada pukul 09.30 di Basement Labtek 8. Pada saat itu kami mendatangkan 199 orang dan sepuluh orang lainnya sedang mengikuti SP.
   Materi pertama yang diberikan adalah materi leadership dan sharing pengalaman dengan Kak Nyoman Anjani, presiden kabinet KM ITB, yang bertempat di GKU Timur Lantai 4. Di awal penyampaian materinya Kak Nyoman memberikan pengetahuan dahulu mengenai apa itu mahasiswa. Mahasiswa adalah sama seperti siswa yang haknya mendapatkan pengajaran, namun memiliki tanggunag jawab yang besar dalam mengembangkan ilmunya tersebut untuk membangun negara. Lalu ia pun menyampaikan mengenai tujuan perguruan tinggi, yang singkatnya adalah sebagai berikut : mendidik dan mengembangkan kemampuan akademik tapi juga mengembangkan karakter mandiri. Dalam keperjalanannya, kabinet KM ITB tidak sama halnya seperti BEM yang memiliki koordinasi vertikal secara langsung dari rektorat, namun kabinet KM ITB dalam melakukan tindakan untuk menyuarakan KM ITB harus berkoordinasi dahulu melalui kongres.
   Bagaimana sih langkah-langkah untuk menjadi seorang pemimipin? Kak Nyoman menjawab bahwa untuk menjadi seorang pemimpin kita harus know the way, show the way, dan lead the way. Awalnya, calon pemimpin harus mengetahui terlebih dahulu situasi dan kondisi dari organisasi atau badan yang ingin dia pimpin secara mendalam beserta masalah-masalah yang menyelimutinya. Kemudian, seorang pemimpin harus dapat menunjukkan solusi untuk mengatasi masalah-masalah tersebut melalui gagasan-gagasan yang logis. Dan yang terakhir, seorang pemimpin harus merekrut kawan-kawan yang memiliki pandangan yang sama untuk bisa bekerja sama dengan gagasan yang telah ia sampaikan tersebut. Dan dasar utama seorang pemimpin untuk dapat menjalankan hal tersebut adalah dare to dream dan dare to change. Seorang pemimpin haruslah memiliki visi yang tinggi, dan juga harus berani berubah sesuai dengan pandangan dan arahan yang baik dari orang lain.
   Menurut seorang alumni ITB yang menjabat menjadi Dirut salah satu perusahaan BUMN, kunci kesuksesan anak ITB adalah kecerdasan, keberanian, dan relasi. Tips dari Kak Nyoman terhadap kami untuk berhasil memperbanyak relasi adalah menentukan prioritas organisasi yang akan dijalankan pada tiap liburan akhir tahun semesternya.

Selasa, 16 Juli 2013

MBC Day 8


MBC day ke-8 dimulai pada pukul 08.00, saat itu kami dikumpulkan di tempat biasa yaitu Basement Labtek 8. Di day ini tidak ada materi khusus yang dilaksanakan adalah forum sampai pukul 12.00. Saat itu, kami hanya mampu mendatangkan 192 orang anggota Eltoro, sehingga kami tidak dapat memenuhi kuorum yang telah kami janjikan.
Masalah yang dibahas pertama kali dalam forum adalah evaluasi pelaksanaan wisuda. Dari persiapan wisuda itu sendiri banyak sekali yang telah kami dapat, ada kebersamaan dan kerjasama antar keluarga Eltoro, senang-senang, dan lain-lain. Namun juga terdapat beberapa masalah yang harus dievaluasi agar tidak terjadi lagi diantaranya masalah barikade, pembagian kerja yang tidak jelas, suara Danlap yang tidak jelas, persiapan untuk keadaan hujan, urutan arak-arakan, dan arak-arakan dari tunnel ke atas. Masalah barikade adalah kesalahan kami sebagai barikade yang tidak mampu menjaga formasi kami secara utuh. Solusi mengenai pembagian kerja yang tidak jelas adalah dengan membuat timeline dan pembagian kelompok untuk mengerjakan tugas-tugas tersebut. Masalah mengenai suara Danlap yang tidak jelas seharusnya dapat diatasi apabila pemain genderang mampu menjaga formasi dan bermain secara baik dan konsisten pada ritme lagu yang dipimpin Danlap. Persiapan untuk keadaan hujan adalah sebuah masalah yang seharusnya dapat diatasi dengan melewati jalur teduh namun gundala-gundili tidak mengizinkan hal tersebut. Untuk masalah mengenai arak-arakan saat di tunnel ke atas, itu pun merupakan kesalahan dari tim barikade dan juga barisan yang tidak sigap.
Masalah berikutnya yang dibahas adalah mengenai tugas buku angkatan, review melalui blog, isu elektronik, dan laporan IEEE yang masih belum terselesaikan oleh semua anggota Eltoro. Banyak sekali alasan yang membuat kami tidak sanggup menyelesaikan tugas-tugas tersebut, terutama tugas buku angkatan yang agak banyak. Namun yang paling disayangkan, ada yang menyebutkan bahwa alasan kami tidak mengerjakan tugas tersebut yaitu karena malas dan menganggap enteng tugas-tugas tersebut. Karena itu, seniro-seniorita merasa tersinggung dan agak marah, sehingga mereka memberikan deadline yang agak mepet untuk tugas-tugas tersebut dengan konsekuensi pencoretan dari kegiatan MBC.
Dan adalagi tugas baru untuk kami yaitu tugas buku lintas angkatan. Di buku itu kami diminta untuk mengenal anggota-anggota HME 20 orang seniro, 10 orang seniorita, dan 5 orang bandito-maharani. Kami pun dievaluasi mengenai menegur anggota HME jika berpapasan. Evaluasi ini dilakukan karena ada beberapa anggota Eltoro yang saat berpapasan dengan anggota HME tidak menegur. Dan masalah lain yang dibahas adalah mengenai perusakan terhadap sarana-prasarana (rumput di sebelah tangga menuju Basement Labtek 8). Keisengan yang dibuat oleh segelintir orang ini membuat kami dimarahi oleh seniro-seniorita dan juga oleh pegawai sarpras, dan kami berjanji untuk tidak mengulanginya.

Sabtu, 13 Juli 2013

Resume MBC Day 7



   MBC Day 7 dilaksanakan pada hari Sabtu tanggal 13 Juli 2013 yang dimulai pada pukul 09.00. Hari itu adalah bertepatan dengan pelaksanaan wisuda Juli untuk gundala-gundili. Kami dikumpulkan terlebih dahulu di Selasar GKU Timur, kemudian kami diberi beberapa arahan oleh para seniro dan seniorita. Jumlah kami saat itu 215 orang, jumlah yang cukup banyak untuk mengarak gundala-gundili, tapi semangat kami pun harus tetap tinggi sampai arak-arakan dan performance nanti.
   Materi pertama yang diajarkan disana adalah menyanyikan lagu mars HME. Awalnya, kami dicontohkan oleh para seniro-seniorita lalu kami diberi liriknya. Kemudian, kami disuruh untuk menghafalkannya hingga kami bisa menyanyikannya sendiri. Lagu mars ini pun membuat semagat kami bertambah. Lalu, kami dibubarkan untuk menyiapkan dekorasi dan menyiapkan kostum dan merias para performer.
   Pukul 11.30 pun telah sampai, kami langsung membawa perlatan dekorasi dan backdrop kami ke saraga, kecuali backdrop yang ukurunnya besar. Sayangnya saat itu hujan, sehingga kami harus menutupi semua dekorasi dan backdrop kami dengan payung. Akhirnya, kami sampai di saraga tepat waktu, kemudian kami berbaris di pinggir lapangan sepakbola dikomandoi oleh seniro. Sialnya, ternyata urutan tampil kami masih cukup lama, sehingga kami harus menunggu beberapa jam.
   Akhirnya giliran kami pun tiba, para gundala-gundili sudah menanti kami di gerbang keluar sabuga. Kami pun langsung berbaris dengan formasi U seperti yang telah diajarkan. Keramaian dari para gundala-gundili dan juga meriahnya lagu-lagu yang kami nyanyikan membuat kami tambah bersemangat untuk mengarak gundala-gundili. Setelah itu, kami membentuk formasi arak-arakan, sampai di gerbang tunnel kami secara sporadis mengubah bentuk barisan. Di tunnel pun semangat kami masih bergelora apalagi ketika kami menyanyikan mars dan meneriak-neriakan EL... Elektro!. Sayangnya, ketika keluar tunnel barisan kami rusak, sehingga barikade untuk gundala-gundili pun rusak, akibatnya banyak para alumni yang mengganggu para gundala-gundili. Yang lebih parah lagi, ada seorang gundala yang diborgol dengan sebuah gerobak, dan gerobak tersebut harus mengikuti arak-arakan.
   Saat itu hujan sangat deras, tapi semangat kami untuk arak-arakan masih tinggi. Kami menyanyikan terus-menerus lagu-lagu HME. Kemudian, tiba saatnya untuk para performer untuk tampil. Hujan saat itu deras, tapi performance kami tidak rusak sama sekali. Walaupun ada beberapa kesalahan tapi kami berhasil menampilkan kemampuan terbaik kami saat itu. Hingga akhirnya kami pun mendapatkan apresiasi yang sangat baik dari para gundala-gundili dan seniro-seniorita.