Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

  • IC Timer 555 yang Multifungsi

    IC timer 555 adalah sirkuit terpadu (chip) yang digunakan dalam berbagai pembangkit timer, pulsa dan aplikasi osilator. Komponen ini digunakan secara luas, berkat kemudahan dalam penggunaan, harga rendah dan stabilitas yang baik

  • Ayo Migrasi TV Digital

    Kami bantu anda untuk memahami lebih jelas mengenai migrasi tv digital, apa sebabnya dan bagaimana efek terhadap kehidupan. Jasa teknisi juga tersedia dan siap membantu instalasi - setting perangkat - pengaturan antena dan distribusi televisi digital ke kamar kos / hotel

  • Bermain DOT Matrix - LOVEHURT

    Project Sederhana dengan Dot Matrix dan Attiny2313. Bisa menjadi hadiah buat teman atau pacarmu yang ulang tahun dengan tulisan dan animasi yang dapat dibuat sendiri.

  • JAM DIGITAL 6 DIGIT TANPA MICRO FULL CMOS

    Jika anda pencinta IC TTL datau CMOS maka project jam digital ini akan menunjukkan bahwa tidak ada salahnya balik kembali ke dasar elektronika digital , sebab semuanya BISA dibuat dengan teknologi jadul

  • Node Red - Kontrol Industri 4.0

    Teknologi kontrol sudah melampaui ekspektasi semua orang dan dengan kemajuan dunia elektronika, kini semakin leluasa berkreasi melalui Node Red

Selasa, 02 Agustus 2011

Jam Sederhana Dengan Attiny 2313

Kali ini kita akan menggunakan 4 buah 7 segment untuk membuat jam sederhana


"wahhh..kalo banyak 7 segmentnya, ngabisin banyak port dong ?"



Jangan khawatir, kita pake teknik " SCANNING", artinya kita hidupin segment satu persatu, tiap segment diparalel saja...tp kita hidupin dengan memberikan switch/saklar ke common port 7segment yg dikontrol oleh port micro ..dan scanningnya cepetttt...sehingga mata kita melihatnya seperti nyala biasa aja.

jadi untuk bikin 7-segment 4 buah, diperlukan 7 port display(diparalel) + 4 port control

rangkaiannya seperti berikut :




klik untuk memperbesar gambar

Biasanya untuk display yg agak besar, kita perlu transistor untuk mengatur scanning, tp karena contoh kali ini memakai segment yg kecil maka tidak memerlukan kontrol memakai transistor ( coba pake transistor dijamin nyalanya redup !!)


Prinsip jam kali ini menggunakan prinsip DELAY, jadi tidak terlalu akurat.
Sebenernya mau seh membagi ilmu untuk jam yg super akurat, tapi ntar aja yahh..soalnya memerlukan pengetahuan mengenai "Timer/Counter" dari microcontroller

source code nya sebagai berikut :

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>

int jam=0, min=0, detik=0; //variable global untuk menyimpan data2 waktu

void segmen (int angka)

{

switch (angka)
{

case 0 : { PORTB =0b1000000; break ; }
case 1 : { PORTB =0b1111001; break ; }
case 2 : { PORTB =0b0100100; break ; }
case 3 : { PORTB =0b0110000; break ; }
case 4 : { PORTB =0b0011001; break ; }
case 5 : { PORTB =0b0010010; break ; }
case 6 : { PORTB =0b0000010; break ; }
case 7 : { PORTB =0b1111000; break ; }
case 8 : { PORTB =0b0000000; break ; }
case 9 : { PORTB =0b0010000; break ; }
case 10 : { PORTB =0b1111111; break ; } //blank biar ga berbayang
}


}


void clock (void) //fungsi penambah waktu

{

detik ++; //jika fungsi dipanggil maka var detik ditambah

if ( detik == 60) // tambahkan menit jika 60 detik
{ detik=0; //untuk kembali ke 0
min++;
}

if ( min == 60) // tambahkan jam jika 60 menit
{ min = 0; //untuk kembali ke 0
jam++ ;
}

if (jam == 24) jam=0; //untuk kembali ke 0


}



int main(void)

{

int counter=0; //variabel delay
int digit; //variabel digit yang ditampilkan


// Port untuk display 7 segment
DDRB |= (1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5)|(1<<PB6);
//port untuk scanning ( PD0-4) dan dot ":" (PD6)
DDRD |= (1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3) |(1<<PD6);
//tombol untuk nambah jam/menit
DDRD &= ~(1<<PD4) & ~(1<<PD5) ;

PORTD = (1<<PD6) ; // blink untuk ":"


while(1)

{



counter++ ; //bikin delay nambah terusss

// sesuaikan nilai max counter dengan detik yg pas, tentunya tidak akurat
if(counter == 30) { counter =0 ; clock(); }

// nilai 1/2 dari counter untuk blink ":"
if(counter == 15) PORTD ^=(1<<PD6) ;

else{

segmen(10); // kasi display "mati' agar tidak berbayang

//digit pertama

digit = jam/10;
PORTD |= (1<<PD0); // 7 segment no1 hidup..yg laen mati
PORTD &= ~(1<<PD1) & ~(1<<PD2) & ~(1<<PD3) ;
segmen(digit);
_delay_ms(5);

//digit ke 2

segmen(10);
digit = jam%10;
PORTD |= (1<<PD1); // 7 segment no2 hidup..yg laen mati
PORTD &= ~(1<<PD0) & ~(1<<PD2) & ~(1<<PD3) ;
segmen(digit);
_delay_ms(5);

//digit ke 3

segmen(10);
digit = min/10;
PORTD |= (1<<PD2); // 7 segment no3 hidup..yg laen mati
PORTD &= ~(1<<PD1) & ~(1<<PD0) & ~(1<<PD3) ;
segmen(digit);
_delay_ms(5);

//digit ke 4

segmen(10);
digit = min%10;
PORTD |= (1<<PD3); // 7 segment no4 hidup..yg laen mati
PORTD &= ~(1<<PD1) & ~(1<<PD2) & ~(1<<PD0) ;
segmen(digit);
_delay_ms(5);



}

if (bit_is_set(PIND, PIND4)) //tombol nambah jam
{
jam++;
if(jam==24) jam =0;
_delay_ms(100);

}

if (bit_is_set(PIND, PIND5)) //tombol nambah menit
{
min++;
if(min==60) min=0;
_delay_ms(100);

}



}

return 0;

}



jika ingin mengetest/kalibrasi delay detik, ganti salah satu digit untuk menampilkan detik

//digit pertama

digit = detik/10;
PORTD |= (1<<PD0); // 7 segment no1 hidup..yg laen mati
PORTD &= ~(1<<PD1) & ~(1<<PD2) & ~(1<<PD3) ;
segmen(digit);
_delay_ms(5);

//digit ke 2

segmen(10);
digit = detik%10;
PORTD |= (1<<PD1); // 7 segment no2 hidup..yg laen mati
PORTD &= ~(1<<PD0) & ~(1<<PD2) & ~(1<<PD3) ;
segmen(digit);
_delay_ms(5);




Bagaimana dengan jam akurat ? disini nih kuncinya ...menggunakan xtal 4Mhz

/* ===================
GUNAKAN XTAL 4MHZ dan 2 buah capacitor 22pf
dan sambungkan seperti gambar di petunjuk awal
di bagian menggunakan xtal dan ubah dusebit

rangkaian tetap sama seperti jam_sederhana
hanya tambahan xtal pada kaki 4 dan 5 serta 
masing kaki xtal dihubungkan ke GND oleh
capacitor 22pf

*/

#define F_CPU 4000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

int jam=0, min=0, detik=0;

void segmen (int angka)

{

  switch (angka)        
          {

case 0 :  { PORTB =0b1000000; break ; }
        case 1 :  { PORTB =0b1111001; break ; }
        case 2 :  { PORTB =0b0100100; break ; }
        case 3 :  { PORTB =0b0110000; break ; }
        case 4 :  { PORTB =0b0011001; break ; }
        case 5 :  { PORTB =0b0010010; break ; }
        case 6 :  { PORTB =0b0000010; break ; }
        case 7 :  { PORTB =0b1111000; break ; }
        case 8 :  { PORTB =0b0000000; break ; }
        case 9 :  { PORTB =0b0010000; break ; }
        case 10 : { PORTB =0b1111111; break ; }  //blank biar ga berbayang
 }


}


ISR(TIMER1_COMPA_vect) 




  detik ++;

  if ( detik == 60)  
     {  detik=0;
   min++;
}  

  if ( min == 60)
      { min = 0;
   jam++ ;   
       }
  
  if (jam == 24) jam=0;
          

}



int main(void)

{

int digit;


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



DDRB  |= (1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5)|(1<<PB6);
DDRD  |= (1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3) |(1<<PD6);

DDRD  &= ~(1<<PD4) & ~(1<<PD5)  ;


sei();


while(1)

{




if(TCNT1 < 31250) PORTD |=(1<<PD6) ; 
else PORTD &=~(1<<PD6) ; 


segmen(10);
digit = jam/10;
PORTD |= (1<<PD0);
PORTD &= ~(1<<PD1) & ~(1<<PD2) & ~(1<<PD3) ;
segmen(digit);
_delay_ms(5);

segmen(10);
digit = jam%10;
PORTD |= (1<<PD1);
PORTD &= ~(1<<PD0) & ~(1<<PD2) & ~(1<<PD3) ;
segmen(digit);
_delay_ms(5);

segmen(10);
digit = min/10;
PORTD |= (1<<PD2);
PORTD &= ~(1<<PD1) & ~(1<<PD0) & ~(1<<PD3) ;
segmen(digit);
_delay_ms(5);

segmen(10);
digit = min%10;
PORTD |= (1<<PD3);
PORTD &= ~(1<<PD1) & ~(1<<PD2) & ~(1<<PD0) ;
segmen(digit);
_delay_ms(5);




if (bit_is_set(PIND, PIND4))
   {
     jam++;
if(jam==24) jam =0;
     _delay_ms(100);

   }

if (bit_is_set(PIND, PIND5))
   {
     min++;
if(min==60) min=0;
 _delay_ms(100);

   }



}

return 0;

}











hasilnya dapat dilihat seperti berikut :



Share:

Senin, 01 Agustus 2011

Perkenalan AVR STUDIO

Untuk melakukan programming ke Chip AVR diperlukan software developer dan juga software downloader. Sedangkan untuk Hardware downloader dibahas di posting sebelumnya. Kali ini kita gunakan software komplit buatan atmel (si empunya avr) plus WINAVR untuk coding dalam bahasa C.

Asumsikan bahwa hardware programmer sudah terpasang dan terinstall driver nya dengan benar. Pada contoh dibawah kita gunakan programmer berbasis STK500 dan Chip yg dipakai ATTiny2313.

Buka AVR studio , pastikan WINAVR sudah terinstall sehingga bisa menggunakan bahasa GCC. Pilih NEW PROJECT sehingga muncul halaman pada gambar dan pilih juga folder yang digunakan, sebab semua file akan ditempatkan di folder tersebut



pilih jenis simulator dan IC yang digunakan
standar yg digunakan adalah AVR SIMULATOR dan sesuai IC yang digunakan yaitu ATTINY2313





untuk mengecek apakah programmer & hardwarenya sudah siap digunakan, pastikan menggunakan com port yg sesuai dengan com port programmer. Kemudian lakukan langkah berikut ini:

Set frekuensi programmer ke frekuensi yang 1/4 lebih rendah dari frek oscillator dari avr.
Dari pabriknya, AVR ( kali ini diambil contoh attiny2313) secara default menggunakan internal oscilator 8 MHZ dan clocknya di bagi 8 (clock div /8) sehingga CPU bekerja di 1MHZ
sehingga set programmer pada setting yg 1/4 lebih kecil yaitu 57.6khz



lakukan "READ SIGNATURE" untuk mengecek koneksi programmer & ATtiny2313

Jika hasil compile script di developer window anda anda sukses, maka lakukan download file HEX ke chip AVR sesuai gambar berikut :

file hex ada di : /folderanda/default/namaproject.hex




Dari pabriknya AVR memiliki setting clock internal sebesar 1 Mhz, jadi jika menggunakan clock external seperti xtal oscilator perlu dilakukan setting fusebit seperti contoh pada gambar berikut:



Mudah bukan ?
Share:

BASIC OUTPUT & INPUT dengan ATTINY 2313

Siapkan bahan2 sesuai skematik berikut ini :



dan jangan lupa programmer AVR nya ...

PROJECT 1 LED BLINK

#define F_CPU 1000000UL // frekuensi clock internal
#include <avr/io.h> // definisi standar io port
#include <util/delay.h> // definisi include untuk delay


int main(void)

{



DDRB=0b1 ; // Inisialisasi bahwa port B0 adalah output , jika pake port B5 ya inisialisai jadi DDRB=0b100000;



while(1)

{

PORTB=0b1; //port B0 = 1 atau nyala

_delay_ms(1000); //delay

PORTB=0b0; //port B0 = 0 atau mati

_delay_ms(1000); //delay

}

return 0;




PROJECT 2 LED BLINK

Gunakan 2 LED di port B#0 dan B#5
Kita akan memperkenalkan operasi bit untuk inisialisasi rangkap

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>


int main(void)

{



DDRB |= (1<<PB5)|(1<<PB0) ; // inisialisai menggunakan operasi bit

PORTB |= (1<<PB5) ; // operasi bit PORT B#5 = 1
PORTB &= ~(1<<PB0) ; //operasi bit PORT B#0 =0

while(1)

{

PORTB ^=(1<<PB5) ; // operasi bit toggle atau NEGASI/KEBALIKAN dari posisi bit sebelumnya
PORTB ^=(1<<PB0) ;

_delay_ms(1000);



}

return 0;

}




PROJECT - MEMBACA TOMBOL

kali ini kita akan membaca tombol dan kita gunakan untuk mengatur nyala matinya LED
kita memanfaatkan syntax " if (bit_is_set(PIN#, PIN##)) "

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void)

{



DDRB |= (1<<PB5)|(1<<PB0) ; //inisialisasi port B#5 & B#0 sebagai output
DDRB &= ~(1<<PB1) & ~(1<<PB2) ; //inisialisasi port B#1 & B#2 sebagai input

PORTB |= (1<<PB5) | (1<<PB0); //kita SET LED NYALA semuanya

while(1)

{


if (bit_is_set(PINB, PINB1)) // membaca jika port input B#1 di set atau HIGH / 1 ( posisi awal di ground /LOW )
{
PORTB ^=(1<<PB5) ; //TOGGLE LED di PORT B#1
_delay_ms(500);

}

if (bit_is_set(PINB, PINB2)) // membaca jika port input B#2 di set atau HIGH / 1 ( posisi awal di ground /LOW )
{
PORTB ^=(1<<PB0) ; //TOGGLE LED di PORT B#2
_delay_ms(500);

}
}

return 0;

}



Share:

Minggu, 31 Juli 2011

BERKENALAN DENGAN AVR MICROCONTROLLER

avr-chip.jpg (230×191)
Lupakan MC 89S51 karena sudah outdate, walau masih tersedia di pasar
kenapa ??

1. 89c51 memang dasar sekali, tapi untuk fungsi2 yang memerlukan RAM, EEPROM, COUNTER, ADC,PWM dsb dibutuhkan komunikasi ke IC tersendiri

2. AVR merupakan teknologi MC yang langsung memiliki beberapa fungsi sekaligus dalam 1 chip (Harvard architecture) RAM, EEPROM, ADC, PWM COUNTER, UART, SPI, I2C dsb. gabung dalam 1 IC tinggal pilih IC MC yang sesuai dengan kebutuhan

3. Pemrograman secara SPI, bisa mencoba produk 200 rb-an di http://www.innovativeelectronics.com/

4. AVR yang cocok buat belajar :
- ATtiny 2313(15rb) ==> umum, kecil, simple, realible
- ATMega 8515(35rb) ==> jika butuh kapasitas agak besar
- ATMega 8535 (40rb) ==> tambah ADC 8 ch
- ATMEGA128(70rb) ==> jika butuh I/O yang banyak & memori gede

5. Bikin Progam "Hello world" , dengan menyalakan LED berjalan bolak-balik dengan MC AtTiny 2313, menggunakan AVR studio(gratis) & WInAVR(krack) sehingga pemrograman full dalam bahasa C (GCC)

6. Hubungkan PORTD dari attiny2313 dengan LED 8 buah ( tambahkan Resistor 470 ohm tiap led untuk pembatas arus)


#include <avr/io.h>
#include <avr/delay.h>


int main (void)
{
// set PORTD sebagai output
DDRD = 0xFF;
int i ;


while(1) {
for(i = 1; i <= 128; i = i*2)
{
PORTD = i;
_delay_ms(1000);
}
for( i = 128; i > 1; i -= i/2)
{
PORTD = i;
_delay_ms(1000);
}

}
}



Download file "hex" menuju AVR melalui SPI port , alat yg digunakan bisa beragam...googling aja banyak kok yg gampang + murah bahan2nya

Hasilnya :



Share:

Kontak Penulis



12179018.png (60×60)
+628155737755

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (14) antares (11) arduino (28) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (26) euro2020 (13) gcc (1) gsm (1) iklan (1) infrared (2) Input Output (3) iot (76) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (11) lorawan (2) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (2) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (33) proyek (1) python (8) radio (28) raspberry pi (9) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) telkomiot (5) transistor (2) troubleshoot (3) tulisan (94) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3) yolo (7)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika