- Beranda
- Hobby & Community
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
...
TS
ahocool
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
DIGITAL ELECTRONICS HOBBY FORUM

UPDATE 8/JUNI/2014
DUKUN FUSEBIT AKAN MENGHIDUPKAN IC MU YANG MATI !

Selengkapnya dibahas di sini gan !!
CLINOMETER SEDERHANA MEMANFAATKAN ADC

Selengkapnya dibahas di post berikut
Proyek2 micro yg sudah jadi
I.N.D.E.X F.O.R.U.M
Biar ngiler, ane kasih contoh hasil karya TS...
.

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 !

Selengkapnya dibahas di sini gan !!
CLINOMETER SEDERHANA MEMANFAATKAN ADC

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
Komentar yang asik ya
Mari bergabung, dapatkan informasi dan teman baru!
Hobby & Community
10.5KThread•7.1KAnggota
Tampilkan semua post
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
2. Function untuk pengolahan display 7 segmen
3. Function Untuk Penampil 7 segmen dan Animasi
4. Pengaturan Timer
BERSAMBUNG DIPOST BERIKUT >>
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

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:

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
