standar TV analog PAL memiliki teknik scanning line sebanyak 625 line, dengan teknik penggabungan penembakan elektron garis ganjil dulu dilanjutkan dengan line genap. seperti gambar dibawah ini :
untuk memberikan pembeda antara awal scan genap dan ganjil , dilakukan dengan memberikan pulsa yg berbentuk 0 - 0,3v dan dengan durasi 'short' selama 2us dan 'long' yang artinya 32 us. Agak ribet memang , tp lama-lama juga bakalan ngerti. kalo dilihat secara osciloscop seperti ini :
Jadi untuk VSYNC ganjil, aturannya seperti ini :
- Dimulai dari baris ke 623, pulsa sebanyak 6x (0v selama 2us , 0,3v selama 32us ) selajutnya dinamakan LONG SYNC
- Setelah itu penanda start vsync 5x (0v selama 32us , 2us untuk level 0,3v) selanjutnya dinamakan SHORT SYNC
- Diakhiri dengan long sync sebanyak 5x
- Tidak semua baris tampil di tabung TV, umumnya tabung kelihatan mulai baris ke 50
Sedangkan untuk VSYNC GENAP, sebagai berikut:
- Dimulai dari baris ke 311, dengan LONG SYNC 5x
- Short Sync 5x
- Diakhiri dengan LONG SYNC 4x
- Beda antara baris yg berdempetan (Ganjil & Genap) adalah 312
nah sekarang kita ingin membuat garis vertikal ....seperti gambar :
programmingnya seperti berikut :
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#define SYNC PORTB=0
#define ABU PORTB=0b10
#define ITEM PORTB=0b01
#define PUTIH PORTB=0b11
int line;void hsync(void){//syncSYNC;_delay_us(4);ITEM_delay_us(8);if(line == 50 || line == 100 || line == 150|| line == 200 || line == 250) ITEMelse ABU;_delay_us(50);line++;}void vsync(uint8_t ganjilgenap){uint8_t a,b;if(ganjilgenap == 0) b=6;else b=5;for(a=0; a<b ; a++) //6x atau 5x long sync{SYNC;_delay_us(2);PORTB=1;_delay_us(30);}for(a=0; a<5 ; a++) //5x short sync{SYNC;_delay_us(30);PORTB=1;_delay_us(2);}if(ganjilgenap == 0) b=5;else b=4;for(a=0; a<b ; a++) //5x atau 4x long sync{SYNC;_delay_us(2);PORTB=1;_delay_us(30);}if(ganjilgenap == 0) line=5;else line=317;}int main(void){line=622;//Inisialisasi port inputDDRB =0b11;while(1){if(line == 622) vsync(0); //genapelse if(line == 310) vsync(1); //ganjilelse hsync();}}
selanjutnya dengan penggabungan antara VSYNC dan HSYNC kita bisa menggambar diatas TV, tentunya dengan keterbatasan timing dari AVR, susah juga kadang menemukan timing yg pas. dengan menggunakan delay.h tidak bisa dijamin delay yg bener sebab tiap perintah /syntax dari GCC memerlukan waktu eksekusi yg memakan waktu juga . begitu pula dengan menggunakan counter interrupt, timing nya terbatas untuk interupt yg pas digunakan, sebab jika CTC 1us maka hampir semua program didominasi oleh interupt timer.
kalo yg kayak gini mau ?
kalo mau...contact aja aku ... atau mau lanjut ke part ke 3
0 komentar:
Posting Komentar