[ Mekanika & Dasar Fisika-Kimia ]

[ Elektronika & Mikrokontroler]

[ Informatika & AI ]

[ OOT ] - Otak Kanan

Selasa, 15 April 2014

Tidak ada komentar :
Bismillah..

Untuk display huruf itu, satu baris standarnya 80 x 25, dimana setiap satuan berisi 2 byte. Satu byte pertama untuk karakter / huruf ASCII sedangkan untuk byte kedua untuk atribut karakter. Sehingga satu baris itu standarnya berisi 160 byte dan satu kolom itu berisi 50 byte.

Oleh karena itu, untuk mengakses posisi pada layar, bisa menggunakan rumus:
Huruf   = (baris * 160) + (kolom * 2)
Atribut = Huruf + 1

Dimana huruf dan Atribut adalah alamat memory. Default mermory untuk layar berwarna ada pada segmen 0B800h. Sehingga untuk mengakses alamatnya adalah dengan memadukan antara segment:offset atau 0B800h:Huruf untuk karakter dan 0B800h:Atribut untuk atributnya.

cetak macro x,y,hrf,attr
    mov ax,0b800h   ; alamat layar
    mov es,ax       ; tunjuk segmen layar
    
    mov ah,y
    mov al,160
    mul ah
    mov bx,ax
    
    mov ah,x
    mov al,2
    mul ah
    add bx,ax
    
    mov al,hrf
    mov ah,attr
    mov es:[bx],al
    mov es:[bx+1],ah
endm


org 100h
cetak 0 0 'A' 95  ; cetak baris kolom huruf atribut


semoga berguna -______-"


Jumat, 11 April 2014

Tidak ada komentar :
Bismillah..

Hal ini biasanya dialami oleh temen-temen yang baru belajar mikrokontroller. Ketika membuat aplikasi untuk mendrive (menghidup-matikan) relay dengan mikrokontroller, maka yang dibingungkan kadang ketika tidak menemukan relay 5 volt sementara voltase output bahkan tidak sampek 5 volt.

Gimana caranya? Kita menggunakan bantuan transistor untuk mendrive relay. Ingat, fungsi transistor di sini tidak sebagai penaik tegangan, melaikan sebagai switch. Sehingga, jangan berpikir bahwa input 3 volt disini akan naik menjadi 12 volt. Bukan, 12 volt yang digunakan untuk mengendalikan relay didapat dari power supply luar.

Berikut skemanya:


Perhatikan, pada gambar saya bagi menjadi tiga bagian yang dilingkari warna kunig-kehiajauan, saya beri label A, B, dan C. Rangkaian utama kita adalah pada lingkaran C, dimana transistor C9013 berfungsi sebagai switch untuk menghidupkan relay. Sedangkan pada lingkaran A, itu hanya sebagai simulasi saja, anggap saja itu alat yang akan dikendalikan oleh relay. Sedangkan pada lingkaran C, itu adalah input 3 volt. Input ini bisa jadi dari kaki mikrokontroller atau ouput lainnya.

Kenapa di rangkaian C ada banyak Resistor? Itu saya pake untuk membagi tegangan saja, saya fungsikan sebagai input. Jadi kalo 12 volt dibagi 4 resistor yang dilainya sama, maka tiap resistor akan memiliki tegangan 3 volt. Seperti pada rangkaian, input saya letakkan pada resistor yang paling bawah, yaitu 3 volt.

Kita kembali ke rangkaian B, disitu ada resistor 10K, resistor tersebut berfungsi sebagai peredam arus sehingga arus yang masuk tidak merusak transistor. Pada transistor C9013 tegangan Basis-Emitor tidak boleh lebih dari 1 volt, jika lebih, maka transistor akan mati. Fungsis 10K ini yang akan membagi tegangan itu, sehingga tegangan jepit Basis-Emitor hanya 0.7 ohm.

Kenapa transistor yang dipilih C9013? iseng aja, itu transistor yang ada di sini. Dalam membuat sakelar dari transistor, pake transistor jenis apa saja bisa, yang penting kita tahu karakteristiknya. Ngngng.. untuk teori lainnya, kapan-kapan ya, yang penting rangkaian ini bisa berfungsi, saya sudah senang hehe.

Oiya, untuk relay 5 volt, rangkaian dasarnya sama saja. Tapi jangan lupa, untuk semua jenis relay, tambahkan diode, diparalel dengan relay. Buat, apa? untuk melindungi transistor dari tegangan back EMF yang bisa merusak transistor. Apa itu back EMF, back EMF itu bisa dipake buat mainan yang dinamakan Joule Thief, cek di sini ( Video : Lebih Memahami Back EMF pada Coil (Konsep dasar Joule Thief) ), kali aja belum tahu :D


Semoga bermanfaat :D


Minggu, 06 April 2014

Tidak ada komentar :
Andai kita sudah cukup dengan urusan primer kita
Kita pasti mudah berinovasi
Andai kita sudah tidak berpikir lagi masalah 'makan apa hari ini'
Kita pasti mudah berkembang dan belajar hingga expert
Andai kita sudah selesai dengan urusan 'mau tinggal di mana'
Mungkin kita sudah jadi inventor

Menurut hemat saya
Orang Indonesia bukanlah orang-orang bodoh
Orang Indonesia bukanlah orang-orang dengan IQ jongkok
Orang Indonesia hanya kebanyakan sibuk mikirin 'makan apa'
Andai hidup kita sudah sejahtera, kita bisa lebih bebas berkarya
Tanpa khawatir tak bisa makan
Orang Indonesia hanya masih sibuk dengan pekerjaan dan cari makan
Sehingga tidak semua bisa berinovasi dengan maksimal

Kita orang Indonesia keturunan bangsa hebat
Generasi kita saat ini saja yang masih terpuruk
Saya yakin bisa memberikan sesuatu buat Indonesia
Saya yakin kita bisa dari sekarang

Seperti dalam tangis ketika terguncang
Bahwa 'aku' akan membuat mereka ternganga dengan kita
Bahwa 'aku' akan membuat kita menguasai bumi ini
Bahwa 'aku' punya tuhan yang selalu membantu
Aku akan membuatnya
Aku akan membuatnya
Aku akan membuatnya
Aku akan membuatnya!


Jumat, 04 April 2014

1 komentar :
23.47 - 00.16 wib

Bismillah... 

cinta itu hanya istilah
berbentuk tulisan, bunyi suara, menjelma tindakan perhatian, atau diam-diam
cinta itu ~

tak ada yang lebih berharga selain kita berusaha untuk menghabiskan jatah waktu untuk cinta
cinta yang bukan hanya tulisan
atau sebatas bunyi suara
cinta tak lebih berharga dari waktu
tapi waktu akan melambat jika tanpa cinta
atau bahkan tanpa rasa, tanpa arah, hanya melihat sesal tak guna

hari (yang) ini
hari (yang) yang tak bisa berhenti karena bagian dari satuan waktu
waktu, ada cinta di balik waktu.
ada tuhan di balik cinta.

waktu bukan ukuran kualitas
batu akan tetap batu walau ribuan tahun ada di permukaan tanah
batu bisa dibuat jadi intan permata dalam hitungan hari
jika kita membakar dalam tekanan tinggi dan terkontrol
terlalu banyak intan permata dalam diri kita
yang terbengkalai karena terlalu menyepelekan waktu dan menyepelekan diri sendiri

bertambahnya usia bukan alasan untuk berbangga dan bersenang-senang
harusnya kita lebih halus lagi berpikir dan instrospeksi lebih dalam
lama hidup di bumi ini bukan arti kehebatan diri
bukan pula pertanda kita sudah berbuat baik dan mulya
curigalah, kita disuruh untuk memperbaiki diri
curigalah, bahwa kita harus lebih bermanfaat lagi
curigalah, bisa jadi amal baik kita lebih sedikit dari kejelekan kita
sehingga hidup kita ditangguhkan, dan diberi kesempatan lagi untuk perbaikan
curigalah, misi baik kita belum usai
jadilah orang yang kemanfaatannya melebihi umurnya
jadilah orang yang siap untuk mencetak generasi,
bukan sekedar manusia tua yang tak berguna dan sebentar lagi akan keriput
berat dan susah itu hanya masalah sudut pandang

jadilah inspirator dan teladan
waktu kita di bumi tak begitu lama

have a nice year, have a nice life.. my kreswanti.com
with love
haha
he


Selasa, 01 April 2014

Tidak ada komentar :

Bismillah,..

Semalem, sebelum berangkat ke luar kota, maksud hati ingin membawa toolset untuk bermain dengan mikro walaupun dalam pendampingan. Karena power supply yang biasanya dipake itu berukuran agak besar, berat, dan tampilannya kusut. Sehingga punya niat untuk membuat power supply 12 volt yang tanpa menggunakan trafo, sehingga power supply bisa lebih ringan dan lebih simple.

Googling kesana-kemari, akhirnya nemu skema rangkain power supply yang seperti di bawah paragraf ini (nemu di http://www.electroschematics.com/5935/12volts-transformerless-power-supply/). Beberapa komponen tidak sama persis nilainya, akan tetapi mendekati ya ndak terlalu masalah. Yang penting pada komponen Dioda Zener yang harus 12 volt dan dioda penyearah (rectifie). Oiya, bentuk fisik untuk dioda zener itu bening, terbuat dari kaca. Sedangkan dioda penyearah warnanya hitam dengan warna putih di ujungnya, dan terbuat dari silikon.


Lalu? Dalam sebuah artikel, katanya kalau menggunakan power supply tanpa trafo berhati-hati, jangan sampai menyentuh jalurnya sambil grounding (nyentuh lantai, pokoknya segala hal yang mendukung penyetruman diri :D). Saya penasaran.

Setelah selesai merakit power suply 12 volt tadi, saya cek outputnya dengan AC dahulu. Hasilnya? Ada angkanya,, ratusan. Artinya Ac masih mengalir di situ. Kemudian saya cek outputnya dengan DC, ada juga, fluktuatif dari 11 hingga 12 volt. Kemudian hening.

Saya coba sentuh salah satu jalur / bekas solderan timah di kaki negatif elco, yaitu pada jalur output. Ternyata tidak nyetrum. Kemudian perlahan saya turunkan kaki dari kursi, kemudian saya sentuh sedikit. Ndak ada reaksi apa-apa. Lalu saya lebih keras nginjakkan kaki ke lantai. Drrrt.. kesetrum! :D Dan yang paling parah, kayaknya mikro saya rusak gara-gara power suply tersebut. Tadinya lcd di project board ada tulisan elang-sakti, lah ini ndak muncul lagi -,,-.

Siang ini, masih penasaran. Kemudian saya searching apa yang sebenarnya terjadi dengan power suply transformerless tersebut sehingga masih bisa membunuh orang? Jawaannya ada pada Appnotes yang diterbitkan oleh microchip (http://ww1.microchip.com/downloads/en/AppNotes/00954A.pdf). Weeeew...

So, sebenarnya bisa saja sih, hanya saja jika kita terapkan pada alat-alat elektronik yang groundnya keluar atau mudah disentuh, mending pake trafo saja. Tapi jika apliance yang kita buat full tertutup, gak masalah sih, itung-itung menghemat komponen. :D


Update 6 April 2014---


Akhirnya tak bikin adaptor baru, pake trafo 1A. Tak bikin khusus buat perlengkapan mikro. Input 220vac dan outputnya 5 volt dan 12 volt. Dan itu adalah ic mikro ATMega16a saya yang mati gegara power supply transformerless... :D


Senin, 31 Maret 2014

Tidak ada komentar :
Bismillah...

Berniat untuk nyoba gimana hyperterminal jika dihubungkan ke mikro, ternyata baru tau kalo hyperterminal bisa dipake untuk analisa dan akuisisi data dari mikro. Misal kayak print atau semacam logger. Jadi kita bisa tahu apakah data yang diproses oleh mikro itu benar atau masih keliru.

Setelah searching, eh nemu hyperterminal dan koneksi rs232. Awalnya bingung, gimana kalo pake leptop, kan ndak ada port serialnya. Setelah searching lagi, nemu solusi, yaitu pake usb to rs232 atau usb to serial. Nah, ketika sambil baca-baca nemu artikel tentang bagaimana menjadikan kabel DKU-5 sebagai pengganti usb to serial. Kenapa kok bisa begitu? Karena pada kabel DKU-5, pada bagian head belakang usbnya agak ngembung, nah di situ ada perangkat elektronik untuk mengkonversi dari usb ke serial. Terlepas dari bagaimana cara kerjanya, kita akan fokus pada fungsi port pada kabel tersebut.

Untuk membuat usb to serial dengan kabel DKU-5, sebenarnya sederhana saja. Kita hanya butuh menghubungkan pin ke 5, 6, dan 7 ke mikro. Dimana pin-pin tersebut mewakili dari Rx, Tx, dan Ground. Seperti tampak pada gambar berikut:


Biasanya, untuk menjadikan DKU-5 sebagai usb to serial, maka konektor di atas dibuang. Kabel langsung diberikan atau dipasang pada konektor DB9 untuk konek ke port di mikro. Atau ada juga yang hanya menambahkan kabel pin untuk dihubungkan ke kaki mikro secara langsung. Tapi kali ini, kita tidak akan merusak kabel yang sudah ada, melainkan kita akan membuat kabel konektor yang berfungsi sebagai interface dari DKU-5 ke DB9 dengan port yang biasa dipake untuk DKU-5 pada ponsel bekas.

Jadi bahan-bahan yang diperlukan yaitu, kabel secukupnya, port DB9 male (laki), port charger / untuk koneksi DKU-5 pada ponsel bekas (misal 6610, 6615, dll). Sehingga bahan-bahan port seperti tampak pada gambar di bawah. Ini saya copot dari ponsel bekas.


Kalo untuk DB9 male beli, 3rebu. Seperti ini.


Setelah dirangkai berdasarkan pin-pin yang sudah diberi tanda di atas, maka jadilah USB to serial dengan DKU-5 tanpa harus merusaknya. Sori, tulisannya singkat, dan terkesan buru-buru. Ini sudah capek dari tadi, cuman untuk ninggalin jejak aja. Kapan-kapan kalo ada waktu tak perbaiki tulisan ini. Kalo ada waktu. (nggak janji :p )

Semoga bermanfaat..


Tidak ada komentar :
Bismilla...

Alhamdulillah setelah seharian berkutat dengan manual LCD dan masalah mikro yang pinya sudah rusak, akhirnya bisa juga bikin program untuk nulis di LCD 8x2.

Cerita dikit. Jadi, awalnya ada masalah dengan Switch dan LEDnya, seperti pada posting sebelumnya (Membuat Lampu Berjalan), ketika switch ditekan, maka ada dua led yang menyala. Kemudian di kasus lain, ada 4 led yang tidak mau menyala, kemudian di kasus lainnya lagi, ada 4 led nyala terus. Ternyata ketika tak periksa sau-persatu, ada yang aneh dari kombinasi PORT yang dipake oleh switch dan LED. Hasil percobaannya seperti ini:

LED SWITCH    HASIL
 A    B        BIT 2 & 3 nyala (DOBEL)
 A    C        BIT 2 - 5 nyala terus
 A    D        (OK)
 B    A        (OK)
 B    C        BIT 2 - 5 nyala terus
 B    D        (OK)
 C    A        BIT 2 - 5 tidak nyala
 C    B        BIT 2 - 5 tidak nyala
 C    D        BIT 2 - 5 tidak nyala
 D    A        (OK)
 D    B        BIT 2 & 3 nyala (DOBEL)
 D    C        BIT 2 - 5 nyala terus
 
 OK = normal.

Pertikan yang normal hanya port A dan D. Ternyata setelah diskusi dan tanya-tanya di forum, PIN input untuk PORTB dan PORTC ada yang rusak. Penyebabnya katanya switch langsung nyambung ke ground, sehingga terjadi HOTPLUG yang menyebabkan pin internal pada mikrokontroller rusak. Untuk saja pin outputnnya ndak rusak. Kemudian solusi yang disarankan adalah memberikan resistor 330/220 ohm untuk inputan. Jangan langsung nyambung ke ground atau VCC.

Itu masalah pertama.

Masalah kedua, tak nemu orang yang make LCD 2x8 seperti yang saya pake. Tak googling juga sangat susah nyarinya, mungkin karena umunya orang-orang tidak memasangkan ATMega16 dan LCD 8x2. Akhirnya setelah mencari tahu tentang produk LCD tersebut, ternyata buatan cina. Websitenya http://www.goodview-lcd.com/. Zzzzzz... tidaaaak...

Kemudian tak cari berdasarkan kode dan tulisan yang ada dibelakangnya, saya ketikkan di google "0802A rev.c  pc-001 94v e 243002 rohs" dan hasilnya nihil, kemudian saya hapus satu persatu keywordnya hingga menjadi "0802A rohs", nah,, alhamdulillah ada yang jual LCD ini. Akhirnya dapet manual datasheetnya di toko online crystalfonts (https://www.crystalfontz.com/products/document/898/CFAH0802AGYHJT_v1.0.pdf). Dari datashet tersebut, ditemukanlah manual yang sebenarnya, kitab paling benar di bumi ini terkait pengoperasian LCD 8x2 yang semacam tak bermerk. x)

Setelah pelan-pelan baca dari siang sampek malem ini, akhirnya selesai juga :D alhamdulillah,, dan hasil dari kodingnya seperti berikut:

#include <mega16a.h>
#include <delay.h>

#define CMD_DDR DDRC
#define CMD_PORT PORTC
#define CMD_RS PORTC.0
#define CMD_RW PORTC.7
#define CMD_EN PORTC.6

#define LCD_PORT PORTD
#define LCD_PIN PIND
#define LCD_DDR DDRD

#define LED_PORT PORTA
#define LED_DDR DDRA 

void LCD_init(void);
void LCD_cmd(unsigned char cmd);
void LCD_char(unsigned char data);
void LCD_string(unsigned char data[]);
void LCD_ready(void);
void LCD_linecol(unsigned char line,unsigned char col);
unsigned char LCD_busy(void);

char *elang = "elang";
char *sakti = "sakti";
void main(void){
    LED_DDR = 0xFF;
    LED_PORT = 0xFF;
    LED_PORT = 0b00110010;
    CMD_DDR = 0xFF;
                   
    LCD_init();
    
    LCD_linecol(1,2);
    LCD_string(elang);
    
    LCD_linecol(2,3);
    LCD_string(sakti);
}

void LCD_init(void){
    delay_ms(50);
    LCD_cmd(0b00111000); //0b0011NF00 f-set
    delay_ms(1);
    
    LCD_cmd(0b00111000); //0b0011NF00 f-set
    delay_ms(1);
    
    LCD_cmd(0b00001111); //0b00001DCB on
    LCD_ready();
    delay_ms(1);
    
    LCD_cmd(0b00000001); //0b00000001 clear
    LCD_ready();
    delay_ms(1);
    
    LCD_cmd(0b00000110); //0b000001DS entrymode
    LCD_ready();
    delay_ms(1);
}

void LCD_cmd(unsigned char cmd){
    LCD_DDR = 0xFF;
    
    CMD_RS = 0;
    CMD_RW = 0;
    CMD_EN = 1;
    LCD_PORT = cmd;
    CMD_EN = 0;
}

void LCD_linecol(unsigned char line,unsigned char col){
    unsigned char tmp;
    switch(line){
        case 1:
            tmp = 0x00 + col;
            break;
        case 2:
            tmp = 0xC0 + col;
            break;
    }
    LCD_cmd(tmp); 
}

void LCD_string(unsigned char data[]){
    int loop = 0;
    while(data[loop]!='\0'){
        LCD_char(data[loop]);
        LCD_ready();
        loop++;
    }
}

void LCD_char(unsigned char data){
    LCD_DDR = 0xFF;
    
    CMD_RS = 1;
    CMD_RW = 0;
    CMD_EN = 1;
    LCD_PORT = data;
    CMD_EN = 0;
}

void LCD_ready(void){
    while ((LCD_busy() & 0x80) == 0x80);
}

unsigned char LCD_busy(void){
    unsigned char tmp;
    CMD_DDR = 0xFF;
    CMD_RS = 0;
    CMD_RW = 1;
    CMD_EN = 1;
    tmp = LCD_PIN;
    CMD_EN = 0;
    return tmp;
}



Nah, keluaran untuk program tersebut adalah seperti di atas. :D