Jadi jika khawatir siaran digital parabolanya diacak maka jalur UHF nya bisa juga di gabungkan menggunakan multiswitch + diplexer.
Tampilkan postingan dengan label tutorial. Tampilkan semua postingan
Tampilkan postingan dengan label tutorial. Tampilkan semua postingan
Jumat, 23 Maret 2018
[Tutorial] Membangun System Distribusi TV Satelit Ke Banyak TV Untuk Kos2an / Hotel /Kantor
Jika pembaca pernah menginap di hotel, tiap kamar pada umumnya dilengkapi perangkat televisi. Siaran yg disajikan beragam, ada hotel yg hanya menampilkan siaran tv lokal dan ada juga hotel yg lebih bagus menyajikan siaran televisi luar negeri FTA / gratis maupun berbayar. Siaran ini diambil dari parabola dan disebarkan melalui perangkat MATV / CATV alias tv kabel analog. Pernah suatu ketika penulis menginap di hotel yg bekerjasama dengan Telkom / Indihome dan siaran USEETV via iptv yg dipasang di tiap kamar, tentunya STB atau receiver useetv ada menancap dibelakang TV nya. Bayangkan saja jika kamar hotel berkisar 50 kamar, berapa biaya langganan bulanan yang harus dikeluarkan ?
Beberapa tahun yg silam penulis pernah mendapatkan proyek pemasangan software display informasi di sebuah hotel. Software ini akan digunakan sebagai konten dari salah satu channel informasi di hotel tersebut. Perangkat pada gambar diatas dinamakan HeadEnd CATV untuk hotel yg terdiri dari sumber siaran dari receiver parabola , kemudian menuju ke RF modulator - combiner - dan diakhiri dengan power amplifier di setiap titik yg dianggap kabelnya kejauhan dan melemah penerimaannya. Hasil dari siaran TV di kamar kualitasnya sangat diluar harapan jika berada di kamar yg jauh dari "booster" dan si teknisi mengeluh kalau beberapa titik terdapat noise yg menyebabkan siaran bersemut dan berbayang.
Dengan modulator RF untuk MATV analog, jumlah siaran maksimal tidak bisa lebih dari jumlah ch TV pada spektrum VHF - UHF atau jumlah channel pesawat televisi analog yang umumnya berjumlah 60. Itupun jika dipikir-pikir untuk membuat 60 ch dibutuhkan perangkat penerima/decoder + RF Modulator parabola di perangkat HeadEnd berjumlah 60 juga . Akan menjadi kurang ekonomis semisal untuk hotel atau kos - kosan yg berkamar 20 , bisa dibayangkan berapa dana yg dibutuhkan untuk 60 receiver dan modulator? Jika mengurangi channel takutnya kualitas layanan ke hotel dianggap kurang lengkap.
BAGAIMANA KALAU RECEIVER NYA SAJA YG DIBAWA KE KAMAR ?
Perangkat diatas dinamakan "MULTI SWITCH" yang berfungsi untuk membagi sinyal dari LNB ke beberapa receiver. Umumnya dipasaran terdapat 2 jenis yaitu "passive" dimana tegangan suply yg digunakan berasal dari receiver dan cocok untuk distribusi di rumah yg jarak antar receivernya tidak jauh. Sedangkan tipe lainnya adalah "Active" dimana power supply nya tersendiri dan cocok untuk pemakaian dengan banyak receiver dan jarak distribusi cukup panjang. Jenis yg lainnya adalah "Cascade-able" yg dimaksudkan nantinya sinyal LNB dari MultiSwitch ini dapat di "Repeat ulang" ke MultiSwitch yg lainnya (secara seri). Sehingga yg cascade-able dapat menghemat penggunaan Parabola dan tentunya lebih mudah pengaturan perkabelannya karena dapat dipecah-pecah semisal pemasangan multiswitch yg berbeda di tiap lantai gedung. Ini lebih mudah mengaturnya daripada terpusat di satu ruangan yang bisa jadi akan menyusahkan pengaturan kabel coaxialnya.
Untuk mempersingkat bahasan, saya akan ambil contoh proyek yg baru saja saya kerjakan yaitu system distribusi TV untuk kos2an elite dengan 20 TV. Mari kita rancang terlebih dahulu diagram system distribusinya.
PERSIAPAN PERANGKAT :
1. PARABOLA jaring 7 feet.
Dipilih 7 feet karena alasan ekonomis dan 2 satelit yg akan dituju cukup bagus untuk 7 feet. Dipasaran parabola jaring 7 feet paling laris adalah Venus AL7201 new .
2. LNB Dual Out - Polaritas Terpisah / Dual out
Multiswitch akan berfungsi sebagai pemilih / switching polaritas dari masing-masing siaran dari banyak reseiver, sehingga dibutuhkan LNB khusus yg polaritas V dan H nya berada pada port berbeda. Karena satelit yg kita akan tuju adalah palapa dan telkom maka dibutuhkan 2 LNB jenis ini. Dikarenakan kemampuan multiswitch sudah semakin bagus maka sekarang cuukup dibutuhkan LNB 2 out saja
3. Braket / Scalar Ring twin LNB.
Saya pilih Scalar twin LNB model baru yg tanpa pemisah atau ada jalur kosonh ditengahnya...kenapa? Keuntungannya saya jelaskan nanti.
4. Multiswitch 5 x 8/16/24/32
Kebetulan saja yang 5 x 24 stok lagi kosong jadi saya menggunakan yg 5 x 32 . Kenapa 5 input? karena 4 input untuk LNB ke satelit palapa & telkom dan 1 input untuk antena UHF.
Jadi jika khawatir siaran digital parabolanya diacak maka jalur UHF nya bisa juga di gabungkan menggunakan multiswitch + diplexer.
Jadi jika khawatir siaran digital parabolanya diacak maka jalur UHF nya bisa juga di gabungkan menggunakan multiswitch + diplexer.
5. Kabel Coaxial, F Konektor, Sambungan F conector, Panel Box dan peralatan pertukangan lainnya
PERAKITAN dan TREKING ...
bersambung ke halaman berikut : KLIK DISINI Ya...
Tertarik memasang parabola distribusi ke kamar hotel/ kos/ kantor Dengan LOW BUDGET?
Hubungi kontak kami : 08155737755 - 081331339072 (WA)
Rabu, 19 November 2014
[TUTORIAL & SCRIPT BREAKDOWN] RPM - TACHOMETER HONDA dengan ATTINY2313
Akhirnya balik lagi ke blog ini setelah beberapa waktu vakum. Dan kali ini menjawab beberapa request yang masuk untuk membahas lebih lanjut mengenai RPM - TACHOMETER untuk sepeda motor yang pernah dibahas disini . Sebenernya jika selalu mengikuti perkembangan blog ini maka tidak terlalu susah asal dasar pengetahuan timer dan interupt nya lengkap.
Intinya pada project ini adalah mendeteksi RADIASI pulsa CDI ke BUSI dan dimasukkan ke PIN INTERRUPT dan kemudian dihitung jumlah pulsa yang muncul vs waktu. Dan didapatkanlah RPM yang diinginkan. Kali ini kita juga akan membuat animasi graph / level sehingga tidak bosan dengan angka-angka saja.
Perhatikan skematik dibawah ini dan bahan2nya bisa dilihat dari gambar berikut (klik untuk gambar lebih jelas)
Jangan lupa juga untuk menyediakan motor yang akan di "HIAS" yang kali ini meminjam motor anak buah saya yaitu HONDA SUPRA VIT. Saya memiliki pengalaman jika bebek honda lebih bocor sinyal CDI nya ketimbang motor lain. Jadi jika menggunakan motor lain maka disesuaikan pemilihan resistor sebelum transistor pembaca pulsa (2N3904) dan pengalaman lainnya ketika menggunakan sepeda motor Yamaha Vega maka transistor yg digunakan adalah PNP 2N3906 dengan tanpa menggunakan resistor pada basis dan VCC ke EMITOR sedangkan INTERUPT ke COLECTOR (dibalik).
Langsung aja kita bahas script nya biar ga bingung, agak panjang tapi ga rugi kok
>>>HEADER<<
#define F_CPU 1000000UL // sesuaikan clock yang digunakan !!
#include <avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include <inttypes.h>
#include <avr/interrupt.h>
// ini untuk animasi kata awal, ubah sesuai keinginan atau hapus jika tidak mau
uint8_t angka1=16 ;
uint8_t angka2=17 ;
uint8_t angka3=20 ;
uint8_t angka4=15 ;
uint8_t segstep=0; // untuk pindah segmen
uint8_t kalibrasi=3; // kalibrasi awal
uint8_t valid=0; // variabel untuk mengatasi noise ke tombol
int number=0; // variabel menyimpan jumlah counter
>>>PENERJEMAH ANGKA ke SEGMEN<<
void conv_segmen(uint8_t digit)
// Rutin ini merubah angka dan animasi ke segmen
{
switch (digit)
{
//angka biasa
case 0 :
{
PORTB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB5); //PORT YG NYALA
PORTB |= _BV(PB6) ; //PORT YG MATI
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 : //kosong
{
PORTB |= _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) ;
break;
}
//11 - 14 khusus untuk animasi level
case 11 :
{
PORTB &= ~_BV(PB4);
PORTB |= _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB5) | _BV(PB6);
break;
}
case 12 :
{
PORTB &= ~_BV(PB4) & ~_BV(PB2);
PORTB |= _BV(PB0) | _BV(PB1) | _BV(PB3) | _BV(PB5) | _BV(PB6);
break;
}
case 13 :
{
PORTB &= ~_BV(PB4) & ~_BV(PB2) & ~_BV(PB5);
PORTB |= _BV(PB0) | _BV(PB1) | _BV(PB3) | _BV(PB6) ;
break;
}
case 14 :
{
PORTB &= ~_BV(PB4) & ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB5);
PORTB |= _BV(PB0) | _BV(PB3) | _BV(PB6) ;
break;
}
// kebetulan nama pemilik motor seperti ini, ubah sesuai keinginan
case 15 : //r
{
PORTB &= ~_BV(PB6) & ~_BV(PB4) ;
PORTB |= _BV(PB0) | _BV(PB1) | _BV(PB3) | _BV(PB2) | _BV(PB5) ;
break;
}
case 16 : //i
{
PORTB &= ~_BV(PB4);
PORTB |= _BV(PB0) | _BV(PB1) | _BV(PB3) | _BV(PB2) | _BV(PB5) | _BV(PB6) ;
break;
}
case 17 : //b
{
PORTB &= ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB5) & ~_BV(PB2) & ~_BV(PB6);
PORTB |= _BV(PB0) |_BV(PB1) ;
break;
}
case 18 : //y
{
PORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB5) & ~_BV(PB6);
PORTB |= _BV(PB4)| _BV(PB0);
break;
}
case 19 : //u
{
PORTB &= ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4) ;
PORTB |= _BV(PB1)| _BV(PB0) | _BV(PB5) | _BV(PB6);
break;
}
case 20 : //0
{
PORTB &= ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB2) & ~_BV(PB6);
PORTB |= _BV(PB0) |_BV(PB1) |_BV(PB5) ;
break;
}
}
}
>>>ANIMASI LEVEL RPM<<
void animasi(uint8_t posisi)
{
switch(posisi) {
case 0 :{ angka4=10; angka3=10 ; angka2=10; angka1=10;
break; }
case 1 :{ angka4=11; angka3=10 ; angka2=10; angka1=10;
break; }
case 2 :{ angka4=12; angka3=10 ; angka2=10; angka1=10;
break; }
case 3 :{ angka4=12; angka3=11 ; angka2=10; angka1=10;
break; }
case 4 :{ angka4=12; angka3=12 ; angka2=10; angka1=10;
break; }
case 5 :{ angka4=12; angka3=12 ; angka2=11; angka1=10;
break; }
case 6 :{ angka4=12; angka3=12 ; angka2=12; angka1=10;
break; }
case 7 :{ angka4=12; angka3=12 ; angka2=12; angka1=11;
break; }
case 8 :{ angka4=12; angka3=12 ; angka2=12; angka1=12;
break; }
case 9 :{ angka4=13; angka3=12 ; angka2=12; angka1=12;
break; }
case 10 :{ angka4=14; angka3=12 ; angka2=12; angka1=12;
break; }
case 11 :{ angka4=14; angka3=13 ; angka2=12; angka1=12;
break; }
case 12 :{ angka4=14; angka3=14 ; angka2=12; angka1=12;
break; }
case 13 :{ angka4=14; angka3=14 ; angka2=13; angka1=12;
break; }
case 14 :{ angka4=14; angka3=14 ; angka2=14; angka1=12;
break; }
case 15 :{ angka4=14; angka3=14 ; angka2=14; angka1=13;
break; }
case 16 :{ angka4=14; angka3=14 ; angka2=14; angka1=14;
break; }
default :{ angka4=14; angka3=14 ; angka2=14; angka1=14;
break; }
}
}
>>>INISIALISASI COUNTER<<
void init_ctr(void) //COUNTER 0 8 BIT untuk pindah kolom 7 segmen
{
TCCR0A |= (1 << WGM01); // Configure timer 0 for CTC mode
TIMSK |= (1 << OCIE0A); // Enable CTC interrupt
OCR0A = 50; // Set CTC compare value till blink disapear at 1MHz AVR clock, with a prescaler of 64
TCCR0B |= (1 << CS01)|(1 << CS00); // Start timer at Fcpu/64
}
void init_ctr1(void) //COUNTER 1 untuk penghitung pulsa saat 600ms
{
TCCR1B |= (1 << WGM12); // Configure timer 1 for CTC mode
TIMSK |= (1 << OCIE1A); // Enable CTC interrupt
OCR1A = 586; //compare the CTC A = 600ms =586
TCCR1B |= ((1 << CS10) | (1 << CS12)); // Start timer at Fcpu/1024
}
>>>INTERRUPT TIMER<<
ISR(TIMER1_COMPA_vect) //interrupt timer 1 (16 bit) untuk capture jumlah pulsa
{ uint16_t rpm,anime; //variabel
anime=0;
rpm=0;
switch(kalibrasi) { //Pemilih 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; }
case 6 :{
anime=1;
break; }
case 7 :{
anime=2;
break; }
}
//Pemilih antara angka rpm atau animasi level
switch(anime) {
case 0 : { //ANGKA RPM
OCR1A = 586;
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;
break ; }
case 1 : { //ANIMASI MODE 1
OCR1A = 100;
animasi(number/10);
break ; }
case 2 : { //ANIMASI MODE 2
OCR1A = 100;
animasi(number/50);
break ; }
}
number=0;
}
ISR(TIMER0_COMPA_vect) // timer 0 (8 bit) untuk pindah kolom 7 segmen
{
//tiap segmen yg akan dinyalakan akan diberikan logic High
segstep++;
switch(segstep) {
case 1 :{ conv_segmen(10);
PORTD |= _BV(PD0);
PORTD &= ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD5) ;
conv_segmen(angka4);
break;
}
case 2 :{ conv_segmen(10);
PORTD |= _BV(PD1);
PORTD &= ~_BV(PD0) & ~_BV(PD4) & ~_BV(PD5) ;
conv_segmen(angka3);
break;
}
case 3 :{ conv_segmen(10);
PORTD |= _BV(PD4);
PORTD &= ~_BV(PD1) & ~_BV(PD0) & ~_BV(PD5) ;
conv_segmen(angka2);
break;
}
case 4 :{ conv_segmen(10);
PORTD |= _BV(PD5);
PORTD &= ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD0) ;
conv_segmen(angka1);
segstep=0;
break;
}
}
}
>>>COUNTER INTERRUPT dari BUSI<<
SIGNAL (SIG_INT0) //INTERRUPT 0 menghitung pulsa dari radiasi CDI vs BUSI
{
number++;
}
>>>TOMBOL<<
void tombol(void)
{
if(bit_is_clear(PIND, PIND3)) //pembacaan pada pin D3
{ valid++; //validasi penekanan
_delay_ms(10);
}
if( valid >= 50) //jika melebihi noise motor/getaran, ubah suai nilai ini
{
valid=0;
kalibrasi++; //ubah kalibrasi
if (kalibrasi >= 8) kalibrasi=1;
conv_segmen(10);
//Menulis nilai kalibrasi ke EEPROM
eeprom_write_byte((uint8_t*)20, kalibrasi);
_delay_ms(500);
}
}
>>>MEMBACA EEPROM nilai KALIBRASI<<
void baca_eeprom(void)
{
kalibrasi = eeprom_read_byte((uint8_t*)20);
if(kalibrasi == 0xFF) kalibrasi=3;
}
>>>MAIN PROGRAM<<
int main(void)
{
//Inisialisasi Interrupt
GIMSK |= (1<<INT0) ; // inetrupt untuk hitung pulsa busi
MCUCR |= (1<<ISC01)| (1<<ISC11); //fall edge
//Inisialisasi PIN ATTINY2313
DDRD |= _BV(PD0) | _BV(PD1) | _BV(PD4) | _BV(PD5) ; // segmen select / common scans
DDRB |= _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) ; // seg a,b,c,d,e,f,g
DDRD &= ~_BV(PD3) ; // Input kalibrasi
init_ctr(); //hidupkan COUNTER0
sei();
_delay_ms(1000);
//tampilan kata ke 2, sesuaikan dengan kebutuhan atau hapus jika tidak mau
angka1=16 ;
angka2=1 ;
angka3=19 ;
angka4=18 ;
_delay_ms(1000);
init_ctr1(); //hidupkan COUNTER 1
baca_eeprom(); // baca nilai kalibrasi
//muter terussssss
while(1)
{
tombol();
}
}
videonya....seperti dibawah ini
tips: Tegangan pada lampu depan/ langsung dari coil bisa berlebih jika akimu rusak/habis. Jadi usahakan mencari sumber tegangan yg tidak merusak regulator 7805
Selamat Mencoba
Selasa, 24 Juni 2014
[ PROJECT ] Intercom PTT (push to talk) memanfaatkan kit amplifier
INTERCOM ...jadul amat sih boz...kata salah satu teman di kantor saya yg baru. Tapi capek juga kalau mesti turun tangga atau menghabiskan urat tenggorokan 'teriak' kalau ada keperluan mendesak dari lantai 1 ke lantai 2. Masalah yang agak terlalu "gampang" bagi penggemar elektronika...tinggal beli kit intercom atau wireless handy talkie. Ehhh ternyata di toko elektronika sebelah adanya cuman kit preamp mic dan kit amplifier OCL 100 watt. kata yang jualan " Jadul amat mas cari intercom, napa ga pake HP aja ?" ...iya juga sihh..di playstore android ada juga app nya kok dengan search kata kunci "PTT (push to talk)"...masa bodooo...kita ini orang elektronika...solder aja !!
Dan gambar diatas menunjukkan daftar belanjaan kami. Ada kit preamp + mic condenser, kit amplifier, push button DPDT, speaker kecil dan adaptor 12v. Mulailah merangkai dengan sangat gampang , tujuan pertamanya mengetest mic --> preamp --> ampli --> speaker ...setelah tersambung hasilnya mengecewakan, mic condensernya kurang sensitif terhadap suara atau mungkin pre-amp nya kurang gede. Sang arsitek yg bernama deni pun ga kalah akal dengan bimbingan master aisi555 kemudian dimanfaatkanlah speaker sebagai microphone. Kok bisa bos ? ya bisa lah..wong dalemannya mic sama aja dengan speaker.
Bagaimana dengan koneksi dan perkabelan nya ? ya perhatikanlah dengan seksama gambar dibawah ini, warna-warni dari koneksi menunjukkan hubungan yang berbeda dan hanya dibutuhkan 5 buah pasang kabel. Power suply dan bagian preamp/ampli bisa diletakkan dimana saja.
Klik pada gambar dibawah biar tambah jelas
Keterangan:
- Speaker B dan switchnya di letakkan berjauhan dengan rangkaian utama, menggunakan sambungan 5 kabel ( 12v adaptor, suply 12v ke kit, input Mic preamp, output Amplifier, dan Ground)
- Hubungkan kabel dengan warna sama dan nama yg sama. Hanya gunakan 1 Baterai/adaptor saja, jangan salah ya ... yg kodenya panah 12V itu nyambung .
- Tekan switch untuk berbicara didepan speaker, otomatis speaker lawan akan terdengar suara juga
Prinsipnya adalah memanfaatkan switch DPDT untuk memilih speaker apakah sebagai input atau output dan juga memutus arus supply dari adaptor ke pre-amp/amplifier (agar lebih awet). Video demonya dapat dilihat pada video youtube berikut :
Jika alat ini diberikan box yg bagus bisa dipasang di depan gerbang/ pintu disebelah bel pintu sehingga bisa menyapa tamu yang akan berkunjung dan bisa saja mengusir marketing kartu kredit yg iseng ke rumah. Kalau ditambah kamera video kecil bagus juga tuh.
TIPS :
TIPS :
- Untuk menghasilkan suara lebih jernih tanpa dengung maka pada output adaptor cukup diberi regulator tegangan 78xx (dalam contoh ini 7812), kecuali adaptornya memang sudah bagus outputnya semisal adaptor switching.
- Switch DPDT seperti contoh yg digunakan aslinya memiliki latch/kunci atau kata lain bukan toggle yg akan kembali setelah di lepas. Jadi modifikasi kawat/besi pengait dengan menariknya dan kemudian cukup diletakkan disamping untuk menjadikannya toggle switch.
SELAMAT MENCOBA !!
.
Senin, 09 Juni 2014
[Tutorial] 4 Led Matrix dengan Mega8535/16
Bahan-Bahan:
- ATMega 8535/16/32
- 4 buah Led matrix 7x5
- 3 bh Resistor 10K
- 2 Tombol tactile switch
- Breadboard / projectboard
- Kabel secukupnya
Dasar yg harus dikuasai:
Dasar I/O, Led Matrix Lovehurt , Counter/Timer
Skematik :
Klik untuk lebih jelas, baca keterangan pada gambar
Script Jam Led matrix
#define F_CPU 1000000UL //ubah sesuai clock micro #include <avr/io.h> #include <util/delay.h> #include <avr/eeprom.h> #include <inttypes.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <string.h> //ARRAY UNTUK MENYIMPAN DATA ANGKA const char textset[] PROGMEM = {0x7f, 0x41, 0x7f, //0 0x80, 0x80, 0x7f, //1 0x79, 0x49, 0x4f, //2 0x49, 0x49, 0x7f, //3 0x0f, 0x08, 0x7f, //4 0x4f, 0x49, 0x79, //5 0x7f, 0x49, 0x79, //6 0x01, 0x01, 0x7f, //7 0x7f, 0x49, 0x7f, //8 0x4f, 0x49, 0x7f, //9 }; char titik_dua = 0x14; // : char blk = 0x80; // BLANK char fulltext[22] ; //ARRAY TAMPILAN led matrix char detik,menit,jam; //variabel jam void cleartext(void) // MEMBERSIHKAN datanya menjadi kosong { uint8_t i; for(i=0 ; i <20 ; i++) { fulltext[i] = 0 ; } } void ubah_angka(char angka1, char angka2, char angka3, char angka4) { //routine mengubah angka waktu ke tampilan led matrix uint8_t a,b; //jam b=angka1*3; for(a=b; a<b+3; a++) strncat_P(fulltext,&textset[a],1); //spasi strncat(fulltext,&blk,1); b=angka2*3; for(a=b; a<b+3; a++) strncat_P(fulltext,&textset[a],1); strncat(fulltext,&blk,1); strncat(fulltext,&blk,1); // untuk tampilan titik dua berkedip if(detik%2 == 0)strncat(fulltext,&titik_dua,1); else strncat(fulltext,&blk,1); strncat(fulltext,&blk,1); strncat(fulltext,&blk,1); //menit b=angka3*3; for(a=b; a<b+3; a++) strncat_P(fulltext,&textset[a],1); strncat(fulltext,&blk,1); b=angka4*3; for(a=b; a<b+3; a++) strncat_P(fulltext,&textset[a],1); } //routine untuk scanning & menulis ke led matrix void tulis_text(void) { uint8_t a; int b,speed; a=0; speed=5;//UBAH NILAI speed sesuai kedip dan kecerahan yg diinginkan while(a<21) { for(b=0;b<speed;b++ ) { if(a<8 ) { PORTD = ~(1<<a) ; PORTC =0b11111111; PORTB =0b1111; } else if(a>=8 && a<16) { PORTC = ~(1<<(a-8)) ; PORTD =0b11111111; PORTB =0b1111; } else if(a>=16 && a<21) { PORTB = ~(1<<(a-16)) ; PORTD =0b11111111; PORTC =0b11111111; } PORTA=fulltext[a]; _delay_us(50); PORTA=0x80; //biar tidak berbayang } a++; } } ISR(TIMER1_COMPA_vect) //vector interupt untuk 1/2 detik { detik++; //dibuat 1/2 detik agar mudah menampilkan : kedap kedip if(detik==120) // 1 menit { menit++; if(menit==60) //1 jam { jam++; if(jam==24)jam=0; // 1 hari menit=0; } detik=0; } cleartext(); ubah_angka(jam/10, jam%10, menit/10, menit%10); //tampilkan } void init_timer(void) { TCCR1B |= (1 << CS11)|(1 << CS10); // Set up counter dengan prescale 64 //Baca datasheet untuk mencari konfigurasi prescaler micro yg sesuai TCCR1B |= (1 << WGM12); // Configure timer 1 for CTC mode TIMSK |= (1 << OCIE1A); // Enable CTC interrupt OCR1A = 7812; // nilai atas dari TCNT1, untuk perhitungan 1 detik sei(); //hidupkan interupt } int main(void) { //bagian ini sesuaikan dengan port micro yg kamu gunakan DDRA = 0b11111111; // portA = data text dot matrix DDRC = 0b11111111; //scanning kolom DDRD = 0b11111111; //scanning kolom DDRB = 0b11001111; //scaning, PB5 & PB4 sebagai tombol jam = 10; menit = 23; init_timer(); while(1) { tulis_text(); //ini untuk pembacaan tombol if (bit_is_clear(PINB, PINB4)) // membaca tombol jika port input B#4 di clear LOW / 0 { menit++; if(menit>=60) menit=0; _delay_ms(200); } if (bit_is_clear(PINB, PINB5)) // membaca tombol jika port input B#5 di clear LOW / 0 { jam++; if(jam>=24) jam=0; _delay_ms(200); } } return 0; }
Hasil
SELAMAT MENCOBA
.
Minggu, 08 Juni 2014
Dukun Fusebit Mengalahkan Fusebit Doctor !
Pernah mengalami masalah ic tidak response setelah mengubah fusebit clock pada microcontroler AVR ?
Anda lupa clock yg digunakan atau Xtal yang akan disolder entah kemana ?
Duit cekak di penghujung bulan sementara tugas sudah deadline ?
Duit cekak di penghujung bulan sementara tugas sudah deadline ?
DUKUN FUSEBIT AKAN MEMBANTU ANDA !
Anda tidak perlu menggunakan Fusebit Doctor yg dijual dipasaran atau rangkaian njlimet lainnya
Cukup Menggunakan Praktek dasar timer 555 yang ada disini
Dengan Menggunakan Rumus Frequency = 1.44 / [C*(R2 + 2*R1)]
Maka buatlah clock dengan frekuensi 500khz- 1Mhz dan hubungkan dengan kaki output (3) dari timer 555 menuju XTAL1 pada ic microcontroller AVR anda.
Putar-putar VR/ Trimpot sehingga memiliki resistansi berkisar 20k - 30 k ohm dan hubungkan avr ke isp programmer seperti biasa ( disarankan menggunakan stk500/avrisk mk2, rangkai micro seperti biasa dan jangan lupa di beri vcc/gnd/pull up di rst). Jika Read signature berhasil maka lakukan perubahan Fusebit seperti biasa (ubah ke default internal RC saja)
Contoh ubah fusebit di avrstudio 4
Syarat dan ketentuan:
- IC microcontroller dalam keadaan BAIK, hanya fusebit clock nya saja yg salah atau lupa
- Port SPI masih dalam posisi ENABLE, jika tidak maka perlu HVPP (high Voltage Parallel Programming) atau menggunakan universal programmer (All-7/All-100) yg biasanya ada di toko yg melayani pengisian EEPROM Player DVD/TV
TUNGGU APALAGI ...
SELAMAT MENCOBA !!
Selasa, 18 Maret 2014
[TUTORIAL] Clinometer (pengukur ketinggian) Sederhana Memanfaatkan ADC
Persiapan sebelum memulai project :
Bahan-bahan yang dibutuhkan :
- Minimum System / ATmega 8535/ ATmega 16
- Display LCD 16 x 2
- Potensiometer linear (nickel) 10K ohm(2 buah)
- Resistor 1K (2 buah)
Project ini adalah request dari anak SMA yang mendapatkan tugas matematika dimana gurunya cukup "Gila" untuk menantang anak didiknya membuat alat clinometer atau pengukur ketinggian. Sang murid mencari di google dan didapatkan rangkaian yg menggunakan acelerometer tapi kendalanya harga yang mahal dan dia pun kesulitan mengerjakannya. Solusi saya cukup sederhana dengan memanfaatkan putaran sudut yg dikonversikan ke putaran potensiometer (variable resistor) yang kemudian dirubah ke dalam level tegangan dan dibaca ADC.
Gambar diatas merupakan ilustrasi trigonometri dari sebuah clinometer dengan mencoba memanfaatkan rumus trigonometri. Keuntungan rumus diatas adalah tidak perlu menentukan jarak pengamat ke benda yang diukur,akan tetapi karena mengandalkan rumus tangen maka dari grafik tangen berikut terjadi sedikit anomali pengukuran jika sudut mendekati kelipatan 90 derajat, dimana tangent 90 adalah tak berhingga !.
grafik tangen yang tidak linear sedikit mempengaruhi keakuratan
Pemilihan potensiometer yang akan digunakan sebagai penerjemah dari sudut ke tegangan (menggunakan prinsip pembagian tegangan) juga perlu diperhatikan karena pada umumnya potentiometer yg dijual dipasaran adalah potentiometer audio yg bersifat logaritmik. Jadi potentiometer yang dipilih adalah berjenis "wire wound" atau yang umum di pasaran bernama "potensiometer nikel".
Output dari project kali ini menggunakan lcd 16x2 yang akan menampilkan nilai sudut alpha, beta dan nilai hasil pengukuran ketinggian.
Perputaran sudut pengukuran vs tegangan yg dihasilkan dapat menggunakan rumus pembagian 10 bit adc (0 - 1023) sehingga didapat sudut yang mewakili per bit. Tentunya potensiometer tidaklah terlalu linear karena banyak faktor dan untungnya kita hanya menggunakan sudut 0-90 derajat saja untuk alpha maupun beta. Saya mendapatkan untuk sudut 0-90 dapat menggunakan pembagian nilai bulat per bit ADC yaitu "pembacaan adc / 3". Jadi sesuaikan dulu dengan respon nilai potensiometer yang kamu punya dengan sudut yang dihasilkan.
Untuk pengukuran tangen pada WinAvr akan digunakan library "math.h" dimana pengukuran sudut akan dirubah menjadi satuan radian. Rumus yang digunakan tentunya akan sangat memakan memory akibat nilai "float" yang digunakan. Hal ini kita akali saja dengan menggunakan unsigned integer 32 bit dengan pendekatan seperti berikut :
- tana = tan((M_PI*adcalpha)/180)*1000;
- tanb = tan((M_PI*adcbeta)/180)*1000;
- tinggi= (tanb/tana) + 1 ;
Kita ingat juga konversi dari derajat ke radian digunakan rumus :
- RADIAN = (PI * sudut ) /180
Pengali 1000 pada rumus diatas digunakan untuk mendapatkan nilai float (pecahan / koma) menjadi ratusan sehingga pembagian menjadi agak bulat.
Skematiknya adalah sebagai berikut ini :
klik untuk memperjelas
Script selengkapnya seperti dibawah ini, diasumsikan bahwa tinggi pengamat 1 meter :
#define F_CPU 4000000UL#include <string.h>#include <avr/io.h>#include <util/delay.h>#include <avr/eeprom.h>#include <math.h>#include "lcd.h"char derajat = 0xDF; // karakter derajatvoid reverse(char s[]) //rutin untuk merubah angka ke ascii{int c, i, j;for (i = 0, j = strlen(s)-1; i < j; i++, j--){c = s[i];s[i] = s[j];s[j] = c;}}void itoa(uint16_t n, char s[])//rutin untuk merubah angka ke ascii
{uint16_t i;i = 0;do { // generate digits in reverse orders[i++] = n % 10 + '0'; // get next digit} while ((n /= 10) > 0); // delete its[i] = '\0'; // add null terminator for stringreverse(s);}void initADC() //inisialisasi ADC{ADMUX=(1<<REFS0);// Aref=AVcc;ADCSRA=(1<<ADEN)|(7<<ADPS0);}uint16_t ReadADC(uint8_t ch) //pembacaan ADC{//Select ADC Channel ch must be 0-7ch=ch&0b00000111;ADMUX|=ch;//Start Single conversionADCSRA|=(1<<ADSC);//Wait for conversion to completewhile(!(ADCSRA & (1<<ADIF)));//Clear ADIF by writing one to itADCSRA|=(1<<ADIF);return(ADC);}int main(void){uint16_t baca1,baca2,tana,tanb,tinggi;char dum;lcd_init(LCD_DISP_ON);//inisialisasi LCDlcd_clrscr(); //bersihkan LCDwhile(1){initADC();baca1=ReadADC(6) / 3; //baca alphaif(baca1 <90){ //jika hasil tidak lewat 90 derajatlcd_gotoxy(0,0);lcd_putc(224); //ascii alphalcd_puts(" =");itoa(baca1,&dum);lcd_puts(&dum);lcd_putc(derajat);lcd_putc(' ');}else{ //jika lebih 90 di warninglcd_gotoxy(0,0);lcd_putc(224);lcd_puts(" =max");}_delay_ms(100);initADC();baca2= ReadADC(5) / 3; //baca beta
if(baca2 <90){ // jika perhitungan < 90 derajatlcd_gotoxy(8,0);lcd_putc(226);lcd_puts(" =");itoa(baca2,&dum);lcd_puts(&dum);lcd_putc(derajat);lcd_putc(' ');}else{ //jika lebih 90 di warninglcd_gotoxy(8,0);lcd_putc(226);lcd_puts(" =max");}_delay_ms(100);lcd_gotoxy(0,1);if(baca1 <90 && baca2 <90){//PERHITUNGAN TINGGItana = tan((M_PI*baca1)/180)*1000;tanb = tan((M_PI*baca2)/180)*1000;tinggi= (tanb/tana) + 1 ;lcd_puts(" TINGGI:");itoa(tinggi,&dum);lcd_puts(&dum);lcd_puts(" m");lcd_puts(" ");}else{lcd_gotoxy(0,1);lcd_puts(" TINGGI: Error !");}}return 0;}
SELAMAT MENCOBA
Sabtu, 08 Februari 2014
[Tutorial] Remote Control dengan 38kHz Infra red Menggunakan NE555 dan HT12D/E
Semakin asyik dengan project non micro nih...ya tanpa micro biar orang yg sedikit jadul dan mungkin lemot (sorry ya) bisa berpartisipasi juga. Kali ini akan bermain dengan remote control berbasis inframerah, dimana ada sebuah modul Tx Rx 38khz saya beli di pasar genteng surabaya. Modul ini sangat simple dengan menggunakan pembangkit sinyal menggunakan IC favorit blog ini...timer NE555 !
38kHz Protocol for Infra Red
Ketika remote untuk televisi dikreasikan oleh zenith , para pemilik anjing peliharaan mengeluh karena anjing mereka terbangun atau menggonggong ketika ada yg memencet tombol remote. Saat itu frekuensi yg digunakan berupa audio ultrasonik diatas 20khz dan masih dapat didengar suaranya oleh anjing. Maka muncullah inovasi dari NEC dan Philips dengan menggunakan sinyal inframerah (yg tidak terlihat) dan frekuensi 36kHz-40kHz yg dipilih karena hampir tidak ada sumber alam yg menghasilkan atau terpengaruh oleh frekuensi di range ini.
Saya menjadi bingung ..kenapa harus dimodulasikan menjadi 38kHz, padahal jika led infra di ON OFF saja sudah dapat memberikan sinyal clock/data serial. Ahh biarkan saja ini menjadi sejarah para engineer di NEC dan Philips..sebaiknya saya cari aja perbedaan antara INFRA tanpa modulasi dan yang termodulasi melalui modul buatan Innovative Electronics (DT-IO Infra Tx/Rx). Rangkaiannya simple kok...
Modul Tx (klik biar lebih jelas)
Modul transmitter menggunakan IC 555 sebagai pembangkit frekuensi dan IC TTL 7400 sebagai pembalik logika dari input yg diberikan. Input bisa diberikan dengan tegangan beragam baik TTL/CMOS/RS232. Perhatikan jumper harus dipasang sesuai dengan mode aktif dari sinyal input dan output infra red yg diinginkan.
Modul Rx (klik biar lebih jelas)
Komponen utama adalah phototransistor yg khusus digunakan untuk komunikasi infra merah yg umumnya ditemukan diremote televisi berkode TSOP4838. Komponen lainnya hanya sebagai pembatas tegangan dan pembalik logika. Saya kemudian menyusun kedua modul ini diatas breadboard dan menggunakan inputan berupa tombol / switch tactile.
Untuk mencocokkan frekuensi dari oscillator 38khz menggunakan 555 maka perlu dikalibrasikan melalui trimpot kecil (digambar warna putih). Jika menggunakan oscilloscop maka simple aja ketika input di ground ( jumper posisi 1-2 semua) maka output dari kaki led infra bernilai 38khz. Jika tidak mempunyai oscilloscop maka cukup dengan memasang receiver dan output dihubungkan ke LED dan input transmiter di groundkan. Putar trimpot transmitter sampai led di receiver menyala tanpa kedip.
Rangkaian diatas merupakan infra merah tanpa modulasi dan output dari receiver bisa nyala kok ! Lalu apa bedanya ? coba deh pantulkan infra rednya dan jauhkan dari receiver, lihat mana yg masih diterima oleh TSOP4838. Tentunya yg masih nyaut adalah yg termodulasi 38kHz.
Ingat percobaan jam 6 digit yg dibahas di tulisan sebelumnya ? Ayo kita ganti saja input clock menggunakan penekanan tombol dari transmitter infra merah.
Dan hasil yang didapatkan bisa dilihat pada video youtube berikut
ENCODER/ DECODER with HT-12E / HT-12D
Nahh..inilah IC yg saya cari-cari selama ini dan akhirnya dijual juga di eltech pasar genteng surabaya. IC yg legendaris ini merupakan encoder dan decoder data serial yg siap pakai, dengan hanya menambahkan 1 komponen Rosc sebagai penentu frekuensi clock data serial. ADDRESS A0-A7 digunakan sebagai pemilih "Channel" dari rangkaian remote, sehingga untuk dapat berkomunikasi maka addres di kedua sisi haruslah sama. PIN AD8-AD11 pada sisi transmiter merupakan data 4 bit yg akan dikirim sat pin TE (14) mendapatkan GND. Semua pin memiliki pullup sehingga jika menginginkan logika HIGH cukup di ambangkan saja.
Bagaimana dengan pemilihan ROsc ? bacalah datasheet dan ikuti rumus nya sesuai grafik berikut :
Pilihlah Rosc yg menghasilkan frekuensi oscillator yg hampir sama , 5% kurang lebih tidak masalah. Kebetulan di rumah ada Resistor 2Mega Ohm lalu digunakan sebagai ROsc HT12E sehingga ROsc dari HT12D berkisar nilainya 56K ohm. Lanjut ke skematik yukkk...
klik untuk memperjelas
Pemilihan address menggunakan dip switch 8 pin, kemudian input data menggunakan tombol switch tactile yang hubungkan dengan dioda 1N4148 sehingga saat ditekan maka TE (transmit enable) juga terhubung ke ground. Ada penggunaan transistor NPN dan PNP pada output HT12E ini dimaksudkan untuk meningkatkan level logic (agak rendah tegangannya), karena yg saya gunakan adalah logic 1 yg akan mengkatifkan modul transmitter 38kHz ( Jumper di 2-3) . Jika transistor jenis ini susah didapatkan didaerah kamu dapat juga diganti dengan transistor NPN / PNP yg umum seperti 9012/9013.
Pada sisi receivernya input data berasal dari pin 4 (logika negasi, jumper lepas). Untuk kalibrasi 38khz maka ketika saat tombol transmitter ditekan maka led di pin 17 harus menyala. Dan hasilnya seperti video berikut:
Aplikasi yg mungkin dari tutorial ini adalah sebagai pengontrol lampu rumah, semisal dengan memanfaatkan IC decoder 4 to 16 (74LS154) sehingga output HT12D yang cuman 4 bit dapat dibuat menjadi 16 pin yg kemudian dihubungkan ke relay. Masih banyak kok aplikasi lainnya....
SELAMAT MENCOBA