"Kembali Ke Dasar Elektronika Digital ... "

Sabtu, 17 April 2021

Jam 4 Digit - Kembali Ke Attiny2313 Saat Atmel Ternyata Sudah Dibeli Microchip

 




Kemana aja sih masbro kok baru di 2021 sadar ATMEL yang memproduksi IC microcontroller legendaris telah dibeli Microchip di 2016? Gak kemana-mana kok... masih disini saja berkutat dengan dunia Elektronika diluar per - IC - an, setelah di tahun 2015 menghadapi kenyataan pasar elektronika digital tergerus dengan solusi Arduino yg memanjakan pengguna microcontroller 8 bit. Tapi kini di 2021 gak salah kita ulik kembali IC kesayangan ATTINY2313 di Era baru saat IC jadul akan diprediksi di korek-korek lagi dan muncul kembali akibat adanya perang "CHIP" antara USA vs CHINA. 





Kita gak ngomong politik-politikan ah...yang penting kita tetap berusaha memanfaatkan kondisi yang ada sebaik mungkin. Kita lanjut bercerita mengenai Microchip yg sudah mengakuisi ATMEL, dan saya akan bahas pada sisi development toolsnya. Kini yang namanya AVR Studio (Win AVR) - ATMEL STUDIO (sampai versi 7) kini telah digabungkan lebih lengkap dalam MICROCHIP STUDIO. Masih setia dengan GCC nya dimana librarynya tinggal install dari lib software maupun driver programmer. Yang saya masih punya di rumah adalah AVRISP - MKII dan ternyata tinggal colok sudah dapat dideteksi oleh komputer PC yang saya gunakan.



Yang menjadi pemicu dari kembalinya saya ke dunia ATtiny adalah sebuah WA dari orang senegal yg bekerja di prancis namanya jean paul, yang meminta saya untuk membuatkan program dari rangkaian jam berbasis C2051 diatas. Kita ketahui IC micro seri itu sudah obsolete dan karena memiliki kaki dan pola yang mirip puuool dengan ATTiny2313 maka langsung aja saya ambil lagi komponen dan breadboard dan mencoba membuat praktek LED blink untuk membangkitkan gairah dan  menghidupkan sel otak yg hampir 5 tahun dipakai untuk hal yg berbeda.






Ternyata Downloader , ATtiny dan PC saya masih bersahabat dan membuat adapatasinya lumayan cepat. Sehingga dalam waktu singkat sudah bisa membuat counter 7 segmen dengan script sederhana yang tinggal copy paste dari blog ini juga.



#define F_CPU 1000000UL // default internal RC clock 
#include <avr/io.h>
#include <util/delay.h>


void segmen (int angka)

{

//susunan segmen dari portB = AFBEDCGdp
//menggunakan 7 segmen common katoda 

	switch (angka)
	{
	                          //AFBEDCGdp	
    	        case 0 : { PORTB =0b11111100; break ; }
		case 1 : { PORTB =0b00100100; break ; }
		case 2 : { PORTB =0b10111010; break ; }
		case 3 : { PORTB =0b10101110; break ; }
		case 4 : { PORTB =0b01100110; break ; }
		case 5 : { PORTB =0b11001110; break ; }
		case 6 : { PORTB =0b11011110; break ; }
		case 7 : { PORTB =0b10100100; break ; }
		case 8 : { PORTB =0b11111110; break ; }
		case 9 : { PORTB =0b11101110; break ; }
		case 10 : { PORTB =0b0; break ; } 
	}


}



int main(void)

{

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


	// Port untuk display 7 segment
	DDRB |= (1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5)|(1<<PB6)|(1<<PB7);



	while(1)

	{

		counter++ ; //bikin delay nambah terusss

		// sesuaikan nilai max counter dengan detik yg pas, tentunya tidak akurat
		if(counter >= 20000) { 
			counter =0 ; 
			digit++;
			if(digit == 10) digit=0;
			
			
			 }

		// nilai 1/2 dari counter untuk blink dot "."
		if(counter >= 10000) PORTB |=(1<<PB0) ;

		// tampilkan digit
	           segmen(digit);

			


	}

	return 0;

}





Dari circuit yang saya dapat dari orang senegal tadi, kita menggunakan 7 segmen komon katoda / komon negatif, sehingga kalau kita ingat rangkaian LED dalam 7 segmen vs Attiny seperti ini :


Dalam rangkaian segmen dihubungkan ke port B (pin 12 - 19 , 7 segmen 1 dot) sehingga dengan susunan yang pas maka script untuk menulis segmen menjadi seperti ini :


switch (angka)
{
                          //AFBEDCGdot
            case 0 : { PORTB =0b11111100; break ; }
case 1 : { PORTB =0b00100100; break ; }
case 2 : { PORTB =0b10111010; break ; }
case 3 : { PORTB =0b10101110; break ; }
case 4 : { PORTB =0b01100110; break ; }
case 5 : { PORTB =0b11001110; break ; }
case 6 : { PORTB =0b11011110; break ; }
case 7 : { PORTB =0b10100100; break ; }
case 8 : { PORTB =0b11111110; break ; }
case 9 : { PORTB =0b11101110; break ; }
 
}

Dan hasil dari praktek counter 1 segmen menjadi seperti ini :




Selanjutnya kita hanya butuh memparalel 4 buah 7 segmen dan menghubungkan common dari tiap 7 segmen menuju microcontroller, lalu dibuat proses scanning bergantian menyalakan 7 segmen. Dari rangkaian yg diberikan kita akan menggunakan port D0-3 untuk melakukan scanning sehingga urutan 7 segmen yg ditampilkan seperti berikut :

  • (1) Port D0 Mati , Port D1,D2,D3 On , 7 segmen menampilkan digit puluhan jam
  • (2) Port D1 Mati , Port D0,D2,D3 On , 7 segmen menampilkan digit satuan jam
  • (3) Port D2 Mati , Port D0,D1,D3 On , 7 segmen menampilkan digit puluhan menit
  • (4) Port D3 Mati , Port D1,D2,D0 On , 7 segmen menampilkan digit satuan menit

Karena masing 7 segmen di nyalakan bergantian secara cepat, namun mata akan melihatnya lebih lambat dan efeknya 7 segmen tidak terasa berkedip. Script menampilkan scanning 7 segmen seperti berikut :


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

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

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

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


Sedangkan untuk menjadikan jamnya akurat saya menggunakan clock external berupa XTAL 4Mhz sehingga ATTiny butuh diubah fusebitnya menjadi CLK_DIV8 tidak aktif dan clock external 3-8Mhz. 







Dan yang tidak kalah pentingnya menggunakan Interupt Timer yang sangat ampuh mendapatkan clock 1 detik yang akurat. Scriptnya seperti berikut :


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=0; //variabel digit yang ditampilkan
   
   
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

     sei();

..........................
}




Sebenarnya saya hanya mengulang saja tulisan lawas saya yang bisa dibaca di link dibawah ini :


Hasilnya seperti ini brooo....







SELAMAT MENCOBA



.
Share:

0 komentar:

Posting Komentar

Kontak Penulis



12179018.png (60×60)
+628155737755

HP: 081331339072
Mail : ahocool@gmail.com

Site View

Categories

555 (7) 7 segmen (3) adc (4) amplifier (2) analog (10) android (11) antares (3) arduino (16) artikel (1) attiny (2) attiny2313 (18) blog (1) bluetooth (1) cmos (2) crypto (2) dasar (40) display (3) esp8266 (3) gcc (1) iklan (1) infrared (2) Input Output (3) iot (21) jam (6) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (14) komputer (3) komunikasi (1) kontrol (7) lain-lain (8) lcd (2) led (13) led matrix (6) line tracer (1) lm35 (1) memory (1) metal detector (4) microcontroller (56) mikrokontroller (10) mikrotik (5) ninmedia (2) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (50) pcb (2) praktek (2) project (33) proyek (1) python (1) radio (6) raspberry pi (4) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (1) sharing (3) signage (1) sinyal (1) sms (6) software (18) solusi (1) tachometer (2) telepon (7) televisi (111) television (19) transistor (1) troubleshoot (3) tulisan (74) tutorial (80) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika