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

Senin, 12 November 2012

INTERFACING KEYBOARD ke AVR (ATtiny) & OUTPUT ke DOT MATRIX



- LEVEL : ADVANCE
- BAHAN2 : AVR micro ( ATTINY 2313), KEYBOARD PS-2, DOTMATRIX , R 10K
- DASAR yg PERLU DIKUASAI : Basic I/O, Interupt dan menulis ke DOT MATRIX ( love hurts) silahkan baca disini



Pertama kita perlu mengetahui port keyboard PS2 itu seperti ini :


sedangkan pada input micro , umumnya menggunakan koneksi seperti ini :



dimana input 'clock' masuk ke pin interupt pada microcontroller, sedangkan pin 'data' masuk ke pin biasa dari AVR (bidirect). semua I/O di pull up dengan resistor 10k ke Vcc. Selanjutnya kita bahas dulu format transfer data saat ada penekanan tombol , gambarannya seperti ini :



jadi keyboard dapat mengirim data karakter ke micro, sedangkan micro mengirimkan setting keyboard. sehingga komunikasinya bidirectional

oke, selanjutnya kita perhatikan kode scan/hex dari pencetan tombol keyboard, tabelnya seperti ini :




setelah itu kita susun port ps 2 & port dot matrix dengan susunan I/O seperti ini :


==========potongan script di main(), lengkapi sendiri==============

//clock di interupt 0 (pin 6)

MCUCR |= (1<<ISC01) | (0<<ISC00); // falling edge int 0

GIMSK |= (1<<INT0);



//data keyboard di port PD3 (pin 7)

DDRD &= ~_BV(PD3) ;



//kolom dot matrix

DDRD |= _BV(PD0) | _BV(PD1) | _BV(PD4) | _BV(PD5) | _BV(PD6) ;



//data / baris dot matrix 

DDRB |= _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) ;



// output led buat ngecek ada pencetan  keyboard di PA0 (pin 4)

DDRA |= _BV(PA0);














kemudian yg ga kalah pentingnya adalah membikin databse/lookup table untuk scan code keyboard menjadi baris data dot matrix. (harap baca dulu cara menulis di dot matrix)




const char h_A[5] PROGMEM = {0x7e, 0x11, 0x11, 0x11, 0x7e}; //A

const char h_B[5] PROGMEM = {0x7f, 0x49, 0x49, 0x49, 0x36}; //B

const char h_C[5] PROGMEM = {0x3e, 0x41, 0x41, 0x41, 0x22}; //C

const char h_D[5] PROGMEM = {0x7f, 0x41, 0x41, 0x22, 0x1c}; //D

...... dst ....




jadi, tiap ada pemencetan tombol, maka pin clock dari keyboard akan menginterupt ( falling / turun dari 1-0) AVR dengan format seperti gambar diatas, sehingga script pada interuptnya berupa




SIGNAL (SIG_INT0) //routinre interupt INT0

{



if(clk > 1 && clk <10) //clock yg bermanfaat saja yg dibaca 



{ 

//pindahkan data dari PIN DATA keyboard ke memory

key[(clk - 2)] = ((PIND & _BV(PIND3)) >> PIND3);

 //nyalakan led penanda ada data dikirim keyboard

PORTA |= _BV(PA0);



}



clk++;   // tambahkan nilai variable clk tiap interrupt



if(clk == 12) //maksimum clock yg dikirim



{clk=1; 

PORTA &= ~_BV(PA0); //matikan led tanda data kosong



}



}


selanjutnya kita terjemahkan data dari memory array "key" kedalam bentuk hexa yg kemudian diterjemahkan dengan database metode "lookup"




int a;

char hurufnya[5];



//rumus merubah array key ke hexa scan code

 a= (128*key[7]) + (64*key[6]) + (32*key[5]) + (16*key[4]) + (8*key[3]) + (4*key[2]) + (2*key[1]) + key[0] ;





switch (a)        

  {

case 0x1C : strncpy_P(hurufnya,h_A,5); break;

case 0x32 : strncpy_P(hurufnya,h_B,5); break;

case 0x21 : strncpy_P(hurufnya,h_C,5); break;

case 0x23 : strncpy_P(hurufnya,h_D,5); break;

case 0x24 : strncpy_P(hurufnya,h_E,5); break;

case 0x2B : strncpy_P(hurufnya,h_F,5); break;

............dan seterusnya

default : strncpy_P(hurufnya,h_43,5);



  }



// selanjutnya ditampilkan di DOTMATRIX ( tampilkan per kolom)

//kolom 1

    PORTB = 0x80;

    PORTD &= ~_BV(PD0);

    PORTD |=  _BV(PD1) | _BV(PD4) | _BV(PD5) | _BV(PD6) ;

    PORTB = hurufnya[0];    

    _delay_ms(10);  

//kolom2

    PORTB = 0x80;

    PORTD &= ~_BV(PD1);

    PORTD |=  _BV(PD0) | _BV(PD4) | _BV(PD5) | _BV(PD6) ;

    PORTB = hurufnya[1];    

    _delay_ms(10);  

......dst.....


Masalahnya jaman sekarang udah jarang yang jual model PS/2 dan yang umum itu versi USB. Tinggal beli adapter nya aja...ehhh ternyata didalemnya ga ada rangkaian tambahannya loo...bikin aja sendiri



Jangan lupa untuk melakukan pull-up clock dan data dengan resistor 10K ke Vcc





hasilnya kalo udah mahir, seperti ini loooo....




code full bisa didapat disini
Share:

Senin, 01 Oktober 2012

DTMF - lebih lanjut dengan BCD to Decimal decoder

74LS154.jpg (500×500)
Untuk menghasilkan output yang lebih spesifik terhadap tombol maka diperlukan IC tambahan berupa decoder BCD ( kode desimal dalam biner ) yang akan mengeluarkan 1 output sesuai input binner yg di berikan. Output dari decoder 8870 adalah 4 bit binner dan selanjutnya dapat langsung di berikan ke input decoder BCD. Untuk 10 output ic yang digunakan adalah 74LS145 sedangkan untuk 16 output digunakan ic 74LS154.


(klik untuk memperbesar)


Dari truth table didapatkan bahwa output dari Q0 - Q9 adalah aktif LOW, dan memiliki susunan yang berbeda dengan truth table dari IC 8870. Angka 0 dari ic 8870 diterjemahkan sebagai angka desimal 10 (biner 1010) sehingga Q0 tidak akan pernah mengeluarkan output , sedangkan angka 1 yang diterjemahkan sebagai binary BCD "0001" akan mengaktifkan output Q1. Jadi maksimum output dengan  74LS145 adalah 9, sedangkan untuk 74LS154 dapat menghasilkan output yang lebih.

Kondisi output secara default dari ic 8870 adalah ter "kunci" atau LATCH pada posisi tombol terakhir yg diinputkan. Jadi jika ingin mendapatkan output yang TOGGLE atau momentary/ sementara semisal jika digunakan pada penekanan remote maka diperlukan suatu mekanisme seperti pada rangkaian skematik selengkapnya berikut :

(klik untuk memperbesar)

Dari rangkaian diatas, kita akan memanfaatkan output dari ic 8870 di pin 15 (StD) yang akan aktif high ketika ada input DTMF dan kembali low ketika tidak ada input. Pin 15 ini akan mengatur transistor NPN untuk ON atau OFF sehingga ketika tidak ada input maka sumber tegangan relay akan diputus . Saklar S1 merupakan saklar yang dapat digunakan untuk memilih mode LATCH atau TOGGLE. 



Ada yang tertarik membeli yang atas ? Box diatas merupakan remote jarak jauh via HP yang dipesen oleh rekan dari Kep. Riau dan digunakan untuk melakukan remote terhadap tombol receiver TV KABEL. Berbagai macam aplikasi lain juga dapat menggunakan alat ini. Jika tertarik silahkan kontak pemilik blog deh ....

SELAMAT MENCOBA





KONTAK :

HP: 085733889569 , 087882045949
Mail : ahocool@gmail.com
ym :ahokleng
fb: www.facebook.com/nyoman.yudi
twiter: @ahocool
lokasi: SURABAYA
PIN : 321477A8
Share:

DTMF - Praktek decoder 8870


Persiapkan bahan-bahan berikut:

1. Handphone atau pesawat telepon yg memiliki audio out/jack/headset out
2. IC decoder DTMF 8870
3. xtal 3.58Mhz atau yang mendekati
4. Resistor 100k (2), 1K (1) dan 300k (1)
5. Capacitor 100nF (2)
6. Transistor NPN (2n3906/2n2222/BC547/BD139)
7. Relay 5v/12v atau diganti Led
8. Sumber tegangan 5v , bisa menggunakan charger HP bekas atau bisa juga dengan menggunakan regulator 5v (liat pada skematik)


Sebelum  menuju ke rangkaian kita perhatikan gambar rangkaian dasar dekoder DTMF dari datasheet ic 8870 seperti berikut:



Bagian sebelah kiri kapasitor 0,1uF (100nF) merupakan input dari speaker/headset pesawat telpon (handphone). Jika terdapat sinyal audio yg sesuai dengan standar DTMF maka output Q4 - Q1 akan mengeluarkan 4bit BCD (binary coded decimal) yang sesuai. Output ini akan LATCH atau tersimpan sampai  ada perubahan nada DTMF. Output pin 15 (StD) akan memberikan nilai 1/high jika ada nada DTMF yg di berikan dan akan menjadi 0/low kembali jika tidak ada input. Berikut ini adalah tabel kebenaran dari ic CM8870:




Kita lanjutkan ke praktek , setelah bahan-bahan terkumpul maka kita akan menghubungkan komponen ke atas breadboard atau menyoldernya ke atas pcb lubang. Output dari percobaan ini bisa menggunakan relay atau pun hanya LED saja.

(klik untuk lebih jelas)

Hubungkan input dengan jack audio ke port headset handphone dan kemudian di "call " dari pesawat telpon lainnya. Jika ingin menjadikannya remote otomatis, maka aktifkan fungsi "AUTO ANSWER" yang hampir dimiliki oleh semua pesawat handphone. Untuk HP merek CROSS dapat disetting melalui MENU => USER PROFILE => HEADSET => CUTOMIZE => ANSWER MODE => AUTO.

Sesuai dengan truth table diatas, jika output yg kita gunakan adalah Q1 maka relay akan menyala jika keypad yang dipencet adalah 1,3,5 dst. Relay akan ON terus dan akan OFF jika tombol 2,4,6 dst dipencet. Pada pembahasan selanjutnya akan kita bahas decoder DTMF dengan memanfaatkan ic TTL BCD - Decimal sehingga dapat membedakan tiap dial/tombol yang dipencet.


SELAMAT MENCOBA 
Share:

DTMF - dasar signalling tombol telepon


DTMF ( Dual Tone Multi Frequency ) merupakan suatu cara pengiriman sinyal penekanan tombol telepon (Dial) dengan cara kombinasi penggabungan 2 nada. Sistem yg digunakan sama seperti prinsip scanning keypad dengan mengkombinasikan matrix baris dan kolom, dimana tiap penekanan dial akan menggabungkan 2 buah nada yg berbeda. Matrix baris dan kolom yang dipakai seperti berikut :


1209 Hz1336 Hz1477 Hz1633 Hz
697 Hz123A
770 Hz456B
852 Hz789C
941 Hz*0#D

Contohnya ketika menekan tombol 1 maka akan keluar gabungan nada 679 Hz dan 1209 Hz.


Selanjutnya sinyal suara ini dikirimkan ke sentral telepon dan kemudian diterjemahkan melalui perangkat telephony. Dengan semakin berkembangnya dunia elektronika maka sekarang ini dapat diperoleh chip decoder DTMF dengan harga yg sangat murah. Beberapa site di google juga memberikan cara untuk membuat DTMF decoder dengan perangkat elektronika diskrit OP-AMP sehingga banyak hobbier's elektronika menggunakan DTMF decoder sebagai remote jarak jauh.



Jika ingin melihat penjelasannya melalui video dibawah ini :



* courtesy of wikipedia


Share:

Senin, 27 Agustus 2012

SMS via AT COMMAND - Long (concatenate) SMS



Bagaimana jika sms yang akan dikirim melebihi 160 karakter ? Ya kita pecah aja SMS nya...dikirimnya 3 bagian. Tapi ntar yg baca bingung mana yg no 1 2 3 dst ...tenang, para engineer GSM menciptakan system SMS long / concatenate / bersambung , dimana tiap sms tetap dikirim perbagian  dengan tambahan header "UDH" yang menyatakan sms yg dikirim ini merupakan bagian dari ke berapa dari SMS yg panjang tadi.

Hal yg paling pertama menandakan bahwa SMS ini long sms adalah pada octet ke -2, yang pada sms biasa bernilai "11" dan pada long sms memiliki type "41". Kemudian 2 octet setelah nomer tujuan terdapat octet UDL (userdata length) dilanjutkan octet UDHL (header length, nilai selalu "05") + UDH sebanyak 5 octet

UDL adalah jumlah karakter(septet) yg dikirim, tapi  karena ada 7 octet tambahan maka maksimum karakter adalah 153 ( 160 = 153septet karakter + 7 header)

UDH terdiri dari 5 octet sebagai berikut :

00IEI -  Information element identifier , nilainya selalu 00
03IEDL - Information element data length, nilainya selalu 03
ABReference number, dimana SMS yg dipotong memiliki nilai yg sama, akan tetapi tidak boleh sama dengan bagian LONG SMS yang lainnya, sehingga sebaiknya nilainya di random untuk sms lainnya
02Octet yang menyatakan jumlah pemotongan SMS . 02 berarti sms ini memiliki 2 bagian
01Octet yang menunjukkan bagian / nomer urutan dari SMS. 01 berarti sms ini merupakan sms ke-1

selanjutnya diikuti oleh OCTET user data / SMS

Karena terjadi nilai start septet user data yg tidak genap pada bit ke 49 / 56 akibat jumlah octet dari UDHL+UDH = 6 * 8bit = 48 bit , maka perlu dilakukan proses PADDING 1 BIT ....nah loo ribet lagi nehh...tenang .... POLA nya seragam juga kok ....

Masih ingat dengan "hellohello" diubah menjadi bentuk PDU : E8 32 9B FD 46 97 D9 EC 37
Kemudian kita padding 1 bit ....apaan sih padding ? pokoknya geser2 deh..liat yang berikut :


(klik biar jelas)


Jadi logikanya seperti ini :

1. Ambil nilai dari konversi septet  gsm 7-bit ke Octet
2. Pasangan Octet pertama diambil bit ke 6 - 0 dan turunkan kebawah, karena octet pertama maka tambahkan dengan "0" pada akhir octet
3. Bit ke 7 (MSB) pasangan pertama kemudian digunakan sebagai "EKOR" pada hasil "pergeseran" pasangan berikutnya ...begitu selanjutnya sampai selesai.
4. Jika sisa MSB pasangan terakhir  =1, maka tambahkan octet "01" diakhir deretan octet. Jika sisa MSB pasangan terakhir adalah  0 dan jumlah SEPTET / KARAKTER/HURUF habis dibagi 8 (kelipatan 8) maka rangkaian octet perlu ditutup dengan octet "00". Tujunnya untuk menggenapkan perhitungan septet-octet


Action scriptnya seperti berikut :

function konversi(textnya:String, tipe:Number):String
{
var textbaru:String = new String; // sms < 160 karakter
var textbaru2:String = new String; //long sms
var hasil:Number;
var hasil2:Number;
var char1:Number;
var char2:Number;
var septet:Number=1;
var sisa:Number=0; //sisa = MSB / bit ke 7 

for(b=0 ; b< textnya.length ; b++)
{
char1=textnya.charCodeAt(b+1);
char2=textnya.charCodeAt(b);

//rumus mencari PDU SMS biasa
hasil=( ((0x7F >> (7 - septet)) & char1 ) <<(8 - septet) ) + (char2 >> (septet - 1)) ;

if(hasil< 16 ) textbaru+="0";
textbaru+=hasil.toString(16).toUpperCase();

// rumus padding 1 bit untuk long SMS
hasil2=sisa + ( (hasil & 0x7F) << 1) ;
sisa= hasil >> 7;

if(hasil2< 16 ) textbaru2+="0";
textbaru2+=hasil2.toString(16).toUpperCase();
trace("sisa= "+ sisa + " b= " + b + "septetne :" + septet);

// rumus untuk sms biasa, di skip septet ke 8
if(septet == 7) { 
septet = 1;
b++;
}
else septet++;
}

//rumus penggenap sisa diakhir octet
                     if(sisa == 1) textbaru2+="01";
if(sisa == 0 && ( (textnya.length) % 8) == 0)textbaru2+="00";


//tipe 0= sms biasa, 1= LONG/CONCATENATE SMS
                      if(tipe == 0) return textbaru;
 else return textbaru2;

}

Jika ingin kirim SMS Proklamasi Indonesia 17 agustus ....

 Kami bangsa Indonesia dengan ini menjatakan kemerdekaan Indonesia.
Hal-hal jang mengenai pemindahan kekoeasaan d.l.l., diselenggarakan
dengan tjara seksama dan dalam tempo jang sesingkat-singkatnja.
Djakarta, hari 17 boelan 8 tahoen 05
Atas nama bangsa Indonesia.
Soekarno/Hatta 

bagian pertama:


AT+CMGS=153<enter> 
0041000B818051757367F60000A0050003BF020196E1761A240EBBCFF33028E926BFDDE5793A0C2297DDE7B01B9476A741EDB25B1DA687D76137685D6E97E5E4F23A1C7683926EF2DB5D9EA7C3AE0632CC6EA1C36C903AEC3E83DA65F7B9EC0EA741F0723BED2687D16137685D5EBFCBE17938EC06915D6C17DBC50291D3F332BBEC3E9FC3F2F03AEC6E90CBEE73D80DA2ABC3F230685E5ECFC3<ctrl+z> 

bagian kedua:


AT+CMGS=129<enter> 
0041010B818051757367F6000084050003BF0202DA611039EC0691C3EC701B442FB7E16F903AEC3E83E6E579DA7D5E87E9AD79DA7D5E87E96E75D8D520AAC3EBB09C1E6681D061791A14BB81C4EF323BEC06E140F430FA5D768360B546901E9E83DCE17618240EBBCFF33028E926BFDDE5793AEC6A4CDFE57558EE7EBF90613A3D0C<ctrl+z> 




Ingat...jika mencoba, harap nomer telpon tujuan diganti, dan nilai yg highlight warna merah harus sama di kedua bagian, tapi jika ingin mengirim sms yg sama ke nomer yg sama pula, maka nilainya harus berbeda.
Bagian UDL (userdata length) yang warna merah backgound biru merupakan jumlah  karakter yg dikirim + 7 header, sehingga jika karakter sms /spetet = 153 maka nilainya adalah 153+7 = 160 = 0xA0.

Untuk mempermudah proses belajar AT COMMAND - LONG SMS, saya telah buatkan konverter yg dapat diunduh di :

http://www.4shared.com/document/pl1jcZJw/pdu.html

SELAMAT MENCOBA
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 (11) arduino (27) 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 (74) 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 (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 (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 (93) 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