ahocoolAvatar border
TS
ahocool
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
DIGITAL ELECTRONICS HOBBY FORUM




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 08-06-2014 04:14
0
1M
8.6K
GuestAvatar border
Guest
Tulis komentar menarik atau mention replykgpt untuk ngobrol seru
Mari bergabung, dapatkan informasi dan teman baru!
Hobby & Community
Hobby & CommunityKASKUS Official
10.4KThread6.1KAnggota
Tampilkan semua post
ahocoolAvatar border
TS
ahocool
#3941
MENAMPILKAN JAM di TV
dengan ATTINY 2313


PART # 2



- bagian scanning line TV

untuk scanning line Tv kali ini, kita menggunakan teknik tanpa menghiraukan scanning ganjil dan genap, karena kita hanya ingin menampilkan digit (bukan gambar). jadi scriptingnya lebih simple

Code:

[FONT="Courier New"]//inisialisasi awal
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>

#define FONTHEIGHT 12

#define HSYNC PORTB=0;
#define BLACK PORTB=1;

static uint8_t fontline = 0;
static uint8_t fontzoom = 0;

uint8_t text[20];
int tick;
uint8_t jam,menit,detik;

//inisialisasi timer
void timer_init(void){

TCCR1B |= (1<<WGM12);
TIMSK |= (1<<OCIE1A);
OCR1A = 64*16; // 64 us per lineraster
TCCR1B |= (1<<CS10); // full speed
}

ISR (TIMER1_COMPA_vect) {
static uint16_t rasterline=0;


HSYNC; //sinkronisasi horizontal

if( rasterline > 60 && rasterline <= 120 ) { //tampilan jam:menit
_delay_us(4);
BLACK;
_delay_us(8);
//ditampilkan 5 karakter maksimal (karena keterbatasan pembagian clock)
kolom(0); //puluhan jam
kolom(1); //satuaj jam
kolom(2);// :
kolom(3);//puluhan menit
kolom(4);//satuan jam


BLACK;
fontline++;
if(fontline % 6 ==0)fontzoom++; // efek memperbesar angka



}

else if( rasterline > 140 && rasterline <= 228 ) { //tampilan detik
_delay_us(4);
BLACK;
_delay_us(21);
kolom(6); // puluhan detik
kolom(7);//puluhan menit
BLACK;

fontline++;
if(fontline % 8 ==0)fontzoom++; //biar gede digitnya


}
// sinkronisasi vertikal , ga perlu perhatikan ganjil genap
else if( rasterline >= 0 && rasterline < 5 ) {
_delay_us(27);
BLACK;
_delay_us(5);
HSYNC;
_delay_us(27);
BLACK;
} else if( (rasterline >= 5 && rasterline <= 10) ) {
_delay_us(2);
BLACK;
_delay_us(28);
HSYNC;
_delay_us(2);
BLACK;
} else if( rasterline >311-6 ) {
_delay_us(2);
BLACK;
_delay_us(28);
HSYNC;
_delay_us(2);
BLACK;
} else {
_delay_us(2);
BLACK;
fontline = -1;
fontzoom=0;
}

rasterline++; //variabel baris layar vertikal

if( rasterline > 311 ) // maksimum baris
{ rasterline = 0;
//masukkan nilai waktu ke memory
text[0]=jam/10;
text[1]=jam;
text[2]=10;
text[3]=menit/10;
text[4]=menit;
text[5]=11;
text[6]=detik/10;
text[7]=detik;


}


//perhitungan detik , memanfaatkan counter utama jadi simple
tick++;

if(tick == 15625){
tick=0;
detik++;
if(detik==60){
menit++;
detik=0;}

if(menit==60){
menit=0;
jam++;}
if (jam==24) jam=0;
}
}

[/FONT]






- bagian penampil karakter

Code:


[FONT="Courier New"]void kolom(uint8_t a)
{uint8_t textnya;

textnya=pgm_read_byte(&font;[text[a]][fontzoom]);



PORTB= (textnya & 0x80)+1;
textnya <<=1;
PORTB= (textnya & 0x80)+1;
textnya <<=1;
PORTB= (textnya & 0x80)+1;
textnya <<=1;
PORTB= (textnya & 0x80)+1;
textnya <<=1;
PORTB= (textnya & 0x80)+1;
textnya <<=1;
PORTB= (textnya & 0x80)+1;
textnya <<=1;
PORTB= (textnya & 0x80)+1;
textnya <<=1;
PORTB= (textnya & 0x80)+1;
textnya <<=1;[/FONT]



}



kedua bagian diatas sangat berhubungan erat, dimana fungsinya melakukan perhitungan baris-perbaris dari layar raster/vertikal dan dalam waktu bersamaan menampilkan data memory digit angka per kolom dari bit yg diwakilinya

cara yg digunakan adalah memanggil byte dari digit, semisal digit 9, maka ada 12 deret byte yg perlu di tampilkan secara vertikal maupun hoorisontal.

caranya adalah dengan menampilkan secara bitbang ( kalo AT mega bisa memakai SPI), dimana bit ditampilkan bergeser dari bit ke 7(MSB) terus sampai ke bit terakhir(LCB) ( secara sinkron dengan waktu)

rumus yg digunakan adalah :

pindahkan isi memory digit per baris font

textnya=pgm_read_byte(&font;[text[a]][fontzoom]);

dimana : a= digit , fontzoom = baris dari font (0-12)

tampilkan bit ke 8 (karena PB7 yg digunakan), selanjutnya digeser 8 kali sehingga keluar berurutan. Ditulis 8x (jangan di loop karena lambat)

PORTB= (textnya & 0x80)+1;
textnya <<=1;

.....................8x


dari topik pembahasan terdahulu kita ingat kalo ingin menampilkan warna PUTIH maka nilai kedua BIT output ke TV adalah 1 1, jadi dengan rumus sederhana dapat diperoleh hasil warna putih sesuai dengan isi memory digit


-bersambung
0
Ikuti KASKUS di
© 2023 KASKUS, PT Darta Media Indonesia. All rights reserved.