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

Tampilkan postingan dengan label attiny2313. Tampilkan semua postingan
Tampilkan postingan dengan label attiny2313. Tampilkan semua postingan

Senin, 11 Juni 2012

KIT BELAJAR LED MATRIX



Kabar bagus buat pecinta dunia solder menyolder dan elektronika digital

Mau dapetin KIT yg ini ?












Murah aja kok..cuma 300 rb saja 






Paket KIT terdiri dari:


- PCB
- Microcontroller ATtiny 2313 ( pre-programmed jam digital)
- LED
- Komponen pendukung
- Petunjuk Program



DAPATKAN HARGA DISKON 600 RIBU JIKA MEMBELI PAKET BELAJAR MICRO+ KIT LED MATRIX 
(paket disesuaikan dengan komponen yg sudah tersedia)






Silahkan hubungi :


HP: 085733889569 , 087882045949
Mail : ahocool@gmail.com
ym :ahokleng
fb: www.facebook.com/nyoman.yudi
twiter: @ahocool


Share:

Senin, 04 Juni 2012

BERMAIN DENGAN TV PART#2

Setelah hanya bermain dengan HSYNC ( horizontal scanline) saja pada posting sebelumnya, maka pertanyaan akan muncul gimana jika pengen menampilkan gambar ditengah layar TV.

standar TV analog PAL memiliki teknik scanning line sebanyak 625 line, dengan teknik penggabungan penembakan elektron garis ganjil dulu dilanjutkan dengan line genap. seperti gambar dibawah ini :



untuk memberikan pembeda antara awal scan genap dan ganjil , dilakukan dengan memberikan pulsa yg berbentuk 0 - 0,3v dan dengan durasi 'short' selama 2us dan 'long' yang artinya 32 us. Agak ribet memang , tp lama-lama juga bakalan ngerti. kalo dilihat secara osciloscop seperti ini :


*)keterangan : us = micro second

Jadi untuk VSYNC ganjil, aturannya seperti ini :

- Dimulai dari baris ke 623, pulsa sebanyak 6x (0v selama 2us , 0,3v selama 32us ) selajutnya dinamakan LONG SYNC
- Setelah itu penanda start vsync 5x (0v selama 32us , 2us untuk level 0,3v) selanjutnya dinamakan SHORT SYNC
- Diakhiri dengan long sync sebanyak 5x
- Tidak semua baris tampil di tabung TV, umumnya tabung kelihatan mulai baris ke 50


Sedangkan untuk VSYNC GENAP, sebagai berikut:

- Dimulai dari baris ke 311, dengan LONG SYNC 5x
- Short Sync 5x
- Diakhiri dengan LONG SYNC 4x
- Beda antara baris yg berdempetan (Ganjil & Genap) adalah 312

nah sekarang kita ingin membuat garis vertikal ....seperti gambar :




programmingnya seperti berikut :



#define F_CPU 16000000UL

#include <avr/io.h>

#include <util/delay.h>

#define SYNC  PORTB=0

#define ABU   PORTB=0b10

#define ITEM  PORTB=0b01

#define PUTIH PORTB=0b11


int line;
void hsync(void)
  //sync  
   SYNC;
   _delay_us(4);
   ITEM
   _delay_us(8); 

   if(line == 50 || line == 100 || line == 150|| line == 200 || line == 250) ITEM
   else  ABU;  
   _delay_us(50);
line++;
}

void vsync(uint8_t ganjilgenap)
{
uint8_t a,b;
if(ganjilgenap == 0) b=6;
else b=5;
for(a=0; a<b ; a++) //6x atau 5x long sync
{
SYNC;
_delay_us(2);

PORTB=1;
_delay_us(30);
}
for(a=0; a<5 ; a++) //5x short sync
{
SYNC;
_delay_us(30);

PORTB=1;
_delay_us(2);
}

if(ganjilgenap == 0) b=5;
else b=4;
for(a=0; a<b ; a++) //5x atau 4x long sync
{

SYNC;
_delay_us(2);
PORTB=1;

_delay_us(30);
}

if(ganjilgenap == 0) line=5;
else line=317;
}
int main(void)
{  
  line=622;
  //Inisialisasi port input

   DDRB =0b11;  
   while(1)
   {   
   if(line == 622) vsync(0);  //genap
   else if(line == 310) vsync(1); //ganjil

   else hsync();

   }
}

selanjutnya dengan penggabungan antara VSYNC dan HSYNC kita bisa menggambar diatas TV, tentunya dengan keterbatasan timing dari AVR, susah juga kadang menemukan timing yg pas. dengan menggunakan delay.h tidak bisa dijamin delay yg bener sebab tiap perintah /syntax dari GCC memerlukan waktu eksekusi yg memakan waktu juga . begitu pula dengan menggunakan counter interrupt, timing nya terbatas untuk interupt yg pas digunakan, sebab jika CTC 1us maka hampir semua program didominasi oleh interupt timer.

kalo yg kayak gini mau ? 



kalo mau...contact aja aku ... atau mau lanjut ke part ke 3
Share:

Sabtu, 02 Juni 2012

BERMAIN DENGAN TV ... PART#1


sebenernya sudah sejak dulu pengen maenin AVR buat bikin karakter di TV. Baru kesampean sekarang dan ubek-ubek google aku baca2 di mari: http://www.rickard.gunee.com/project.../pic/howto.php

nah...ternyata tidak segampang yg ku kira, banyak teory analog yg mesti dikuasai. Salut deh buat yg pertama ngerancang TV ..trus yg pertama bikin VIDEO GAME otaknya pasti tokcer banget .

sebelum ke skematik dan listing, kita perhatikan dulu bagaimana gambar TV (PAL) itu terbentuk. Gambarannya seperti berikut :



gambar di scan oleh electron secara bergantian per baris, ganjil dulu baru baris genap ( kelembaman mata membuat terlihat sebagai gambar)  dengan total scanline 625 untuk PAL. 






Dari sebuah raster sebesar 64us, 4 us pertama sinyal berupa 0v, 8 us kemudian ada jeda (biasanya untuk colorbust) sinyal 0,3v (black blank level). selanjutnya sisanya 58us merupakan data gambar. beruntung sekali level dari sinyal composite maksimal 1 V (warna putih), sehingga dengan pembagian resistor sederhana dapat di peroleh level hitam dan putih hanya dengan menggunakan 2 buah resistor












dan...percobaan pertama adalah membuat gambar seperti ini :



jadi dikiri bikin kotak abu2, ditengah garis item, di kanan kotak putih


Kita rangkai AVR ATTINY 2313 dengan PORT B0 disambung ke R 1K dan PORT B1 menuju resistor 470ohm , seperti gambar diatas. Ujung kedia resistor menuju ke port composite / AVin dari tv. Clock yg digunakan xtal 16MHz - 20MHz




klik untuk lebih jelas

SCRIPT :


#define F_CPU 16000000UL  //clock xtal
#include <avr/io.h>
#include <util/delay.h>

#define SYNC  PORTB=0
#define ABU   PORTB=0b10
#define ITEM  PORTB=0b01
#define PUTIH PORTB=0b11



int main(void)

{  
   //Inisialisasi port yg digunakan
   DDRB =0b11;  
   while(1)
   {   

  //sync  horiz 
   SYNC;
   _delay_us(4);

 // blanking
   ITEM;
  _delay_us(8);  

   ITEM;
   _delay_us(5);
   ABU;
  _delay_us(20);
   ITEM;
  _delay_us(1);
   PUTIH;
   _delay_us(20);
   ITEM;
  _delay_us(7);    

 }


}


Dengan merubah dikit..dikit, terutama di susunan delay dari raster kita dapat membikin gambar seperti ini :




bersambung ke part ke 2
Share:

Selasa, 13 September 2011

Belajar Menulis di LCD Matrix


Kali ini kita akan membahas tentang LCD matrix
Umumnya LCD matrix yg beredar berbasis chipset HD44780 buatan hitachi



Lcd berbasis HD44780 mempunyai 2 mode interface 4 bit ato 8 bit
kali ini kita akan membahas yg 4bit karena kita pake attiny yg pin nya dikit
menulis ke LCD gampang-gampang susah, ada tricknya tersendiri asal sesuai datasheet

tapi kali ini kita akan bikin paling gampang, dengan memanfaatkan library yg paling banyak dipake buatan si PETER FLEURY linknya disini

sedangkan librarinya dapat download disini


pertama siapkan skematik berikut ini



dari gambar, potensio/trimpot fungsinya untuk mengatur kontras LCD, jika tidak perlu diatur, bisa diganti dengan R 100 ohm


selanjutnya buat project di AVR studio, jangan lupa mengekstrak librarynya si fleury yaitu file lcd.h dan lcd.c

karena file lcd.h nya default, kita bahas bagian2 yg dapat disesuaikan sesuai desain yang kamu bikin. Edit file lcd.h dengan notepad

Quote:

#define XTAL 1000000 sesuaikan nilai dengan frek clock, default attiny2313 adalah 1Mhz

#define LCD_LINES 2 jumlah line LCD
#define LCD_DISP_LENGTH 16 jumlah karakter per line


#define LCD_IO_MODE 1 mode 0=8bit, 1=4 bit

selanjutnya adalah definisi pin yang dipake, berikut ini hasil edit yang sesuai skematik diatas

#define LCD_PORT PORTB /**< port for the LCD lines */
#define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN 0 /**< pin for 4bit data bit 0 */
#define LCD_DATA1_PIN 1 /**< pin for 4bit data bit 1 */
#define LCD_DATA2_PIN 2 /**< pin for 4bit data bit 2 */
#define LCD_DATA3_PIN 3 /**< pin for 4bit data bit 3 */
#define LCD_RS_PORT PORTD /**< port for RS line */
#define LCD_RS_PIN 4 /**< pin for RS line */
#define LCD_RW_PORT PORTD /**< port for RW line */
#define LCD_RW_PIN 5 /**< pin for RW line */
#define LCD_E_PORT PORTD /**< port for Enable line */
#define LCD_E_PIN 6 /**< pin for Enable line */


selanjutnya jangan lupa untuk menambahkan source lcd.c , seperti pada gambar berikut:




selanjutnya adalah routine/function yg dipake oleh library peter fleury


void lcd_init ( uint8_t dispAttr )

inisialisasi display


Parameter yang dipake untuk dispAttr :

LCD_DISP_OFF
display off LCD_DISP_ON display on, cursor off LCD_DISP_ON_CURSOR display on, cursor on LCD_DISP_ON_CURSOR_BLINK display on, cursor on flashing



void lcd_clrscr ( void )


Clear display LCD




void lcd_home ( void )


Set cursor ke posisi home



void lcd_gotoxy ( uint8_t x, uint8_t y )


Set cursor ke posisi tertentu



Parameters:

x
posisi horizontal , 0 paling kiri
y
posisi vertikal, 0 baris paling atas


void lcd_putc ( char c )


menampilkan sebuah karakter di LCD



void lcd_puts ( const char * s )


menampilkan String di LCD



void lcd_puts_p ( const char * progmem_s )


Display string jika memakai Progmem



void lcd_command ( uint8_t cmd )


Jika mengirim command/perintah setting



sekarang kita lanjut ke sciptnya yukkk...
kali ini kita akan menulis sesuatu ke LCD :

#include <stdlib.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "lcd.h"




int main(void)
{


DDRD |= (1<<PD4)|(1<<PD5)|(1<<PD6); //Port RS, R/W, En
DDRB |= (1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3); //DATA port 4 bit



lcd_init(LCD_DISP_ON); //inisialisasi
lcd_clrscr(); //bersihkan layar


lcd_puts("=== Test LCD ===\n"); //tulis baris 1 dan geser ke bawah


lcd_puts("1234567890@#$%?+"); //tulis baris 2


while(1)

{


}

return 0;

}

sedangkan yang lebih keren..kita bikin teks LCD nya geser...geserr seperti gambar + video





Share:

Jumat, 05 Agustus 2011

Bermain Dengan Dot Matrix "LoveHurt"


=== REMAKE 2020 BISA DIBACA DISINI ====





  =======================================================




Siapkan bahan-bahan seperti berikut:





Attiny 2313
Led matrix 7x5
R 10K
Diode 4148
PCB lobang
Header 2x5 buat ISP programmer (optional - Bisa diprogram di Breadboard)
Socket 20 untuk ATtiny, dan soket 14 ( dibelah dua ) buat tempat Led matrix

rangkaiannya seperti ini :




Kemudian komponen dirangkai diatas PCB lobang, ato bisa juga memakai bahan lain( disesuaikan dengan tempat yg mau di pake, misale kotak hadiah , papan tripleks dan lain sebagainya)




letakkan LED MATRIX sesuai dengan SOCKET IC yg dibelah tadi



karena ga ada baterai ( punya tempatnya doang) jadi pake adaptor 3 Volt aja



Untuk kreasi text dalam Led Matrix 7 x 5 , bisa gunakan panduan excel di link ini








Script code dalam Bahasa C /WinAvr seperti berikut:


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

//Progmem simpannya di FLASH memory

const char love1[] PROGMEM =
{
0b0011110,
0b0100001,
0b1000010,
0b0100001,
0b0011110

};

const char love2[] PROGMEM =
{
0b0001100,
0b0010010,
0b0100100,
0b0010010,
0b0001100

};

const char L[] PROGMEM ={0x7f, 0x7f, 0x40, 0x40, 0x20}; 
const char O[] PROGMEM ={0x3e, 0x7f, 0x41, 0x41, 0x3e};
const char V[] PROGMEM ={0x3f, 0x7e, 0x40, 0x20, 0x1f};
const char E[] PROGMEM ={0x7f, 0x7f, 0x49, 0x49, 0x41};
const char H[] PROGMEM ={0x7f, 0x7f, 0x08, 0x08, 0x7f};
const char U[] PROGMEM ={0x3f, 0x7f, 0x40, 0x40, 0x3f};
const char R[] PROGMEM ={0x7f, 0x7f, 0x11, 0x29, 0x46};
const char T[] PROGMEM ={0x03, 0x03, 0x7f, 0x03, 0x02};

