Kaskus

Hobby

ahocoolAvatar border
TS
ahocool
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
DIGITAL ELECTRONICS HOBBY FORUM

Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks


Spoiler for apa aja sih yang dibahas?:


Spoiler for "Hobby Microcontroller Itu Mahal ? Kreativitasmu Itu yg Mahal Gan !":




UPDATE 8/JUNI/2014

DUKUN FUSEBIT AKAN MENGHIDUPKAN IC MU YANG MATI !

Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks

Selengkapnya dibahas di sini gan !!

CLINOMETER SEDERHANA MEMANFAATKAN ADC

Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks

Selengkapnya dibahas di post berikut




Spoiler for Buka Jika Mau Paket Belajar:


Proyek2 micro yg sudah jadi
Quote:



I.N.D.E.X F.O.R.U.M

Quote:




Biar ngiler, ane kasih contoh hasil karya TS...






Spoiler for Contact TS lewat dimari yahh:



.
Diubah oleh ahocool 14-06-2025 11:27
0
1M
8.6K
GuestAvatar border
Komentar yang asik ya
Mari bergabung, dapatkan informasi dan teman baru!
Hobby & Community
Hobby & Community
KASKUS Official
10.5KThread7.1KAnggota
Tampilkan semua post
ahocoolAvatar border
TS
ahocool
#5324
Mainan TIMER "B*MB" Untuk Airsoftgun , versi potong kabel


sesuai janji terdahulu, maka kali ini saya akan beberkan cara pembuatan mainan timer bomb versi potong kabel. Timer ini pernah dimuat di majalah hobby AirsoftGun "Reload" Volume 17

kaskus-image


video dari timer ini dapat dilihat dimari :




tanpa bertele-tele lagi kita langsung aja ke skematik , dan siapkan bahan-bahan sesuai gambar berikut :

klik di gambar biar rada jelas:

kaskus-image


penjelasan dikit;

- Menggunakan ATMega 8535 (wahh mubazir...eittt tunggu dulu jawaban dibawah)
- 7 Segmen sebagai display yg langsung disambung ke kaki micro dengan teknik scanning, sehingga cocok menggunakan ATMega8535 yang kakinya buanyakk
- Tombol ada 4: reset , start, tambah menit, tambah detik dan kombinasi menit detik menjadi setting urutan kabel defuser)
- Penjinakan Bomb dengan melepas kabel sesuai urutan, kalo secara digital pemotongan kabel ini berarti perubahan bit dari 0 ke 1, karena pada saat kabel nyambung itu port dihubungkan ke ground, sedangkan ketika dilepas akan di pull-up melalui R10k ke VCC


Hexnya mana boz ? enak aja minta hex....kita bahas saja via penjelasan berikut yeeee...kalo bingung tinggal baca tutorial sebelum2nya aja dan dijamin ga susah kok

1. Inisialisasi dan Variabel Global

Code:

#define F_CPU 1000000L //memakai clock internal / default
#include <avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include <inttypes.h>
#include <avr/interrupt.h>



uint8_t detik,menit,dor,start,gagal,defused,kritis,sequence,fusemem;

uint8_t EEMEM menitee=0;
uint8_t EEMEM detikee=20;
uint8_t EEMEM fusee=1;

//berikut ini array untuk susunan atau urutan potong kabel
char fusecode[100] =
{10,10,10,10,
0,1,2,3,
0,1,3,2,
0,2,1,3,
0,2,3,1,
0,3,1,2,
0,3,2,1,
1,0,2,3,
1,0,3,2,
1,2,0,3,
1,2,3,0,
1,3,0,2,
1,3,2,0,
2,0,1,3,
2,0,3,1,
2,1,0,3,
2,1,3,0,
2,3,0,1,
2,3,1,0,
3,0,1,2,
3,0,2,1,
3,1,0,2,
3,1,2,0,
3,2,0,1,
3,2,1,0} ;




2. Function untuk pengolahan display 7 segmen

Code:

// yang ini untuk menampilkan digit
void segmen(int digit)

{
switch (digit)
{

case 0 :
{

PORTC &= ~_BV(PC0) & ~_BV(PC1) & ~_BV(PC2) & ~_BV(PC3)
& ~_BV(PC4) & ~_BV(PC5);

PORTC |= _BV(PC6);

break;
}
case 1 :
{

PORTC &= ~_BV(PC1) & ~_BV(PC2);

PORTC |= _BV(PC0)| _BV(PC3)| _BV(PC4)| _BV(PC5)| _BV(PC6);

break;
}
case 2 :
{
PORTC &= ~_BV(PC0) & ~_BV(PC1) & ~_BV(PC6) & ~_BV(PC4) & ~_BV(PC3);

PORTC |= _BV(PC2)| _BV(PC5) ;

break;
}
case 3 :
{

PORTC &= ~_BV(PC0) & ~_BV(PC1) & ~_BV(PC2) & ~_BV(PC3) & ~_BV(PC6);

PORTC |= _BV(PC4)| _BV(PC5) ;

break;
}
case 4 :
{

PORTC &= ~_BV(PC5) & ~_BV(PC1) & ~_BV(PC2) & ~_BV(PC6) ;

PORTC |= _BV(PC3)| _BV(PC4) | _BV(PC0);

break;
}
case 5 :
{

PORTC &= ~_BV(PC0) & ~_BV(PC2) & ~_BV(PC3) & ~_BV(PC6) & ~_BV(PC5);

PORTC |= _BV(PC1) | _BV(PC4);

break;
}
case 6 :
{

PORTC &= ~_BV(PC0) & ~_BV(PC2) & ~_BV(PC3) & ~_BV(PC6) & ~_BV(PC5) & ~_BV(PC4);

PORTC |= _BV(PC1) ;

break;
}
case 7 :
{

PORTC &= ~_BV(PC0) & ~_BV(PC1) & ~_BV(PC2);

PORTC |= _BV(PC3)| _BV(PC4)| _BV(PC5)| _BV(PC6);

break;
}
case 8 :
{
PORTC &= ~_BV(PC0) & ~_BV(PC1) & ~_BV(PC2) & ~_BV(PC3)
& ~_BV(PC4) & ~_BV(PC5) & ~_BV(PC6);

break;
}
case 9 :
{

PORTC &= ~_BV(PC0) & ~_BV(PC1) & ~_BV(PC2) & ~_BV(PC3)
& ~_BV(PC5) & ~_BV(PC6);

PORTC |= _BV(PC4);

break;
}
case 10 :
{
PORTC |= _BV(PC0) | _BV(PC1) | _BV(PC2) | _BV(PC3)|
_BV(PC4) | _BV(PC5) | _BV(PC6) ;

break;
}
//berikut ini untuk animasi bomb
case 11 :
{
PORTC |= _BV(PC1) | _BV(PC2) | _BV(PC3)|
_BV(PC4) | _BV(PC5) | _BV(PC6) ;

PORTC &= ~_BV(PC0);


break;
}

case 12 :
{
PORTC |= _BV(PC0) | _BV(PC2) | _BV(PC3)|
_BV(PC4) | _BV(PC5) | _BV(PC6) ;

PORTC &= ~_BV(PC1);


break;
}

case 13 :
{
PORTC |= _BV(PC0) | _BV(PC1) | _BV(PC3)|
_BV(PC4) | _BV(PC5) | _BV(PC6) ;

PORTC &= ~_BV(PC2);


break;
}

case 14 :
{
PORTC |= _BV(PC0) | _BV(PC2) | _BV(PC1)|
_BV(PC4) | _BV(PC5) | _BV(PC6) ;

PORTC &= ~_BV(PC3);


break;
}

case 15 :
{
PORTC |= _BV(PC0) | _BV(PC2) | _BV(PC3)|
_BV(PC1) | _BV(PC5) | _BV(PC6) ;

PORTC &= ~_BV(PC4);


break;
}

case 16 :
{
PORTC |= _BV(PC1) | _BV(PC2) | _BV(PC3)|
_BV(PC4) | _BV(PC0) | _BV(PC6) ;

PORTC &= ~_BV(PC5);


break;
}

case 17 : // ---- (berhasil di jinakkan)
{
PORTC |= _BV(PC1) | _BV(PC2) | _BV(PC3)|
_BV(PC4) | _BV(PC5) | _BV(PC0) ;

PORTC &= ~_BV(PC6);


break;
}


}
}


//function untuk scanning posisi 7 segmen
void posisi(uint8_t pos)

{
switch (pos)
{
case 0 :
{

PORTA &= ~_BV(PA0) & ~_BV(PA1)& ~_BV(PA2) & ~_BV(PA3) ;

break;
}

case 1 :
{

PORTA |= _BV(PA0);

PORTA &= ~_BV(PA1) & ~_BV(PA2) & ~_BV(PA3) ;



break;
}

case 2 :
{

PORTA |= _BV(PA1);

PORTA &= ~_BV(PA0) & ~_BV(PA2) & ~_BV(PA3) ;

break;
}

case 3 :
{

PORTA |= _BV(PA2);

PORTA &= ~_BV(PA0) & ~_BV(PA1) & ~_BV(PA3) ;


break;
}


case 4 :
{

PORTA |= _BV(PA3);

PORTA &= ~_BV(PA0) & ~_BV(PA1) & ~_BV(PA2) ;

break;
}

}

}





3. Function Untuk Penampil 7 segmen dan Animasi

Code:

void tulis(void) //menulis ke 7 segmen

{

posisi(1);

if(start !=2) segmen(menit/10); //ini mode timer
else segmen((fusecode[fusemem * 4]) + 1); //ketika mode set urutan defuser
_delay_us(500);
segmen(10);



posisi(2);

if(start !=2) segmen(menit);
else segmen((fusecode[(fusemem * 4) + 1]) + 1);
_delay_us(500);
segmen(10);

posisi(3);

if(start !=2) segmen(detik/10);
else segmen((fusecode[(fusemem * 4) + 2]) + 1);
_delay_us(500);
segmen(10);


posisi(4);

if(start !=2) segmen(detik);
else segmen((fusecode[(fusemem * 4) + 3]) + 1);
_delay_us(500);
segmen(10);


//blink :
if(TCNT1 < 7812 && start!=2) PORTC &= ~_BV(PC7);
else PORTC |= _BV(PC7);

// ini untuk buzzer dan led blink
if(kritis == 0 && start == 1)
{
if(TCNT1 < 1500 ) PORTD |= _BV(PD4);
else PORTD &= ~_BV(PD4);

}

}

//animasi meledak
void boom(void)
{
PORTC |= _BV(PC7);

posisi(1);
segmen(11);
_delay_ms(40);

posisi(2);
segmen(11);
_delay_ms(40);

posisi(3);
segmen(11);
_delay_ms(40);

posisi(4);
segmen(11);
_delay_ms(40);

posisi(4);
segmen(12);
_delay_ms(40);

posisi(4);
segmen(13);
_delay_ms(40);

posisi(4);
segmen(14);
_delay_ms(40);

posisi(3);
segmen(14);
_delay_ms(40);

posisi(2);
segmen(14);
_delay_ms(40);

posisi(1);
segmen(14);
_delay_ms(40);

posisi(1);
segmen(15);
_delay_ms(40);


posisi(1);
segmen(16);
_delay_ms(40);



}

//kondisi jika berhasil dijinakkan
void sukses(void)
{
PORTC |= _BV(PC7);
PORTD &= ~_BV(PD4);

segmen(17);
posisi(1);
_delay_us(500);
posisi(2);
_delay_us(500);
posisi(3);
_delay_us(500);
posisi(4);
_delay_us(500);



}



4. Pengaturan Timer

Code:

//timer 0 untuk buzzer dan led
void timer0(void)
{

TCCR0 |= (1 << WGM01) | (0 << WGM00) ; // Configure timer 0 for CTC mode
TIMSK |= (1 << OCIE0); // Enable CTC interrupt
OCR0 = 100; //compare the CTC 0
TCCR0 |= (1 << CS02)|(0 << CS01)|(1 << CS00); // Start timer at Fcpu/1024
TCNT0 = 0;
kritis =1;
}

//timer 1 untuk 1 detik
void timer1(void)
{

TCCR1B |= (1 << WGM12); // Configure timer 1 for CTC mode
TIMSK |= (1 << OCIE1A); // Enable CTC interrupt
OCR1A = 15000; //compare the CTC A
TCCR1B |= (1 << CS11)|(1 << CS10); // Start timer at Fcpu/64
TCNT1 = 0;

}


ISR(TIMER0_COMP_vect)

{
//pengaturan waktu blink buzzer/led
PORTD ^= _BV(PD4);

if(detik == 6) OCR0=50;

if(detik == 2) OCR0=20;

}


ISR(TIMER1_COMPA_vect)

{
//pengaturan detik atau pewaktu

if(detik == 0)
{
if(menit == 0) {

detik =1;
TCCR1B = 0;
TCCR0 = 0;
PORTD |= _BV(PD4);
dor=1;

}

else
{ detik=60;
menit--;
}


}

//waktu kritis
if(menit == 0 && detik ==11) timer0();

detik--;

}



BERSAMBUNG DIPOST BERIKUT >>
0
Ikuti KASKUS di
© 2026 KASKUS, PT Darta Media Indonesia. All rights reserved.