- Beranda
- Hobby & Community
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
...
TS
ahocool
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
DIGITAL ELECTRONICS HOBBY FORUM

UPDATE 8/JUNI/2014
DUKUN FUSEBIT AKAN MENGHIDUPKAN IC MU YANG MATI !

Selengkapnya dibahas di sini gan !!
CLINOMETER SEDERHANA MEMANFAATKAN ADC

Selengkapnya dibahas di post berikut
Proyek2 micro yg sudah jadi
I.N.D.E.X F.O.R.U.M
Biar ngiler, ane kasih contoh hasil karya TS...
.

Spoiler for apa aja sih yang dibahas?:
Spoiler for "Hobby Microcontroller Itu Mahal ? Kreativitasmu Itu yg Mahal Gan !":
UPDATE 8/JUNI/2014
DUKUN FUSEBIT AKAN MENGHIDUPKAN IC MU YANG MATI !

Selengkapnya dibahas di sini gan !!
CLINOMETER SEDERHANA MEMANFAATKAN ADC

Selengkapnya dibahas di post berikut
Spoiler for Buka Jika Mau Paket Belajar:
Proyek2 micro yg sudah jadi
Quote:
I.N.D.E.X F.O.R.U.M
Quote:
Biar ngiler, ane kasih contoh hasil karya TS...
Spoiler for Contact TS lewat dimari yahh:
.
Diubah oleh ahocool 14-06-2025 11:27
0
1M
8.6K
Komentar yang asik ya
Mari bergabung, dapatkan informasi dan teman baru!
Hobby & Community
10.5KThread•7.1KAnggota
Tampilkan semua post
TS
ahocool
#4533
Quote:
sebenernya aku belajar juga hasil googling, tapi ga asal tempel dan berusaha mengkreasikan dengan ic yg berbeda dan tampilan yg berbeda
sember utamanya dapet dimari :
http://www.viennawireless.org/Balloo...rlay/index.php

pada web ini digunakan ic ATMega8 , memanfaatkan analog komparator untuk mendeteksi sinkronisasi vertikal & horisontal dari sinyal input video composit (semisal dari kamera atau dvd).
harap baca dulu di posting mengenai dasar TV dan menulis text dengan AVR
Pada script di web asli dijelaskan bahwa yg digunakan video NTSC..karena di indonesia menggunakan PAL maka saya ubah script menjadi PAL dan menggunakan ATTINY

dari gambar kita butuh menggunakan pin AIN0 dan AIN1 serta pin MOSI, dan beberapa pin digunakan sebagai tombol seperlunya, rangkai sesuai gambar asli. gunakan nilai komponen sesuai catatan dan dengan bereksperimen maka akan didapat efek2 yg tidak diduga seperti warna text, warna latar dsb.
untuk itu kita bahas script satu persatu ...
>>> Header <<
Code:
#define F_CPU 20000000UL //xtal 20MHz
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/sleep.h>
#define FONTHEIGHT 12 //panjang text
//rumus dan variabel syncronisasi
#define HSYNC PORTB=0;
#define GREY PORTB=0x80;
#define COL(r) textnya=word[r][fontline];
static uint8_t fontline = 0;
static uint8_t fontzoom = 0;
static uint16_t rasterline=0;
// ARRAY untuk tulisan nomer 0,1,2 dst
const unsigned char font[12][FONTHEIGHT] PROGMEM = {
{
0b00000000,
0b01111100,
0b11000110,
0b11001110,
0b11011110,
0b11010110,
0b11110110,
0b11100110,
0b11000110,
0b01111100,
0b00000000,
0b00000000,
},
{
0b00000000,
0b00010000,
0b00110000,
0b11110000,
0b00110000,
0b00110000,
0b00110000,
0b00110000,
0b00110000,
0b11111100,
0b00000000,
0b00000000,
},
{
0b00000000,
0b01111000,
0b11001100,
0b11001100,
0b00001100,
0b00011000,
0b00110000,
0b01100000,
0b11001100,
0b11111100,
0b00000000,
0b00000000,
},
{
0b00000000,
0b01111000,
0b11001100,
0b00001100,
0b00001100,
0b00111000,
0b00001100,
0b00001100,
0b11001100,
0b01111000,
0b00000000,
0b00000000,
},
{
0b00000000,
0b00001100,
0b00011100,
0b00111100,
0b01101100,
0b11001100,
0b11111110,
0b00001100,
0b00001100,
0b00011110,
0b00000000,
0b00000000,
},
{
0b00000000,
0b11111100,
0b11000000,
0b11000000,
0b11000000,
0b11111000,
0b00001100,
0b00001100,
0b11001100,
0b01111000,
0b00000000,
0b00000000,
},
{
0b00000000,
0b00111000,
0b01100000,
0b11000000,
0b11000000,
0b11111000,
0b11001100,
0b11001100,
0b11001100,
0b01111000,
0b00000000,
0b00000000,
},
{
0b00000000,
0b11111110,
0b11000110,
0b11000110,
0b00000110,
0b00001100,
0b00011000,
0b00110000,
0b00110000,
0b00110000,
0b00000000,
0b00000000,
},
{
0b00000000,
0b01111000,
0b11001100,
0b11001100,
0b11101100,
0b01111000,
0b11011100,
0b11001100,
0b11001100,
0b01111000,
0b00000000,
0b00000000,
},
{
0b00000000,
0b01111000,
0b11001100,
0b11001100,
0b11001100,
0b01111100,
0b00011000,
0b00011000,
0b00110000,
0b01110000,
0b00000000,
0b00000000,
},
{
0b00000000,
0b00000000,
0b00000000,
0b00110000,
0b00110000,
0b00000000,
0b00000000,
0b00110000,
0b00110000,
0b00000000,
0b00000000,
0b00000000,
},
{
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
}};
//variabel pelengkap
uint8_t word[7][12];
int y;
uint8_t jam,menit,detik,textnya,tick;
>>> timer untuk horisontal sync PAL (64us) <<
Code:
void timer_init(void){
TCCR1B |= (1<<WGM12);
TIMSK |= (1<<OCIE1A);
OCR1A = 1280; //64*16;
TCCR1B |= (1<<CS10);
}
>> yang ini geser2 bit untuk nampilin angka dari Array <<
Code:
void geser(void)
{
PORTB = (textnya & 0x80) +0x8 ;
textnya <<=1;
PORTB = (textnya & 0x80) +0x8 ;
textnya <<=1;
PORTB = (textnya & 0x80) +0x8 ;
textnya <<=1;
PORTB = (textnya & 0x80) +0x8 ;
textnya <<=1;
PORTB = (textnya & 0x80) +0x8 ;
textnya <<=1;
PORTB = (textnya & 0x80) +0x8;
textnya <<=1;
PORTB = (textnya & 0x80) +0x8 ;
textnya <<=1;
PORTB = (textnya & 0x80) +0x8 ;
}
>> yang ini proses nulis tiap 1us dari frame horisontal 64us <<
Code:
void tulis(void){
//31 & 43 adalah batas tinggi karakter 12 scan/rasterline/vsync
//y adalah posisi rasterline(Vsync) yg sedang ditulis
if( rasterline > (31+y) && rasterline <= (43+y) ) {
_delay_us(8);
COL(0);
geser();
COL(1);
geser();
COL(2);
geser();
COL(3);
geser();
COL(4);
geser();
COL(2);
geser();
COL(5);
geser();
COL(6);
geser();
PORTB=0;
_delay_us(1);
fontline++; //pindah ke array selanjutnya
}
//jika tidak menulis
else {
_delay_us(8);
fontline = 0;
fontzoom=0;
}
// yang ini batas scannline trus bisa sisipkan proses
// memasukkan data ke memory
// sesuaikan karena kaskus merubah text &word; (hilangkan ' ; ')
if( rasterline > 311 )
{ memcpy_P(&word;[0],&font;[jam/10],12);
memcpy_P(&word;[1],&font;[jam],12);
memcpy_P(&word;[2],&font;[10],12);
memcpy_P(&word;[3],&font;[menit/10],12);
memcpy_P(&word;[4],&font;[menit],12);
memcpy_P(&word;[5],&font;[detik/10],12);
memcpy_P(&word;[6],&font;[detik],12);
}
}
// interupt 64us
ISR (TIMER1_COMPA_vect) {
rasterline = 0;
}
>> comparator untuk mendeteksi awal Vsync dan Hsync <<
Code:
SIGNAL(SIG_COMPARATOR)
{ //trik mendeteksi hsync dan vsync dengan melihat lama blanking
TCNT1=0; // reset timer
while(TCNT1<70); // wait 5us to see if H or V sync
if(!((ACSR>>ACO)&1)) { // its an H sync
TCNT1=0; // reset timer
rasterline++;
tulis();
}
else { // this a V sync
rasterline=0;
//sekalian aja ditambah timer untuk nambah detik
tick++;
if(tick >= 200){
tick=0;
detik++;
if(detik==60){
menit++;
detik=0;}
if(menit==60){
menit=0;
jam++;}
if (jam==24) jam=0;
}
}
}
>> Tombol untuk nambah jam dan geser2 posisi jam <<
Code:
void tombol(void)
{
if(bit_is_clear(PIND, PIND3))
{
jam++;
if(jam == 24) jam=0;
detik=0;
_delay_ms(200);
}
else if(bit_is_clear(PIND, PIND4))
{
menit++;
if(menit == 60) menit =0;
detik=0;
_delay_ms(200);
}
else if(bit_is_clear(PIND, PIND5)) //naik
{
y-=3;
if(y<1) y=1;
_delay_ms(200);
}
else if(bit_is_clear(PIND, PIND6)) //turun
{
y+=3;
if(y>300) y=300;
_delay_ms(200);
}
>> main program<<
Code:
int main() {
tick=0;
jam=22;
menit=19;
detik=44;
rasterline=0;
y=0; //variable posisi text
ACSR = (1<<ACIE)|(1<<ACIS0)|(1<<ACIS1); //analog comparator
DDRD &=~(1<<PD3) & ~(1<<PD4)&~(1<<PD5) & ~(1<<PD6) ; //tombol
// data text dan MISO, PB0 pada web asli dirubah jadi PB3 attiny
DDRB |= (1<<PB7)|(1<<PB3);
timer_init(); //idupin timer
set_sleep_mode(SLEEP_MODE_IDLE); //menghemat tenaga
sei();
for( ;; )tombol();
}
rangkaian ini cocok buat nambahin text ke kamera CCTV murah yg ga ada textnya, jadi bisa ditambahin jam atau text penanda nomer kamera

SELAMAT MENCOBA
0