const char creature[]={0x4e, 0x31, 0x35, 0x31, 0x4e}; //simpan di memory/RAM aja

uint8_t EEMEM tengkorak[5]= {0x1e, 0x75, 0x61, 0x75, 0x1e}; //simpan di EEPROM

uint8_t EEMEM pacman[5]= {0x26, 0x67, 0x67, 0x7f, 0x3e}; //simpan di EEPROM


char dotnya[5],scrolnya[7];



void tulis(uint8_t lama)
{
  uint8_t a,b;

for(a=0 ; a<lama ; a++)
{
 for(b=0 ; b<5 ; b++)   
  
{

PORTB = ~(1<<b) ;
PORTD = dotnya[b];
            _delay_ms(2);

     
}

}



}


void geser(uint8_t lama)
{
  uint8_t a,b;

 for(a=0 ; a<11 ; a++)   
  
{

  if( a<6) 
   { 
 for(b=0 ; b<(5-a) ; b++)  dotnya[b]=0x80;
              for(b=(5-a); b<5 ;b++) dotnya[b]=scrolnya[b-5+a];
 
 tulis(10);
             
             }
  else if (a==6) tulis(lama);

  else 
             {  for(b=0 ; b<11-a ; b++) dotnya[b]=scrolnya[a-5+b];
   for(b=(11-a); b<11 ;b++) dotnya[b]=0x80;  
 
                tulis(10);
              }

          }
 
   
                
     

 
}

void naik (uint8_t lama)

{
{  uint8_t q,step=0;
  
  
  while(step!=16)
   {
if( step <8)
  {   
for(q=0 ; q < 5 ; q++) dotnya[q] = scrolnya[q] << (7 - step) ; 

           tulis(10);
        } 
   
    else if (step == 8)
  {    
        tulis(lama); 

       }      
else 
  {   
         for(q=0 ; q < 5 ; q++)  dotnya[q] = scrolnya[q] >> (step - 7) ;  
          
  tulis(10);

     step++; 

}    

}




}


int main(void)
{
DDRD = 0b1111111; // untuk baris
DDRB = 0b11111;  // untuk kolom

PORTD =0; // Set all pins low
PORTB =0b11111; //matikan layar
    
    


while(1)
{
// yang ini nulis langsung 
  
     strncpy_P(dotnya,love2,5);
     tulis(20);
     strncpy_P(dotnya,love1,5);
     tulis(40);
strncpy_P(dotnya,love2,5);
     tulis(20);
     strncpy_P(dotnya,love1,5);
     tulis(40);
     strncpy_P(dotnya,love2,5);
     tulis(20);
     strncpy_P(dotnya,love1,5);
     tulis(40);     

//yang ini pake function geser 

strncpy_P(scrolnya,L,5);
     geser(50);
strncpy_P(scrolnya,O,5);
     geser(50);
strncpy_P(scrolnya,V,5);
     geser(50);
strncpy_P(scrolnya,E,5);
     geser(50);
strncpy_P(scrolnya,H,5);
     geser(50);
strncpy_P(scrolnya,U,5);
     geser(50);
strncpy_P(scrolnya,R,5);
     geser(50);
strncpy_P(scrolnya,T,5);
     geser(50);

//geser ambil dari RAM

strncpy(scrolnya,creature,5);  //tanpa _P karena ambil di RAM
     naik(50);

//ambil dari eeprom ..mengirit..

     eeprom_read_block((void*)&scrolnya,(const void*)&tengkorak, 5); 
naik(50);

     eeprom_read_block((void*)&scrolnya,(const void*)&pacman, 5); 
geser(50);

}

return 0;
}


Script code diatas dibuat dalam mode FLASH, RAM, dan EEPROM, jadi ketika download program ke IC harus memprogram FLASH dulu kemudian dilanjutkan dengan EEPROM.
FLASH extensinya .hex sedangkan isi EEPROM extensinya .eep




hasil akhirnya seperti di video berikut :





SELAMAT MENCOBA
Share:

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:

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 (12) antares (8) arduino (26) 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 (25) euro2020 (13) gcc (1) iklan (1) infrared (2) Input Output (3) iot (58) 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 (7) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (1) 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 (7) radio (26) raspberry pi (4) 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) transistor (2) troubleshoot (3) tulisan (93) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika