Friday, November 23, 2012

COM SERIAL RS-232

Standar RS232 ditetapkan oleh Electronic Industry Association and Telecomunication Industry Association pada tahun 1962. Nama lengkapnya adalah EIA/TIA-232 Interface Between Data Terminal Equipment and Data Circuit-Terminating Equipment Employing Serial Binary Data Interchange. Meskipun namanya cukup panjang tetapi standar ini hanya menyangkut komunikasi data antara komputer dengan alat-alat pelengkap komputer. Ada dua hal pokok yang diatur standar RS232, antara lain adalah :
Bentuk sinyal dan level tegangan yang dipakai.
RS232 dibuat pada tahun 1962, jauh sebelum IC TTL populer, oleh karena itu level tegangan yang ditentukan untuk RS232 tidak ada hubungannya dengan level tegangan TTL, bahkan dapat dikatakan jauh berbeda. Berikut perbedaan antara level tegangan RS232 dan TTL :
Penentuan jenis sinyal dan konektor yang dipakai, serta susunan sinyal pada kaki- kaki di konektor. Beberapa parameter yang ditetapkan EIA (Electronics Industry Association) antara lain:
• Sebuah ‘spasi’ (logika 0) antara tegangan +3 s/d +25 volt
• Sebuah ‘tanda’ (logika 1) antara tegangan -3 s/d -25 volt
• Daerah tegangan antara +3 s/d -3 volt tidak didefenisikan
• Tegangan rangkaian terbuka tidak boleh lebih dari 25 volt (dengan acuan ground)
• Arus hubung singkat rangkaian tidak boleh lebih dari 500 mA.
Sebuah penggerak (driver) harus mampu menangani arus ini tanpa mengalami kerusakan. Selain mendeskripsikan level tegangan seperti yang dibahas di atas, standard RS232 menentukan pula jenis-jenis sinyal yang dipakai mengatur pertukaran informasi antara DTE dan DCE, semuanya terdapat 24 jenis sinyal tapi yang umum dipakai hanyalah 9 jenis sinyal. Konektor yang dipakai pun ditentukan dalam standard RS232, untuk sinyal yang lengkap dipakai konektor DB25, sedangkan konektor DB9 hanya bisa dipakai untuk 9 sinyal yang umum dipakai.
Sinyal-sinyal tersebut ada yang menuju ke DCE ada pula yang berasal dari DCE. Bagi sinyal yang menuju ke DCE artinya DTE berfungsi sebagai output dan DCE berfungsi sebagai input, misalnya sinyal TD, pada sisi DTE kaki TD adalah output, dan kaki ini dihubungkan ke kaki TD pada DCE yang berfungsi sebagai input. Kebalikan sinyal TD adalah RD, sinyal ini berasal dari DCE dan dihubungkan ke kaki RD pada DTE yang berfungsi sebagai output.
Konverter Logika RS-232
Jika peralatan yang kita gunakan menggunakan logika TTL maka sinyal serial port harus kita konversikan dahulu ke pulsa TTL sebelum kita gunakan, dan sebaliknya sinyal dari peralatan kita harus dikonversikan ke logika RS-232 sebelum di-inputkan ke serial port. Konverter yang paling mudah digunakan adalah MAX-232. Di dalam IC ini terdapat Charge Pump yang akan membangkitkan +10 Volt dan -10 Volt dari sumber +5 Volt tunggal. Dalam IC DIP (Dual In-line Package) 16 pin (8 pin x 2 baris) ini terdapat 2 buah transmiter dan 2 receiver. Sering juga sebagai buffer serial digunakan chip DS275.
Untuk menghubungkan antara 2 buah PC, biasanya digunakan format null mode, dimana pin TxD dihubungkan dengan RxD pasangan, pin Sinyal ground (5) dihubungkandengan SG di pasangan, dan masing masing pin DTR, DSR dan CD dihubung singkat, dan pin RTS dan CTS dihubung singkat di setiap devais.
Konfigurasi Null Modem
Konfigurasi Null Modem digunakan untuk menghubungkan dua DTE dengan diagram pengkabelan yang dapat dilihat pada gambar dibawah. Dalam hal ini hanya dibutuhkan tiga kabel antar DTE, yakni untuk TxD, RxD dan Gnd. Cara kerjanya adalah bagaimana membuat komputer agar berpikir bahwa computer berkomunikasi dengan modem (DCE) bukan dengan komputer lainnya.
Pada gambar diatas terlihat bahwa kaki DTR (Data Terminal Ready) dihubungkan ke DSR (Data Set Ready) dan juga ke CD (Carrier Detect) pada masing masing komputer, sehingga pada saat sinyal DTR diaktifkan maka sinyal DSR dan CD juga ikut aktif (konsep Modem Semu atau Virtual Modem). Karena computer dalam hal ini melakukan pengiriman data dengan kecepatan yang sama, maka kontrol aliran (flow control) belum dibutuhkan sehingga RTS (Request To Send) dan CTS (Clear to Send) pada masing masing komputer saling dihubungkan.
Transmisi Data Pada RS232
Komunikasi pada RS-232 dengan PC adalah komunikasi asinkron. Dimana sinyal clocknya tidak dikirim bersamaan dengan data. Masing-masing data disinkronkan menggunakan clock internal pada tiap-tiap sisinya. Gambar 2.6 Format transmisi satu byte pada RS232 Data yang ditransmisikan pada format diatas adalah 8 bit, sebelum data tersebut ditransmisikan maka akan diawali oleh start bit dengan logik 0 (0 Volt), kemudian 8 bit data dan diakhiri oleh satu stop bit dengan logik 1 (5 Volt).
Keuntungan Menggunakan Komunikasi Serial
Antar muka komunikasi serial menawarkan beberapa kelebihan dibandingkan dengan komunikasi pararel, diantaranya:
• Kabel untuk komunikasi serial bisa lebih panjang dibandingkan dengan pararel.
Data-data dalam komunikasi serial dikirimkan untuk logika ‘1’ sebagai tegangan -3 s/d -25 volt dan untuk logika ‘0’ sebagai tegangan +3 s/d +25 volt, dengan demikian tegangan dalam komunikasi serial memiliki ayunan tegangan maksimum 50 volt, sedangkan pada komunikasi pararel hanya 5 volt. Hal ini menyebabkan gangguan pada kabel-kabel panjang lebih mudah diatasi dibanding dengan pararel.
• Jumlah kabel serial lebih sedikit.
Dua perangkat komputer yang berjauhan dengan hanya tiga kabel untuk konfigurasi null modem, yakni TxD (saluran kirim), RxD (saluran terima) dan Ground, akan tetapi jika menggunakan komunikasi pararel akan terdapat dua puluh hingga dua puluh lima kabel.
• Komunikasi serial dapat menggunakan udara bebas sebagai media transmisi.
Pada komunikasi serial hanya satu bit yang ditransmisikan pada satu waktu sehingga apabila transmisi menggunakan media udara bebas (free space) maka dibagian penerima tidak akan muncul kesulitan untuk menyusun kembali bit bit yang ditransmisikan.
• Komunikasi serial dapat diterapkan untuk berkomunikasi dengan mikrokontroler.
Hanya dibutuhkan dua pin utama TxD dan RxD (diluar acuan ground).
PORT SERIAL RS-232
Dewasa ini keberadaan port serial RS-232 pada komputer semakin berkurang jumlahnya, jika dahulu terdapat minimal 2 buah port serial RS-232, maka sekarang jumlahnya sudah berkurang menjadi 1 buah, bahkan pada jenis komputer tertentu sudah tidak menyediakan port serial RS-232, misalnya pada komputer jenis mobile. Karena memang dilihat dari sudut teknologi, bagi beberapa pihak komunikasi data menggunakan port serial RS-232 sudah dianggap tertinggal.
Hal ini wajar karena teknologi terus berkembang, dan sudah menjadi hal yang alami jika suatu teknologi baru yang lebih baik telah ditemukan maka secara otomatis teknologi lama perlahan-lahan mulai ditinggalkan. Walaupun begitu bukan berarti port serial RS-232 sudah tidak digunakan lagi, karena port serial RS-232 punya kelebihan yaitu kemudahan dalam penggunaannya, tidak memerlukan teknik pemrograman yang terlalu rumit, mudah untuk dipelajari dan karena sudah umum digunakan maka tidaklah sulit untuk mendapatkan periperal untuk merancang bangun suatu device yang menggunakan port serial RS-232. Karena itu port serial RS-232 banyak digunakan sebagai dasar untuk mempelajari teknik-teknik antar muka antara suatu device dan PC, misalnya antar muka mikrokontroler dengan PC.
Dalam mempelajari teknik antar muka menggunakan komunikasi data melalui port USB bagi pemula tidaklah mudah. Hal ini dapat diatasi dengan menggunakan suatu dongle konverter port USB menjadi port serial RS-232. Dengan menggunakan konverter ini maka sebuah port USB PC seolah-olah menjadi sebuah port serial RS-232 seperti pada umumnya, walaupun sesungguhnya data ditransfer melalui sebuah port USB.
Ada sejumlah rangkaian transceiver RS232 yang biasa digunakan untuk komunikasi antara mikrokontroler dengan divais lain seperti PC atau divais lain yang menggunakan RS232. Untuk menekan harga, dapat digunakan rangkaian dengan dua transistor seperti yang tampak pada gambar berikut.
Dalam rangkaian lain digunakan Max232 dari Maxim. Rangkaian ini sangat stabil dan digunakan untuk rancangan yang profesional. Divais ini tidak mahal, menyediakan dua kanal RS232. Setiap output transmitter dan input receiver dilindungi terhadap kejutan elektrostatik hingga 15kV. Divais ini dapat beroperasi dengan catu tunggal 5V.
Salah satu kelemahan komunikasi data menggunakan RS232 adalah jarak maksimal yang diijinkan adalah 15 meter. Hal tersebut bisa diatasi dengan menggunakan RS485.
RS485 dapat digunakan untuk mentransfer data sampai dengan jarak 1220 meter, dengan kecepatan transfer sampai dengan 10Mbps. Jaringan RS485 bisa menangani sampai dengan 32 perangkat/divais.

Thursday, November 22, 2012

PROGRAM JAM DIGITAL Dot matrix

JAM DIGITAL DOT MATRIX BERBASIS MOKROKONTROLER


Di jaman yang semakin canggih ini dimana piranti elektronika berkembang secara pesat. Manusia sangat bergantung pada piranti elektronik. Manusia mempunyai kelemahan dalam membaca piranti analog. Untuk itu manusia mengembangkan piranti-piranti digital agar mempermudah dalam pebacaannya. disini saya ingin membuat jam digital dengan display-nya menggunakan dot matrix.
Disini saya menggunakan mikrokontroler jenis AVR yaitu ATMega16.saya menggunakan ATmega ini karena kapasitas memorinya besar guna menyimpan database karakter.berikut adalah gambar rangkaian minimum sistemnya.


Untuk Update Waktunya,saya menggunakan IC RTC(Real Time Clock) DS1307. Saya menggunakan IC tipe ini karena penggunaannya yang mudah. Di dalam CVAVR sudah ada fungsi untuk mengirim dan menerima pembacaan RTC.
berikut adalah gambar skematik RTC.
untuk displaynya saya menggunakan dot matrix.Pengertian dari Dot matrix LED adalah kompulan dari led-led kecil yang dipakai dalam kemasan yang mirip dengan seven segment. Proses penggunaannya yaitu dengan proses scanning. Dot matrix LED yang digunakan pada proyek kali ini adalah dot matrix dengan banyak baris 7 buah dan kolom 5 buah. Proses scanning yang dimaksud adalah proses pemberian tegangan high pada kolom tertentu dan disertai pemberian tegangan low pada baris tertentu secara bersamaan.Contoh urutan scanning-nya sebagai berikut:

  1. Kolom pertama diberi tegangan high
  2. Pemilihan dot yang akan menyala didasarkan pada pemberian tegangan low pada baris yang diinginkan
  3. Ulang ke proses pertama untuk kolom berikutnya.
Urutan kerja seperti diatas adalah proses scanning. Jadi sebenarnya tampilan karakter pada dot matrix LED sebenarnya adalah proses menyala secara bergantian.
untuk rangkaian driver kolom dan baris adalah sebagai berikut:

untuk driver kolom saya menggunakan IC register 74LS164 dan untuk driver barisnya saya menggunakan transistor 2n222.
berikut adalah listing program untuk ngecek apakah RTC sudah berfungsi:

#include <mega16.h>
// I2C Bus functions
#asm
.equ __i2c_port=0×15 ;PORTC
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
#include <i2c.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
// Standard Input/Output functions
#include <stdio.h>
// Declare your global variables here
void main(void)
{
unsigned char tanggal=0,bulan=0,tahun=0;
unsigned char tanggal_t=0,bulan_t=0,tahun_t=0;
unsigned char jam=0,menit=0,detik=0;
unsigned char jam_t=0,menit_t=0,detik_t=0;
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTA=0×00;
DDRA=0xFF;
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0×00;
DDRB=0xFF;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0×00;
DDRC=0×00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0×00;
DDRD=0×00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0×00;
TCNT0=0×00;
OCR0=0×00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0×00;
TCCR1B=0×00;
TCNT1H=0×00;
TCNT1L=0×00;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0×00;
TCCR2=0×00;
TCNT2=0×00;
OCR2=0×00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0×00;
MCUCSR=0×00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0×00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0×00;
UCSRB=0×18;
UCSRC=0×86;
UBRRH=0×00;
UBRRL=0x4D;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0×80;
SFIOR=0×00;
// ADC initialization
// ADC disabled
ADCSRA=0×00;
// SPI initialization
// SPI disabled
SPCR=0×00;
// TWI initialization
// TWI disabled
TWCR=0×00;
// I2C Bus initialization
i2c_init();
// DS1307 Real Time Clock initialization
// Square wave output on pin SQW/OUT: On
// Square wave frequency: 1Hz
rtc_init(0,1,0);
rtc_set_date(12,12,11);
rtc_set_time(21,0,0);
while (1)
{
rtc_get_date(&tanggal_t,&bulan_t,&tahun_t);
if(tanggal_t!=tanggal||bulan_t!=bulan || tahun_t!=tahun)
{
tanggal=tanggal_t;
bulan=bulan_t;
tahun=tahun_t;
printf(“Tanggal: %d-%d-%d\n”,tanggal,bulan,tahun);
}
rtc_get_time(&jam_t,&menit_t,&detik_t);
if(jam_t!=jam||menit_t!=menit||detik_t!=detik)
{
jam=jam_t;
menit=menit_t;
detik=detik_t;
printf(“Waktu : %d:d:d\n”,jam,menit,detik);
}
};
}
untuk listing program menampilkan jam:

#include <mega16.h>
#include <delay.h>
// I2C Bus functions
#asm
.equ __i2c_port=0×15 ;PORTC
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
#include <i2c.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
// Declare your global variables here
#include <delay.h>
#define data PORTB.0
#define enable PORTB.1
#define clock PORTB.2
#define clear PORTB.3
#define huruf 11
unsigned char h,m,s;
unsigned int ulang;
unsigned char kata[5 * huruf];
unsigned char buffer[50];
const unsigned char a[5] = {0b01111110, 0b00001001, 0b00001001, 0b00001001, 0b01111110},
b[5] = {0b01111111, 0b01001001, 0b01001001, 0b01001001, 0b00110110},
c[5] = {0b00111110, 0b01000001, 0b01000001, 0b01000001, 0b00100010},
d[5] = {0b01111111, 0b01000001, 0b01000001, 0b01000001, 0b00111110},
e[5] = {0b01111111, 0b01001001, 0b01001001, 0b01001001, 0b01001001},
f[5] = {0b01111111, 0b00001001, 0b00001001, 0b00001001, 0b00000001},
g[5] = {0b00111110, 0b01000001, 0b01001001, 0b01001001, 0b00110010},
//h[5] = {0b01111111, 0b00001000, 0b00001000, 0b00001000, 0b01111111},
i[5] = {0b00000000, 0b01000001, 0b01111111, 0b01000001, 0b00000000},
j[5] = {0b00100000, 0b01000000, 0b01000000, 0b01000000, 0b00111111},
k[5] = {0b01111111, 0b00001000, 0b00010100, 0b00100010, 0b01000001},
l[5] = {0b01111111, 0b01000000, 0b01000000, 0b01000000, 0b01000000},
//m[5] = {0b01111111, 0b00000010, 0b00000100, 0b00000010, 0b01111111},
n[5] = {0b01111111, 0b00000010, 0b00000100, 0b00001000, 0b01111111},
o[5] = {0b00111110, 0b01000001, 0b01000001, 0b01000001, 0b00111110},
p[5] = {0b01111111, 0b00001001, 0b00001001, 0b00001001, 0b00000110},
q[5] = {0b00111110, 0b01000001, 0b01010001, 0b01100001, 0b01111110},
r[5] = {0b01111111, 0b00001001, 0b00001001, 0b00001001, 0b01110110},
//s[5] = {0b01000110, 0b01001001, 0b01001001, 0b01001001, 0b00110001},
t[5] = {0b00000001, 0b00000001, 0b01111111, 0b00000001, 0b00000001},
u[5] = {0b00111111, 0b01000000, 0b01000000, 0b01000000, 0b00111111},
v[5] = {0b00011111, 0b00100000, 0b01000000, 0b00100000, 0b00011111},
w[5] = {0b00111111, 0b01000000, 0b00110000, 0b01000000, 0b00111111},
x[5] = {0b01100011, 0b00010100, 0b00001000, 0b00010100, 0b01100011},
y[5] = {0b00000111, 0b00001000, 0b01111000, 0b00001000, 0b00000111},
z[5] = {0b01100001, 0b01010001, 0b01001001, 0b01000101, 0b01000011},
a0[5] = {0b00111110, 0b01010001, 0b01001001, 0b01000101, 0b00111110},
a1[5] = {0b00000000, 0b01000010, 0b01111111, 0b01000000, 0b00000000},
a2[5] = {0b01000010, 0b01100001, 0b01010001, 0b01001001, 0b01000110},
a3[5] = {0b00100010, 0b01000001, 0b01001001, 0b01001001, 0b00110110},
a4[5] = {0b00010000, 0b00011000, 0b00010100, 0b00010010, 0b01111001},
a5[5] = {0b01000111, 0b01000101, 0b01000101, 0b01000101, 0b00111001},
a6[5] = {0b00111110, 0b01001001, 0b01001001, 0b01001001, 0b00110000},
a7[5] = {0b00000001, 0b00000001, 0b01111001, 0b00000101, 0b00000011},
a8[5] = {0b00110110, 0b01001001, 0b01001001, 0b01001001, 0b00110110},
a9[5] = {0b00000110, 0b01001001, 0b01001001, 0b01001001, 0b00111110},
space[5] = {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000},
min[5] = {0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000000},
longmin[5] = {0b00001000, 0b00001000, 0b00001000, 0b00001000, 0b00001000},
panah[5] = {0b00001000, 0b00001000, 0b00101010, 0b00011100, 0b00001000},
titik[5] = {0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000000},
titik2[5] = {0b00000000, 0b00000000, 0b00010100, 0b00000000, 0b00000000},
tandaseru[5] = {0b00000110, 0b00001111, 0b01011111, 0b00001111, 0b00000110},
kurungkurawaltutup[5] = {0b01000001, 0b01000001, 0b00110110, 0b00001000, 0b00001000},
kurungkurawalbuka[5] = {0b00001000, 0b00001000, 0b00110110, 0b01000001, 0b01000001},
garisbawah[5] = {0b01000000, 0b01000000, 0b01000000, 0b01000000, 0b01000000},
caping[5] = {0b00001100, 0b00000110, 0b00000011, 0b00000110, 0b00001100},
capingbalik[5] = {0b00011000, 0b00110000, 0b01100000, 0b00110000, 0b00011000},
besar[5] = {0b01000001, 0b01100011, 0b00110110, 0b00011100, 0b00001000},
kecil[5] = {0b00001000, 0b00011100, 0b00110110, 0b01100011, 0b01000001};
void rst()
{
clear = 0;
clear = 1;
PORTA = 0b00000000;
data = 1;
for(ulang = 0; ulang < 50; ulang++)
{
clock = 1;
clock = 0;
delay_us(10);
}
}
void sft()
{
clock = 1;
clock = 0;
delay_us(100);
data = 1;
}
void tampil(unsigned int c)
{
unsigned int a, b = 0;
for(a = 0; a < c; a++)
{
rst();
data = 0;
do
{
PORTA = buffer[b];
sft();
b++;
}
while(b < 50);
b = 0;
}
}
//c:kecepatan, d & e:pada posisi d kecepatan e, f:berhenti geser pada posisi f
void kanan(unsigned int c, int d, unsigned int e, int f)
{
unsigned int a, b;
for(a = 0; a < 5 * huruf + 50; a++)
{
for(b = 49; b > 0; b–) //geser isi buffer
buffer[b] = buffer[b - 1];
if(a < (5 * huruf))
buffer[0] = kata[5 * huruf - (1 + a)];
else
buffer[0] = 0b00000000;
if(a == f)
a = 5 * huruf + 50;
if(a != d)
tampil(c);
if(a == d)
tampil(e);
}
}
//membuat semua isi buffer = 0b00000000
void clearbuffer()
{
unsigned int a;
for(a = 0; a < 50; a++)
buffer[a] = 0b00000000;
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTA=0×00;
DDRA=0xFF;
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0×00;
DDRB=0xFF;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0×00;
DDRC=0×00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0×00;
DDRD=0×00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0×00;
TCNT0=0×00;
OCR0=0×00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0×00;
TCCR1B=0×00;
TCNT1H=0×00;
TCNT1L=0×00;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0×00;
TCCR2=0×00;
TCNT2=0×00;
OCR2=0×00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0×00;
MCUCSR=0×00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0×00;
// USART initialization
// USART disabled
UCSRB=0×00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0×80;
SFIOR=0×00;
// ADC initialization
// ADC disabled
ADCSRA=0×00;
// SPI initialization
// SPI disabled
SPCR=0×00;
// TWI initialization
// TWI disabled
TWCR=0×00;
// I2C Bus initialization
i2c_init();
// DS1307 Real Time Clock initialization
// Square wave output on pin SQW/OUT: On
// Square wave frequency: 1Hz
rtc_init(0,1,0);
rtc_set_time(20,10,10);
//rtc_set_date(11, 12, 11);
/*******************/
enable = 1;
clear = 1;
clock = 0;
data = 0;
/*******************/
while (1)
{
// Place your code here
rtc_get_time(&h,&m,&s);
if(h==0)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a0[ulang];
//kata[ulang + 10] = titik2[ulang];
//kata[ulang + 15] = a0[ulang];
//kata[ulang + 20] = a0[ulang];
//kata[ulang + 25] = a1[ulang];
//kata[ulang + 30] = e[ulang];
//kata[ulang + 35] = m[ulang];
//kata[ulang + 40] = space[ulang];
//kata[ulang + 45] = besar[ulang];
//kata[ulang + 50] = space[ulang];
}
//kanan(2, -1, 0, 5 * huruf – 1);
//tampil(2);
}
else if(h==1)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a1[ulang];
//kata[ulang + 10] = titik2[ulang];
//kata[ulang + 15] = a0[ulang];
//kata[ulang + 20] = a1[ulang];
//kata[ulang + 25] = a1[ulang];
//kata[ulang + 30] = e[ulang];
//kata[ulang + 35] = m[ulang];
//kata[ulang + 40] = space[ulang];
//kata[ulang + 45] = besar[ulang];
//kata[ulang + 50] = space[ulang];
}
//kanan(2, -1, 0, 5 * huruf – 1);
///tampil(350);
}
else if (h==2)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a2[ulang];
//kata[ulang + 10] = titik2[ulang];
//kata[ulang + 15] = a0[ulang];
//kata[ulang + 20] = a1[ulang];
//kata[ulang + 25] = a1[ulang];
//kata[ulang + 30] = e[ulang];
//kata[ulang + 35] = m[ulang];
//kata[ulang + 40] = space[ulang];
//kata[ulang + 45] = besar[ulang];
//kata[ulang + 50] = space[ulang];
}
}
else if (h==3)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a3[ulang];
//kata[ulang + 10] = titik2[ulang];
//kata[ulang + 15] = a0[ulang];
//kata[ulang + 20] = a1[ulang];
//kata[ulang + 25] = a1[ulang];
//kata[ulang + 30] = e[ulang];
//kata[ulang + 35] = m[ulang];
//kata[ulang + 40] = space[ulang];
//kata[ulang + 45] = besar[ulang];
//kata[ulang + 50] = space[ulang];
}
}
else if(h==4)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a4[ulang];
//kata[ulang + 10] = titik2[ulang];
//kata[ulang + 15] = a0[ulang];
//kata[ulang + 20] = a1[ulang];
//kata[ulang + 25] = a1[ulang];
//kata[ulang + 30] = e[ulang];
//kata[ulang + 35] = m[ulang];
//kata[ulang + 40] = space[ulang];
//kata[ulang + 45] = besar[ulang];
//kata[ulang + 50] = space[ulang];
}
}
else if(h==5)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a5[ulang];
}
}
else if(h==6)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==7)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==8)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==9)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==10)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==11)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==12)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==13)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==14)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==15)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==16)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==17)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==18)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==19)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==20)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
else if(h==21)
{
for(ulang = 0; ulang < 5; ulang++)
{
kata[ulang] = a0[ulang];
kata[ulang + 5] = a6[ulang];
}
}
//dst,,,
};
}

kendala yang dihadapi:
1. Kurangnya ketelitian  dalam menggambar menggunakan orcad sehingga PCB yang dicetak tidak sesuai dengan yang diharapkan sehingga saya mengambil keputusan untuk menyolder secara manual.
2. Dikarenakan arus yang digunakan untuk dotmatrix menggunakan sumber dari 7805 secara langsung dan rangkaiannya di solder manual maka arus yang dikeluarkan tidak mencukupi kebutuhan dot matrix sehingga nyala dot matrix menjadi redup.
3. Karena arus yang melalui dotmatrix kecil maka program yang dibuat tidak bisa dijalankan
solusi:
1. Lebih Teliti dalam membuat layout.
2. Jika arus yang ddikeluarkan kecil maka sebaiknya ditambahkan penguat arus setelah rangkaian 7805.

Monday, November 19, 2012

kerusakan panel T-con LCD

Sekarang ini banyak T.con yang sudah menjadi satu kesatuan dan menempel bagian atas panel LCD, sehingga kerusakan pada bagian T.con artinya sama saja panel yang rusak.
Gejala-gejala kerusakan yang nampak antara lain adalah :
  1. Raster nyala putih blank.
  2. Raster gelap, tetapi backlight menyala
  3. Salah satu warna hilang atau kadang hilang
  4. Gambar blur atau berlepotan
