Prinsipnya adalah menumpangkan audio ke fungsi osilator dari rangkaian 555
Dari hasil googling menuntunku menuju ke instructable.com dan memperoleh rangkaian sederhana seperti berikut ini :
Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari
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
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
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.
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
Teknologi kontrol sudah melampaui ekspektasi semua orang dan dengan kemajuan dunia elektronika, kini semakin leluasa berkreasi melalui Node Red
#define F_CPU 1000000UL // frek clock internal#include <avr/io.h>#include <util/delay.h>#include <avr/eeprom.h>#include <avr/interrupt.h>#include <avr/pgmspace.h>uint8_t angka1=10 ;uint8_t angka2=10 ;uint8_t angka3=10 ;uint8_t angka4=10 ;uint8_t segstep=0;uint8_t kalibrasi=3;int number=0;void conv_segmen(uint8_t digit)//nampilin segmen{switch (digit){case 0 :{PORTB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB5);PORTB |= _BV(PB6) ;break;}case 1 :{PORTB &= ~_BV(PB1) & ~_BV(PB2) ;PORTB |= _BV(PB0) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) ;break;}case 2 :{PORTB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB6) ;PORTB |= _BV(PB2) | _BV(PB5) ;break;}case 3 :{PORTB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB6) ;PORTB |= _BV(PB4) | _BV(PB5) ;break;}case 4 :{PORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB5) & ~_BV(PB6) ;PORTB |= _BV(PB0) | _BV(PB3) | _BV(PB4) ;break;}case 5 :{PORTB &= ~_BV(PB0) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB5) & ~_BV(PB6) ;PORTB |= _BV(PB1) | _BV(PB4) ;break;}case 6 :{PORTB &= ~_BV(PB0) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB5) & ~_BV(PB6) ;PORTB |= _BV(PB1) ;break;}case 7 :{PORTB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB2) ;PORTB |= _BV(PB3) | _BV(PB4) | _BV(PB5)| _BV(PB6) ;break;}case 8 :{PORTB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB5) & ~_BV(PB6);break;}case 9 :{PORTB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB5) & ~_BV(PB6);PORTB |= _BV(PB4) ;break;}case 10 :{PORTB |= _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) ;break;}}}void init_ctr(void) //counter tampilan{TCCR0A |= (1 << WGM01); // Configure timer 0 for CTC modeTIMSK |= (1 << OCIE0A); // Enable CTC interruptOCR0A = 50; // Set CTC compare value till blink disapear at 1MHz AVR clock, with a prescaler of 64TCCR0B |= (1 << CS01)|(1 << CS00); // Start timer at Fcpu/64}void init_ctr1(void)//counter perhitungan 600ms sampling{TCCR1B |= (1 << WGM12); // Configure timer 1 for CTC modeTIMSK |= (1 << OCIE1A); // Enable CTC interruptOCR1A = 586; //compare the CTC A = 600ms =586TCCR1B |= ((1 << CS10) | (1 << CS12)); // Start timer at Fcpu/1024}ISR(TIMER1_COMPA_vect) //timer capture RPM counter{ uint16_t rpm;switch(kalibrasi) {case 1 :{rpm=number/100;break; }case 2 :{rpm=number/10;break; }case 3 :{rpm=number;break; }case 4 :{rpm=number*10;break; }case 5 :{rpm=number*100;break; }default: rpm=0;}angka1 = rpm%10;if(rpm>9) angka2 = ((rpm%100) - (rpm%10)) /10 ;else angka2=10;if(rpm>99) angka3 = ((rpm%1000) - (rpm%100)) /100 ;else angka3=10;if(rpm>999) angka4 = ((rpm%10000) - (rpm%1000)) /1000 ;else angka4=10;number=0;}ISR(TIMER0_COMPA_vect) // timer pindah kolom{segstep++;switch(segstep) {case 1 :{ conv_segmen(10);PORTD |= _BV(PD0);PORTD &= ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD5) ;conv_segmen(angka1);break;}case 2 :{ conv_segmen(10);PORTD |= _BV(PD1);PORTD &= ~_BV(PD0) & ~_BV(PD4) & ~_BV(PD5) ;conv_segmen(angka2);break;}case 3 :{ conv_segmen(10);PORTD |= _BV(PD4);PORTD &= ~_BV(PD1) & ~_BV(PD0) & ~_BV(PD5) ;conv_segmen(angka3);break;}case 4 :{ conv_segmen(10);PORTD |= _BV(PD5);PORTD &= ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD0) ;conv_segmen(angka4);segstep=0;break;}}}SIGNAL (SIG_INT0){number++;}void tombol(void){cli();conv_segmen(10);
sei();kalibrasi++;if (kalibrasi == 6) kalibrasi=1;eeprom_write_byte((uint8_t*)10, kalibrasi);_delay_ms(200);
DDRD &= ~_BV(PD3) ; // tombol}void baca_eeprom(void){kalibrasi = eeprom_read_byte((uint8_t*)10);if(kalibrasi == 0xFF) kalibrasi=3;}int main(void){GIMSK |= (1<<INT0);MCUCR |= (1<<ISC01)| (1<<ISC11); //fall edgeDDRD |= _BV(PD0) | _BV(PD1) | _BV(PD4) | _BV(PD5) ; // seg select
if(bit_is_clear(PIND, PD3) )DDRB |= _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) ; // seg a,b,c,d,e,f,ginit_ctr();init_ctr1();baca_eeprom();sei();while(1){
}}