- 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 08-06-2014 04:14
0
1M
8.6K
Guest
Tulis komentar menarik atau mention replykgpt untuk ngobrol seru
Mari bergabung, dapatkan informasi dan teman baru!
Hobby & Community
10.4KThread•6.1KAnggota
Tampilkan semua post
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
- bagian penampil karakter
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
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