Untuk memastikan jenis kerusakan seperti ini, maka yang perlu dilakukan adalah ;
  1. Periksa apakah tegangan 5v sudah masuk pada kabel LVDS
  2. Periksa sinyal-sinyal gambar pada konektor LVDS menggunakan osiloskop. Jika semua sinyal ada berarti panel yang rusak.
  3. Untuk mengetahui lokasi pin 5v dan pin sinyal gambar pada konektor LVDS, maka perlu melihat pada skematik diagram
Tetapi sebelum memastikan panel rusak, maka coba periksa FUSE chip yang menempel pada T.con, mungkin problem hanya disebabkan fuse tersebut putus. Fuse ini lokasinya biasanya dekat dengan konektor LVDS dngan nilai 2A. Ganti fuse dengan potongan seutas serat kabel yang lembut.
Contoh pin-out konektor LVDS :
Vin adalah input tegangan 5v
Lokasi sinyal gambar yang perlu dicek dengan osiloskop adalah Rx in0-/Rx in0+ hingga Rx in3-/Rx in3+ dan RxCLK-/RxCLK+.

Sunday, November 18, 2012

mengenal Kerusakan bagian T-con TV LCD


T-con board rusak – kenapa harus ganti satu unit LCD panel komplit ?
Hal ini terutama pada model-model produksi sebelum tahun 2006. Teknologi LCD saat itu masih dalam taraf pengembangan awal – maka banyak dilakukan revisi-revisi yang berkelanjutan untuk mendapatkan gambar yang lebih bagus. Banyak koreksi dilakukan terutama pada data memori (yang terdapat pada T-con board) untuk masalah-masalah seperti white-balance, gamma-corretion, dan uniformity (semacam purity pada tv CRT). Pada model yang sama tetapi dengan nomor lot produksi yang berbeda kadang T-con yang digunakan sudah berbeda pula. Pendek kata waktu itu layar LCD tipe tertentu dan resolusi gambar tertentu membutuhkan T-con tertentu sendiri.
Hal ini tentu saja banyak menimbulkan komplain dari banyak konsumen, karena harga panel LCD komplit lebih dari 2/3 harga LCD teve itu sendiri jika garansi sudah habis. Dalam beberapa tahun terachir ini toleransi kerja T-con board dan variance-mya dapat diminimalisasikan. Oleh karena itu berbagai merk T-con board untuk model-model tertentu saat ini sudah dapat diperoleh sebagai part tersendiri. Bahkan T-con sekarang ini kadang dapat digunakan untuk layar LCD yang berbeda-beda serta resulusi gambar yang berbeda pula.
Dalam melakukan trobelshuting kerusakan LCD, hal yang paling sulit adalah menentukan bagian mana yang rusak dengan melihat gejala-gejala kerusakan yang ditunjukkan. Apakah keruskan disebabkan karena bagian Digital board (video proses), Kabel LVDS, T-con, atau layar LCD.
Video proses berfungsi untuk merubah macam-macam sinyal video input analog menjadi data sinyal gambar digital dengan skala 8 bits (atau 10bits) secara frame by frame. Jadi tidak mungkin kerusakan pada bagian ini yang akan menyebabkan kerusakan gambar secara partial. Gejala kerusakan yang mungkin terjadi pada bagian ini misalnya adalah :
  • Gambar negatip (klise)
  • Gambar noise
  • Warna berubah
  • Gambar kurang kontras
Kerusakn kabel atau konektor LVDS biasanya bersifat intermitent (kadand-kadang). Dengan menggoyang-goyang kabel LVDS gambar kadang bagus kadang cacat. Kabel dan konektor LVDS sebenarnya jarang rusak. Kerusakan umumnya disebabkan karena cara penanganan teknisi (caraa melepas-memasang) yang belum pengalaman atau kurang hati-hati.
Kerusakan LCD panel kadang hampir mirip dengan kerusakan yang disebabkan T-con bord. Sedang kerusakan 1 garis umumnya disebabkan oleh kerusakan LCD panel (atau IC RSDS drive). Jika ragu mengenai penyebab kerusakan karena T-con atau layar LCD, maka akan lebih bijak mencoba mengganti T-con terlebih dahulu, dengan pertimbangan karena harganya yang relatip lebih murah dibanding dengan harga layar LCD.
Kerusakan T-con umumnya menyebabkan kerusakan dengan gejala tidak ada gambar (raster blank), tetapi lampu backlight tetap nyala. Karena T-con berfungsi mendrive matrix secara group, maka kerusakan T-con dapat berupa berupa kerusakan gambar partial atau per-blok secara vertikal atau horisontal. Kerusakan T-con pada SONY dapat menyebabkan LCD mati protek dan led indikator kedip-kedip (blingking code).
T-con trobelshuting
Cek fuse-chip yang umumnya berlokasi dekat LVDS konektor
Cek tegangan suply input (umumnya 12v)
Cek dengan osiloskop data sinyal gambar
Jika hal-hal tersenut diatas ok, maka kemungkinan T-con board rusak
Sebelum mengganti T-con board sebaiaknya periksa dahulu soldering, karena mungkin kerusakan hanya disebabkan masalah solderan. Coba cleaning dan kemudian panaskan board dengan blower.
Kecuali raster blank – dibawah ini adalah beberapa contoh kerusakan gambar yang disebabkan oleh T-con
Gambar dibawah menunjukkan contoh kerusakan data memori uniformity

mengenal sistim protek TV Polytron


Hampi semua sistim protek Polytron hanya menggunakan sampling protek dari pulsa Vertikal. Artinya jika bagian vertikal tidak kerja, maka akan menyebabkan pesawat mati protek.



Problem mati protek dapat disebabkan antara lain karena :

Vertikal tidak mendapat suply Vcc
IC vertikal-out rusak
Flyback tidak kerja, sebab suply Vcc ic vertikal-out berasal dari flyback.
Kerusakan pada sirkit protektor itu sendiri (vertikal-out teteap bekerja normal)


Cara kerja sirkit protektor

Pulsa-pulsa dari vertikal pump-up (vertikal flyback) dikopel melalui sebuah elko 1uF (contoh gambar C409) dan dihubunghkan ke sebuah diode (contoh gambar D402)
Diode berfungsi sebagai penyearah pulsa-pulsa vertikal sehingga diperoleh tegangan sekitar 5v (contoh gambar pada elko C515)..
Tegangan 5v ini diumpankan ke pin-PROTEK ic mikrokontrol. Jadi normal pin-protek harus ada tegangan 5v · Misalnya bagian vertikal tidak kerja, maka pulsa-pulsa vertikal akan menghilang, sehingga akan mengakibatkan tidak ada tegangan 5v pada pin-protek mikrokontrol




Kerusakan pada sirkit protektor sendiri yang menyebabkan mati protek :

Sering terjadi bagian vertikal-out bekerja normal.
Tetapi elko kopel 1uF pada sirkit protektor kering.
Hal ini mengakibatkan diode tidak mendapat pulsa-pulsa vertikal.
Dan pin-protek mikrokontrol tidak mendapat tegangan 5v


Pin-PROTEK :

Jika menggunakan UOC (ic tunggal) pin protek adalah pin-42
Jika menggunakan ic mikrokontrol dan jungel  maka pin protek adalah pin-60