- 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
#1657
ANOTHER ATTINY CLOCK - SIMPLEST ONE
Bagi2 ilmu dulu gan....
dapet proyekan bikin JAM 6 DIGIT pake 7 segment
dipilihlah Micro AVR attiny 2313
dikarenakan diriku sudah menguasai ilmu counter/timer, jadi kita manfaatkan aja XTAL yg perhitungannya Bulat , saya pilih 3.7268 MHZ
jadi hanya memakai komponen yg lumayan sedikit
jangan lupa mengaktifkan SUT_CKSEL yg sesuai sehingga benar2 menggunakan oscillator Xtal external
rangkaiannya dimari gan ...
sedangkan scriptingnya kita bahas satu2 aja, biar agan belajar juga
I. Inisialisasi Header
II. Inisialisasi Counter/Timer
III. Inisialisasi PORT & Interupt
IV. Fungsi tampilan digit
V. Fungsi Scanning 7 Segmen
VI. Fungsi interupt waktu 1 Hz
VII. fungsi tampilan jam
VII. MAIN PROGRAM
hasilnya seperti ini gan
SELAMAT MENCOBA
Bagi2 ilmu dulu gan....
dapet proyekan bikin JAM 6 DIGIT pake 7 segment
dipilihlah Micro AVR attiny 2313
dikarenakan diriku sudah menguasai ilmu counter/timer, jadi kita manfaatkan aja XTAL yg perhitungannya Bulat , saya pilih 3.7268 MHZ
jadi hanya memakai komponen yg lumayan sedikit
jangan lupa mengaktifkan SUT_CKSEL yg sesuai sehingga benar2 menggunakan oscillator Xtal external
rangkaiannya dimari gan ...
Spoiler for rangkaian jam 6 digit attiny2313:
sedangkan scriptingnya kita bahas satu2 aja, biar agan belajar juga
I. Inisialisasi Header
Code:
#define F_CPU 3276800L //clock external
#include <avr/io.h>
#include <util/delay.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <string.h>
uint8_t jam,menit,detik,bulan,tanggal,tahun,clock,menu,mode,blink;
char bul_max[12]={31,28,31,30,31,30,31,31,30,31,30,31} ; //max hari 1 bulan
II. Inisialisasi Counter/Timer
Code:
TCCR1B |= (1 << WGM12); // Configure timer 1 for CTC mode
TIMSK |= (1 << OCIE1A); // Enable CTC interrupt
OCR1A = 3199; //compare the CTC A for 1 sec
TCCR1B |= (1 << CS10) | (1 << CS12); // Start timer at prescaler Fcpu/1024
III. Inisialisasi PORT & Interupt
Code:
// inisialisasi port output
DDRD |= _BV(PD0) | _BV(PD1) | _BV(PD4) | _BV(PD5) | _BV(PD6) ;
DDRB |= _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) | _BV(PB7) ;
\t
//inisialisasi interupt
MCUCR |= (1<<ISC01) | (0<<ISC00) |(1<<ISC11) | (0<<ISC10); //fall edge
GIMSK |= (1<<INT0) |(1<<INT1); // tombol int 0 & 1
IV. Fungsi tampilan digit
Code:
//tiap segment diaktifkan dengan memberi sinyal 0/LOW sebab 7 segmen yg dipake common + / anoda
void segmen(uint8_t digit)
{
switch (digit)
{
\t\tcase 0 :
\t\t {
\t\t\tPORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4)
\t\t\t & ~_BV(PB5) & ~_BV(PB6);
PORTB |= _BV(PB7);
\t\t\t
\t\t\tbreak;
}
\t\tcase 1 :
\t\t {
\t\t
\t\t\tPORTB &= ~_BV(PB2) & ~_BV(PB3);
PORTB |= _BV(PB1)| _BV(PB4)| _BV(PB5)| _BV(PB6)| _BV(PB7);
\t\t\t
\t\t\tbreak;
}
\t\tcase 2 :
\t\t {
\t\t\tPORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB7) & ~_BV(PB5) & ~_BV(PB4);
PORTB |= _BV(PB3)| _BV(PB6) ;
\t\t\t
\t\t break;
}\t\t
\t\tcase 3 :
\t\t {
\t\t\tPORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB7);
PORTB |= _BV(PB5)| _BV(PB6) ;
\t\t\t\t\t
\t\t\tbreak;
}
\t\tcase 4 :
\t\t {
\t\t
\t\t\tPORTB &= ~_BV(PB6) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB7) ;
PORTB |= _BV(PB4)| _BV(PB5) | _BV(PB1);
\t\t\t
\t\t\tbreak;
}
\t\tcase 5 :
\t\t {
\t\t\tPORTB &= ~_BV(PB1) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB7) & ~_BV(PB6);
PORTB |= _BV(PB2) | _BV(PB5);
\t\t\t
\t\t\tbreak;
}
\t\tcase 6 :
\t\t {
\t\t\tPORTB &= ~_BV(PB1) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB7) & ~_BV(PB6) & ~_BV(PB5);
PORTB |= _BV(PB2) ;
\t\t\t
\t\t break;
}
\t\tcase 7 :
\t\t {
\t\t\tPORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3);
PORTB |= _BV(PB4)| _BV(PB5)| _BV(PB6)| _BV(PB7);
\t\t\t
\t\t break;
}\t\t
\t\tcase 8 :
\t\t {
\t\t\tPORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4)
\t\t\t & ~_BV(PB5) & ~_BV(PB6) & ~_BV(PB7);
\t\t break;
}
\t\tcase 9 :
\t\t {
\t\t\tPORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4)
\t\t\t & ~_BV(PB6) & ~_BV(PB7);
\t\t\tPORTB |= _BV(PB5);
\t\t break;
}
\t\tcase 10 :
\t\t {
\t\t PORTB |= _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4)|
\t\t\t _BV(PB5) | _BV(PB6) | _BV(PB7) ;
\t\t break;
}
}
}
V. Fungsi Scanning 7 Segmen
Code:
// 7 segment common anoda, jadi aktif ketika mendapatkan 1/high
void posisi(uint8_t pos)
{
switch (pos)
\t {
\t \tcase 0 :
\t\t {
PORTD &= ~_BV(PD0) & ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD5) & ~_BV(PD6) ;
\t\t\t
\t\t\tPORTB &= ~_BV(PB0);
\t\t\t \t\t\t
\t\t\tbreak;
}
\t \tcase 1 :
\t\t {
PORTD |= _BV(PD0);
PORTD &= ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD5) & ~_BV(PD6) ;
\t\t\t
\t\t\tPORTB &= ~_BV(PB0);
\t\t\t \t\t\t
\t\t\tbreak;
}
\t \tcase 2 :
\t\t {
PORTD |= _BV(PD1);
PORTD &= ~_BV(PD0) & ~_BV(PD6) & ~_BV(PD4) & ~_BV(PD5) ;
\t\t\t
\t\t\tPORTB &= ~_BV(PB0);
\t\t\t \t\t\t
\t\t\tbreak;
}
\t \tcase 3 :
\t\t {
PORTD |= _BV(PD4);
PORTD &= ~_BV(PD1) & ~_BV(PD0) & ~_BV(PD5) & ~_BV(PD6) ;
\t\t\t
\t\t\tPORTB &= ~_BV(PB0);
\t\t\t \t\t\t
\t\t\tbreak;
}
\t \tcase 4 :
\t\t {
PORTD |= _BV(PD5);
PORTD &= ~_BV(PD0) & ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD6) ;
\t\t\t
\t\t\tPORTB &= ~_BV(PB0);
\t\t\t \t\t\t
\t\t\tbreak;
}
\t \tcase 5 :
\t\t {
PORTD |= _BV(PD6);
PORTD &= ~_BV(PD0) & ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD5) ;
\t\t\t
\t\t\tPORTB &= ~_BV(PB0);
\t\t\t \t\t\t
\t\t\tbreak;
}
\t \tcase 6 :
\t\t {
PORTB |= _BV(PB0);
PORTD &= ~_BV(PD0) & ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD5) & ~_BV(PD6) ;
\t\t\t
\t\t\t \t\t\t
\t\t\tbreak;
}
}
}
VI. Fungsi interupt waktu 1 Hz
Code:
//fungsi saat counter mencapai 1 detik
ISR(TIMER1_COMPA_vect)
{
detik++;
clock++;
if(detik == 60)
{
detik=0;
menit++;
if(menit == 60)
{ menit=0;
jam++;
}
if (jam == 24)
{ tanggal++; jam = 0 ; }
\t if(tahun%4 == 0) bul_max[1]=29;
else bul_max[1]=28;
if (tanggal > bul_max[bulan-1]) {bulan++; tanggal =1 ;}
if (bulan > 12) {tahun++; bulan=1; }
}
}
VII. fungsi tampilan jam
Code:
void tulis(void)
{
posisi(1);
segmen((jam/10));
\t _delay_ms(1);
segmen(10);
posisi(2);
segmen((jam%10));
\t _delay_ms(1);
segmen(10);
posisi(3);
segmen((menit/10));
\t _delay_ms(1);
segmen(10);
posisi(4);
segmen((menit%10));
_delay_ms(1);
segmen(10);
\t posisi(5);
segmen((detik/10));
\t _delay_ms(1);
segmen(10);
\t posisi(6);
segmen((detik%10));
\t _delay_ms(1);
segmen(10);
}
VII. MAIN PROGRAM
Spoiler for :
hasilnya seperti ini gan
SELAMAT MENCOBA
0

