* SELAMAT DATANG DI SEKAWAN SERVIS ELECTRONIC * SERVIS:TV,COMPUTER,DVC,Ampli fier dll. * Spesialis Kulkas,AC Rumah, AC mobil dan Mesin Cuci. * Alamat: Taraman Sidoharjo Sragen *

SEK4W4N SERVIS ELECTRONIC


/* Display Two 7 Segmen */
/* Compiler : MIDE-51 */
#include < at89C2051.h > /* Include 89C2051 header file */
char num[ ] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void wait (void) /* wait function */

{ ; }

void main( void ){

unsigned char cnt, right;

unsigned int i;

P1 = 0; /* ZERO port P1 & port P3 */

P3 = 0;

for( ;; ){

          for (right=0;right<3;right++)

         {

           P3 = right;

           for (cnt=0;cnt<10;cnt++)

           {

           P1 = num[cnt];

           for (i = 0; i < 10000; i++)

           {

           wait(); /* delay for half second */

           }

           }

           }

           }

           }
          
   

Pemrograman LCD Karakter 2×16 Dengan Mikrokontroler AVR

Kali ini, saya akan membahas sedikit mengenai pemrograman LCD Karakter 2×16 dengan mikrokontroler AVR. Mikrokontroler yang saya gunakan dalam pembahasan tulisan ini yaitu seri ATmega32.
Pada desain skematik LCD, Anda harus menghubungkan keseluruhan pin-pin data dan command LCD ke port mikrokontroler yang sama (misal Port A0-A7).  Pada contoh ini, saya menggunakan metode interfacing 4-bit data (LCD_4 – LCD_7). Sehingga pemilihan pin pada mikrokontroler disesuaikan dengan CVAVR di atas menjadi seperti berikut ini.
Perhatikan PA0-PA7 pada skema rangkaian! PA1 tidak digunakan, karena R/W pada LCD kita fungsikan sebagai “Write” saja sehingga cukup menghubungkan pin R/W pada LCD ke ground. Sedangkan PB3 kita gunakan sebagai pengontrol backlight pada LCD (LCD_BL).
CodeWizard akan meng-generate firmware dengan include “lcd.h”. Nah, file ini tidak saya gunakan karena saya membuat sendiri file include “lcdb.h” yang saya lampirkan pada akhir tulisan ini.

Berikut ini contoh firmware untuk pemrograman LCD Karakter 2×16.
latihan_lcd.c
#include <mega32.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcdb.h>
char sz[40];
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A 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
PORTA=0×00;
DDRA=0×00;
// Port B 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
PORTB=0×00;
DDRB=0×00;
// 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;
// LCD module initialization
LCD_Init();
// Global enable interrupts
#asm(“sei”)
//=============================================
while(1)
{
sprintf(sz, ” Ini Baris ke-1 \n Ini Baris ke-2 “);
LCD_printf(sz);
}
}
Berikut ini file library yang dibutuhkan oleh firmware di atas.
lcdb.c
#include <mega32.h>
#include <delay.h>
#include <stdio.h>
#include <string.h>
#define Clear_Display 0×01
#define Home 0×02
#define Entry_Mode 0×04
#define Set_Display 0×08
#define Set_Cursor 0×10
#define Function 0×20
#define Decrement 0×00
#define Increment 0×02
#define Shift_Off 0×00
#define Shift_On 0×01
#define Display_Off 0×00
#define Display_On 0×04
#define Cursor_Off 0×00
#define DCursor_On 0×02
#define Blink_Off 0×00
#define Blink_On 0×01
#define Four_Bits 0×00
#define Eight_Bits 0×10
#define One_Line 0×00
#define Two_Line 0×08
#define Font5x7 0×00
#define Font5x10 0×04
// Pins
#define LCD_pinRS            0×80                                // PA0
#define PORT_LCD_pinRS            PORTA
#define    LCD_pinRD            0×40                                // PA1
#define PORT_LCD_pinRD            PORTA
#define    LCD_pinEN            0×20                                // PA2
#define PORT_LCD_pinEN            PORTA
#define    LCD_BL_CTRL            0×10                                // PA3
#define PORT_LCD_BL_CTRL        PORTA
// Macros
#define    SET_LCD_pinRS            PORT_LCD_pinRS |= LCD_pinRS
#define RES_LCD_pinRS            PORT_LCD_pinRS &= ~LCD_pinRS
#define SET_LCD_pinRD            PORT_LCD_pinRD |= LCD_pinRD
#define RES_LCD_pinRD            PORT_LCD_pinRD &= ~LCD_pinRD
#define SET_LCD_pinEN            PORT_LCD_pinEN |= LCD_pinEN
#define RES_LCD_pinEN            PORT_LCD_pinEN &= ~LCD_pinEN
#define SET_LCD_BL_CTRL            PORT_LCD_BL_CTRL |= LCD_BL_CTRL
#define RES_LCD_BL_CTRL            PORT_LCD_BL_CTRL &= ~LCD_BL_CTRL
void LCD_Init(void)
{
DDRA = 0xff;
delay_ms(3);
LCD_CmdWrite(Function+Four_Bits+Two_Line+Font5x7);
delay_ms(3);
LCD_CmdWrite(Function+Four_Bits+Two_Line+Font5x7);
delay_ms(3);
LCD_CmdWrite(Function+Four_Bits+Two_Line+Font5x7);
delay_ms(3);
LCD_CmdWrite(Clear_Display);
delay_ms(3);
LCD_CmdWrite(Entry_Mode+Increment+Shift_Off);
delay_ms(3);
LCD_CmdWrite(0x0c);                                                // display on, cursor off, non-blink
delay_ms(3);
LCD_CmdWrite(0×02);                                                // cursor home
}
void LCD_CmdWrite(unsigned char uc)
{
char DL, DH;
DH=(((uc&0×80)>>7)+((uc&0×40)>>5)+((uc&0×20)>>3)+((uc&0×10)>>1));
DL=(((uc&0×08)>>3)+((uc&0×04)>>1)+((uc&0×02)<<1)+((uc&0×01)<<3));
RES_LCD_pinRS;
RES_LCD_pinRD;
SET_LCD_pinEN;         // Enable LCD
PORTA &= 0xf0;
PORTA |= DH;        // kirim High Nibble
RES_LCD_pinEN;         // beri pulsa LCD EN
LCD_delay_5us();
SET_LCD_pinEN;
PORTA &= 0xf0;
PORTA |= DL;        // kirim Low Nibble
RES_LCD_pinEN;                    // beri pulsa LCD EN
LCD_delay_3ms();
}
void LCD_DataWrite(unsigned char uc)
{
char DL, DH;
DH=(((uc&0×80)>>7)+((uc&0×40)>>5)+((uc&0×20)>>3)+((uc&0×10)>>1));
DL=(((uc&0×08)>>3)+((uc&0×04)>>1)+((uc&0×02)<<1)+((uc&0×01)<<3));
SET_LCD_pinRS;
RES_LCD_pinRD;
SET_LCD_pinEN;                     // Enable LCD
PORTA &= 0xf0;
PORTA |= DH;        // kirim High Nibble
RES_LCD_pinEN;                    // beri pulsa LCD EN
LCD_delay_5us();
SET_LCD_pinEN;
PORTA &= 0xf0;
PORTA |= DL;        // kirim Low Nibble
RES_LCD_pinEN;                     // beri pulsa LCD EN
LCD_delay_3ms();
}
void LCD_DataRead(unsigned char uc)
{
char DL, DH;
DH=(((uc&0×80)>>7)+((uc&0×40)>>5)+((uc&0×20)>>3)+((uc&0×10)>>1));
DL=(((uc&0×08)>>3)+((uc&0×04)>>1)+((uc&0×02)<<1)+((uc&0×01)<<3));
SET_LCD_pinRS;
SET_LCD_pinRD;
SET_LCD_pinEN;                     // Enable LCD
PORTA &= 0xf0;
PORTA |= DH;        // kirim High Nibble
RES_LCD_pinEN;                    // beri pulsa LCD EN
LCD_delay_5us();
SET_LCD_pinEN;
PORTA &= 0xf0;
PORTA |= DL;        // kirim Low Nibble
RES_LCD_pinEN;                     // beri pulsa LCD EN
LCD_delay_3ms();
}
void LCD_delay_5us(void)
{
unsigned char j;
for(j = 0; j < 5; j++);
}
void LCD_delay_3ms(void)
{
unsigned char i, j;
for(j = 0; j < 100; j++)
for(i = 0; i < 30; i++);
}
void LCD_delay_5ms(void)
{
unsigned char i, j;
for(j = 0; j < 100; j++)
for(i = 0; i < 50; i++);
}
void LCD_delay_10ms(void)
{
unsigned char i, j;
for(j = 0; j < 100; j++)
for(i = 0; i < 100; i++);
}
void LCD_printf(unsigned char *pc)
{
LCD_CmdWrite(0×80);                                                // 1st line, 1st position
while(*pc != NULL){
if (*pc == ‘\n’){                                            // next line?
LCD_CmdWrite(0xc0);                                        // 2nd line, 1st position
}
else{
LCD_DataWrite(*pc);                                        // put character
}
pc++;
}
}
void LCD_Blink(void)
{     unsigned char aaa;
SET_LCD_BL_CTRL;
for(aaa = 0; aaa < 100; aaa++)                                    // delay 1s
LCD_delay_10ms();
RES_LCD_BL_CTRL;
for(aaa = 0; aaa < 50; aaa++)                                    // delay 1s
LCD_delay_10ms();
}
void LCD_Light_On(void)
{      unsigned char aaa;
SET_LCD_BL_CTRL;
for(aaa = 0; aaa < 50; aaa++)                                    // delay 1s
LCD_delay_10ms();
}
void LCD_Light_Off(void)
{      unsigned char aaa;
RES_LCD_BL_CTRL;
for(aaa = 0; aaa < 50; aaa++)                                    // delay 1s
LCD_delay_10ms();
}
Tulisan terkait:



Mikrokontroler AVR ATmega128/64

Kali ini saya ingin berbagi sedikit ilmu tentang mikrokontroler seri AVR, tepatnya ATmega128. Semoga bisa jadi bahan referensi buat ‘micro lovers’ yg lagi laver ilmu (translate: laver = lapar, red). Sebenarnya, saya juga belum lama pake mikrokontroler AVR, pas di kantor diminta merancang KWH meter prabayar pake ATmega128 yang sebelumnya saya rancang pake uPSD3354 (buatan ST micro), nah mulai deh buka-buka buku pemrograman dan googling di internet, sampai akhirnya terciptalah versi AVR dari proyek KWH meter tersebut.
Ok, langsung aja kita kenalan sama micro-nya dimulai dari fitur2 ATmega128.
Fitur ATmega128:
  • Flash 128 kByte, lumayan gede buat nyimpan file objek
  • EEPROM 4 kByte
  • 53 I/O port
  • PWM
  • ADC
  • ISP/JTAG interface programming
Minimum sistem ATmega128:
minimum_atmega128
Minimum sistem di atas dirancang untuk pemrograman ISP (In-System Programming). Selain untuk ATmega128, rangkaian ini bisa juga digunakan untuk ATmega64 karena konfigurasi pin-nya sama.  Khusus untuk MISO dan MOSI ISP tidak menggunakan pin MISO/MOSI yg sudah disediakan pada chip.  Sebagai gantinya, kita gunakan pin PDI sebagai MOSI dan PDO sebagai MISO. Kalau rajin baca datasheet, skema pemrograman ISP persis seperti ini. Nah, coba deh dibikin tuch rangkaiannya, tinggal download aja, gampang kan?
Kabel ISP:
kabel_isp_avr
Software Compiler/Downloader:
Banyak sekali software yg bisa digunakan untuk memprogram mikrokontroler AVR. Skema kabel ISP di atas cocok digunakan jika menggunakan Code Vision AVR atau PonyProg.
code_vision_avr
ponyprog

Software Programmer AT89C2051

AT89C2051 termasuk keluarga MCS-51 yang kompatible dengan arsitektur chip intel 8051 baik hardware pin input/output maupun struktur mnemonic-nya. IC ini memiliki 20 pin dengan jumlah port I/O sebanyak 15. kapasitas Flash Memory sebesar 2 kByte yang dapat ditulis/baca sebanyak +- 1000 kali. Internal RAM sebesar 128 byte. Datasheet AT89C2051 dapat Anda download di sini.

Pemrograman IC ini dapat dilakukan secara in-system programming (ISP) melalui port 3. Salah satu software programmer yang dapat digunakan untuk tipe ic ini yaitu IC-Prog yang dapat Anda download di sini. Sebaiknya Anda juga mempersiapkan kabel data untuk keperluan tersebut. Untuk lebih sederhana, Anda dapat mempergunakan port paralel pada PC Anda. Skema kabel data programmer dapat Anda download di sini.
Download Link:

Cara Mudah Menguasai Mikrokontroler

“Mikrokontroler”, sebuah kata yang sangat menakutkan bagi saya sewaktu mengajukan judul tugas akhir setahun yang lalu. Soalnya, waktu kuliah Sistem Mikrokontroler dulu, saya cuma dapat nilai C (oon ya.. :-) ), itu pun setelah remedial. Hingga pada semester akhir, tiba saatnya untuk mengajukan judul TA (Tugas Akhir). Tentu saja karena alasan tersebut, pada proposal judul TA  saya, tidak ada kata “mikrokontroler” di dalamnya. Namun, kemudian dosen pembimbing menyarankan untuk menambahkan komponen mikrokontroler pada judul terakhir yang saya ajukan (setelah 3 kali ganti judul). Akhirnya, dengan sangat terpaksa judul TA itu saya bubuhi kata “mikrokontroler”, sebuah kata yang sangat saya hindari. Untuk itu, saya gali semua informasi yang berhubungan dengan “mikrokontroler” di internet. Tidak tanggung-tanggung, saya minta seorang pakar dari LIPI Bandung untuk menjadi pembimbing.
Dengan serius, saya mulai mempelajari dasar-dasar pemrograman assembly melalui situs tutorial di internet. Selain itu, beberapa buku mikrokontroler pun saya lahap. Namun, ternyata saya malah makin bingung dengan segudang teori yang harus saya kuasai. Saya teringat dengan perkataan seorang pakar pendidikan “Dewey” yang saya dengar dari dosen Psikologi Pendidikan saya, beliau mengatakan “Learning by Doing” (belajar sambil melakukan), jadi tidak hanya teori saja yang dipelajari, tapi lebih baik jika disertai praktek. Itulah yang selanjutnya saya lakukan. Berbekal buku panduan, software compiler dan programer, kabel ISP buatan sendiri, dan source code assembly (copy paste di internet), saya mulai praktek, praktek, dan praktek. Saya ingat waktu itu, saya mulai dengan memprogram LCD karakter. Tentu saja, percobaan pertama tidak berhasil sebagaimana mestinya. LCD-nya tetap blank, tidak ada satu pun karakter yang muncul, yang ada hanyalah test screen berupa kotak hitam yang muncul di layar LCD.
test screen LCD
test screen LCD
Setelah ratusan kali trial and error, akhirnya BERHASIL!! Sebuah karakter muncul di layar.
Alhamdulillah.. sejak saat itu, semuanya terasa semakin mudah. Rutin-rutin program yang lain pun makin mudah ditelusuri kesalahannya hingga dapat berjalan sebagaimana mestinya. Sebuah nasihat yang baik dari pembimbing saya di LIPI, “Buat program sesederhana mungkin! Mulailah secara bertahap, berikan catatan-catatan kecil untuk mempermudah menelusuri kesalahan program!”. Oh iya, saya lupa menyebutkan, source code assembly banyak tersedia di internet, jadi untuk pemula, lebih baik menerapkan teori “ATM”-nya Ustad Abu Yahya, A = Amati, T = Teliti, dan M = Modifikasi. Jangan sekali-kali menelan mentah-mentah souce code orang lain karena dijamin BELUM TENTU BEKERJA di sistem yang kita buat, apalagi jika hardwarenya berbeda, selain itu juga melanggar HAK CIPTA.
Lanjut cerita, selama beberapa bulan “ta’aruf” dengan mikrokontroler, hingga hampir tiap malam begadang akhirnya saya berhasil menyelesaikan TA tersebut. Tidak hanya itu, semua dosen penguji memberikan kesan positif terhadap TA saya dan membubuhkan nilai “A” di ijazah sarjana saya, sebuah nilai yang terlalu sempurna bagi pembenci “mikrokontroler” seperti saya. Hingga akhirnya, bulan april 2008 lalu saya diwisuda, sebulan kemudian saya diterima bekerja sebagai RND di sebuah perusahaan telekomunikasi di Bandung. Alhamdulillah, saat ini setiap hari saya dapat bereksperimen dengan mikrokontroler. :)

Software AT89ISP

Untuk mengisi file objek (.hex) pada sistem mikrokontroler, diperlukan software downloader. Untuk mikrokontroler seri AT89Sxx dapat menggunakan software keluaran atmel. Software ini saya peroleh secara gratis di internet, dapat digunakan untuk kabel data mikrokontroler atmel AT89s. File sudah berisi rangkaian skematik, program, dan user manual. Selamat mencoba!

0 komentar: