Subscribe via email

Enter your email address:

Delivered by FeedBurner

Bascom AVR, RS232

YOwww kali ini kita akan bermain komunikasi RS232 antara microcontroller dengan PC, bikin si MCU (microcontroller) biar bisa “ngobrol” ama si PC.

Pertama kita harus tahu kalau MCU level tegangannya TTL 5volt, agar mcu bisa “ngobrol” ama PC, kita menggunakan converter tegangan TTL ke level tegangan RS232.

Converter yang saya gunakan disini adalah MAX232, yang sudah ada di board SmartAVR system so tinggal bikin program aja deh ak… Smile with tongue out

Langsung aja bikin file baru di BASCOM AVR: FILE--->NEW atau CTRL+N

Tulis program berikut,

CONTOH RS232-1:

$regfile = "m16def.dat"
$crystal = 11059200
$baud = 9600



Do
   Print "connection ok"
   Waitms 1000
Loop

End

Buka Terminal Emulator, klik TOOLS--->TERMINAL EMULATOR atau tekan CTRL+T

Hubungkan kabel RS232 dari mcu ke port serial RS232 PC, port ini berbentuk DB9.

image

Jika berhasil pada Terminal Emulator akan muncul tulisan “connection ok”.

image

Program pada CONTOH RS232-1, digunakan untuk mengirim tulisan “connection ok” ke PC. Karena ada waitms 1000 =  delay 1detik, maka tulisan “connection ok” dikirim tiap 1 detik.

Error yang biasa terjadi karena salah setting Terminal EMulator. Berikut ini setting yang saya gunakan:

image

Com Port: port serial yang digunakan, disini saya gunakan port COM2 (lihat di device manager, com port yang tersedia di PC anda)

Baudrate: kecepatan transfer data antara mcu dengan PC. Pada mcu nilai baudrate di set pada baris program $baud = 9600


Jika tadi yang “ngomong” hanya si MCU sedangkan si PC cuman dengerin, sekarang kita akan buat program agar si MCU dan si PC bisa ngobrol 2 arah.

Contoh RS232-2:

$regfile = "m16def.dat"
$crystal = 11059200
$baud = 9600

Dim Angka As Integer


Input "masukin angka lalu tekan Enter..." , Angka
Print "yg loe ketik angka: " ; Angka

Do
   Input "ketik lagi, jangan lupa d Enter..." , Angka
   Print "yg loe ketik angka: " ; Angka
Loop

End

Tampilan Terminal Emulator  saat program dah running di MCU

image

 

Dari program CONTOH2, yang perlu dibahas mungkin baris yang ada kata “input”

Input "masukin angka lalu tekan Enter..." , Angka
Print "yg loe ketik angka: " ; Angka

Command “Input” berarti MCU akan memasukkan nilai yang masuk lewat serial RS232, dalam contoh ini nilai yg masuk adalah angka-angka yang diketik di Terminal Emulator. Nilai yang diketik dianggap valid saat ENTER ditekan.

Nilainya masuk kemana????

Angka-angka yang diketik akan masuk ke variabel “Angka”, variabel ini terlebih dahulu di”daftar”kan diawal program yaitu

Dim Angka As Integer

Untuk latian silahkan di utak atik baris-baris program diatas.  Hapus/ganti salah satu huruf atau tanda baca(koma, petik, titikkoma) untuk lebih memahami fungsi masing2 code program Nerd smile

 

Peralatan yang digunakan dalam latian ini:

  1. Smart AVR System
  2. USB Downloader
  3. USBtoRS232 (konverter port USB menjadi port RS232 karena saya pake laptop yang nggak ada port serial RS232 nya)
Selengkapnya...

BASCOM-AVR, MEGA16, LCD 16*2

Kita akan mencoba menampilkan karakter di LCD 16*2 dan menggunakan LCD designer untuk menampilkan karakter2 unik buatan kita sendiri Flirt male. Pada bagian akhir kita juga akan berlatih membuat program yang lebih effisien dengan memanfaatkan perulangan FOR-NEXT.

Untuk menampilkan karakter di LCD, tuliskan code program berikut:

Program LCD1

 

$crystal = 11059200
$lib "lcd4busy.lbx"

Config Lcd = 16 * 2
Const _lcdport = Portb
Const _lcdddr = Ddrb
Const _lcdin = Pinb
Const _lcd_e = 2
Const _lcd_rw = 1
Const _lcd_rs = 0
Cursor Blink

Do
   Cls
   Waitms 500
   Lcd "   AVRku.com   "
   Lowerline
   Lcd "  INDOLAB.net  "
   Waitms 10000

Loop
End

Gambar tampilan hasil program diatas seperti ini:

image

Pembahasan program LCD1:

$regfile = "m16def.dat"     ' menentukan chip AVR yang kita gunakan, disini menggunakan ATmega16
 
$crystal = 11059200   'menentukan frekuensi xtal yang digunakan, kita gunakan xtal 11,0592MHz
 
$lib "lcd4busy.lbx"   'library untuk LCD
 
Config Lcd = 16 * 2   'menentukan jenis LCD yang digunakan, dalam hal ini LCD 16*2
 
Const _lcdport = Portb   'LCD dihubungkan dengan PORTB 
Const _lcdddr = Ddrb
Const _lcdin = Pinb
 
Const _lcd_e = 2 ' pin Enable LCD dihubungkan ke PORTB.2 
 
Const _lcd_rw = 1   'pin RW LCD dihubungkan ke PORTB.1
 
Const _lcd_rs = 0  'pin RW LCD dihubungkan ke PORTB.0
 
Cursor Blink   'membuat cursor LCD berkedip
 
Do
 
   Cls   'Clear LCD Screen
 
   Waitms 500
 
   Lcd "   AVRku.com   "   'menampilkan tulisan AVRku.com di LCD
 
   Lowerline   'menuju baris bawah LCD
 
   Lcd "  INDOLAB.net  "    'menampilkan tulisan INDOLAB.net
 
   Waitms 10000
 
Loop   'perintah untuk mengulangi program setelah "Do"
End

Selanjutnya kita akan menggunakan LCD designer untuk membuat karakter2 unik dan menampilkannya di LCD.

Tekan CTRL+L ata u klik Tool—>LCD Designer

 

image

Klik Ok, akan menghasilkan baris program seperti berikut:

Deflcdchar ?,32,4,4,31,4,4,32,32' replace ? with number (0-7)

Rubah “?” menjadi  angka antara 0 sampai 7. Ini untuk memberi “nama”  karakter yang telah kita buat sehingga memudahkan saat kita akan menggunakan karakter tersebut. Misalnya:

Deflcdchar 0,32,4,4,31,4,4,32,32

Angka “0” merupakan nama yang kita berikan untuk karakter. Jika ingin menampilkannya di LCD kita cukup menulis:

 LCD Chr(0)

Karakter2 yang akan saya gunakan sebagai berikut:

'karakter bintang berputar
Deflcdchar 0 , 32 , 4 , 4 , 31 , 4 , 4 , 32 , 32
Deflcdchar 1 , 32 , 2 , 20 , 14 , 5 , 8 , 32 , 32
Deflcdchar 2 , 32 , 2 , 26 , 4 , 11 , 8 , 32 , 32
Deflcdchar 3 , 32 , 17 , 10 , 4 , 10 , 17 , 32 , 32
Deflcdchar 4 , 32 , 8 , 11 , 4 , 26 , 2 , 32 , 32
Deflcdchar 5 , 32 , 8 , 5 , 14 , 20 , 2 , 32 , 32


'karakter logo AVRku.com - IndoLab.net
Deflcdchar 6 , 30 , 6 , 10 , 16 , 7 , 3 , 5 , 8

Untuk menampilkannya di LCD, kita perlu menuliskan program berikut:

Program LCD2

$regfile = "m16def.dat"
$crystal = 11059200
$lib "lcd4busy.lbx"


'karakter bintang berputar
Deflcdchar 0 , 32 , 4 , 4 , 31 , 4 , 4 , 32 , 32
Deflcdchar 1 , 32 , 2 , 20 , 14 , 5 , 8 , 32 , 32
Deflcdchar 2 , 32 , 2 , 26 , 4 , 11 , 8 , 32 , 32
Deflcdchar 3 , 32 , 17 , 10 , 4 , 10 , 17 , 32 , 32
Deflcdchar 4 , 32 , 8 , 11 , 4 , 26 , 2 , 32 , 32
Deflcdchar 5 , 32 , 8 , 5 , 14 , 20 , 2 , 32 , 32


'karakter logo AVRku.com - IndoLab.net
Deflcdchar 6 , 30 , 6 , 10 , 16 , 7 , 3 , 5 , 8

Config Lcd = 16 * 2
Const _lcdport = Portb
Const _lcdddr = Ddrb
Const _lcdin = Pinb
Const _lcd_e = 2
Const _lcd_rw = 1
Const _lcd_rs = 0
Cursor Off



Do
   Cls
   Lcd Chr(6)
   Lcd Chr(32)
   Lcd "AVRku-IndoLab"
   Lcd Chr(6)

   Locate 2 , 6
   Lcd Chr(0)
   Lcd Chr(0)
   Lcd Chr(0)
   Lcd Chr(0)
   Waitms 100

   Locate 2 , 6
   Lcd Chr(1)
   Lcd Chr(1)
   Lcd Chr(1)
   Lcd Chr(1)
   Waitms 100

   Locate 2 , 6
   Lcd Chr(2)
   Lcd Chr(2)
   Lcd Chr(2)
   Lcd Chr(2)
   Waitms 100

   Locate 2 , 6
   Lcd Chr(3)
   Lcd Chr(3)
   Lcd Chr(3)
   Lcd Chr(3)
   Waitms 100

   Locate 2 , 6
   Lcd Chr(4)
   Lcd Chr(4)
   Lcd Chr(4)
   Lcd Chr(4)
   Waitms 100

   Locate 2 , 6
   Lcd Chr(5)
   Lcd Chr(5)
   Lcd Chr(5)
   Lcd Chr(5)
   Waitms 100


Loop
End

Hasil tampilannya:

image

Ini videonya:

http://www.youtube.com/watch?v=Z9XGiYB0-_4


Program LCD2 di atas bisa di tulis lebih simple seperti ini:

 

Program LCD3

$regfile = "m16def.dat"
$crystal = 11059200
$lib "lcd4busy.lbx"


'karakter bintang berputar
Deflcdchar 0 , 32 , 4 , 4 , 31 , 4 , 4 , 32 , 32
Deflcdchar 1 , 32 , 2 , 20 , 14 , 5 , 8 , 32 , 32
Deflcdchar 2 , 32 , 2 , 26 , 4 , 11 , 8 , 32 , 32
Deflcdchar 3 , 32 , 17 , 10 , 4 , 10 , 17 , 32 , 32
Deflcdchar 4 , 32 , 8 , 11 , 4 , 26 , 2 , 32 , 32
Deflcdchar 5 , 32 , 8 , 5 , 14 , 20 , 2 , 32 , 32


'karakter logo AVRku.com - IndoLab.net
Deflcdchar 6 , 30 , 6 , 10 , 16 , 7 , 3 , 5 , 8

Config Lcd = 16 * 2
Const _lcdport = Portb
Const _lcdddr = Ddrb
Const _lcdin = Pinb
Const _lcd_e = 2
Const _lcd_rw = 1
Const _lcd_rs = 0
Cursor Off


Declare Sub Putar_bintang

Do
   Cls
   Lcd Chr(6)
   Lcd Chr(32)
   Lcd "AVRku-IndoLab"
   Lcd Chr(6)
   Call Putar_bintang



Loop

Sub Putar_bintang
   Local Putar As Byte , Jumlah As Byte

   For Putar = 0 To 5
      Locate 2 , 6
      For Jumlah = 1 To 4
         Lcd Chr(putar)
      Next
      Waitms 100
   Next

End Sub

End

Dalam program LCD3, kita menggunakan subrutin yang diberi nama Putar_bintang. Di dalam subrutin ini, command untuk menulis karakter ke LCD –>Lcd Chr(…), dipanggil beberapa kali menggunakan perulangan FOR-NEXT.  Baris program yang ada diantara  FOR dan NEXT akan diulang sesuai pernyataan yang dibentuk oleh TO.

Contoh perulangan1:

      For Jumlah = 1 To 4
         Lcd Chr(putar)
      Next

Baris program yang diulang  yaitu Lcd Chr(putar). Berapa kali baris ini diulang?

Liat baris program FOR Jumlah = 1 TO 4.

Artikan baris program ini secara harfiah.

FOR Jumlah=1 to 4 –> Untuk Jumlah sama dengan 1 sampai 4.

Nilai Jumlah ditambah, mulai dari 1 sampai menuju 4. Setiap  Jumlah berubah nilai maka baris program Lcd Chr (putar) dikerjakan.

Dari 1 sampai 4 berarti  1—>2—>3—>4  sama dengan ada  4 kali pengulangan.

 

Contoh perulangan2:

   For Putar = 0 To 5
      Locate 2 , 6
      For Jumlah = 1 To 4
         Lcd Chr(putar)
      Next
      Waitms 100
   Next

Untuk perulangan FOR Putar = 0 To 5, terjadi 6 kali pengulangan mulai dari 0—>1—>2—>3—>4—>5

yang diulang adalah baris program:

      Locate 2 , 6
      For Jumlah = 1 To 4
         Lcd Chr(putar)
      Next
      Waitms 100

Dalam perulangan Contoh1, Lcd Chr(putar) diulang 4 kali.

Pada Contoh2, baris program untuk contoh1 di ulang 6 kali.

Berarti Lcd Chr(putar) diulang sebanyak 4*6 = 24 kali.

 

Lihat lagi program LCD2, untuk menampilkan karakter bintang{karakter-karakter DefLcdChr (0—>5)}, perintah Lcd Chr(0—>5) kita tulis berulang-ulang  satupersatu. Hayoo coba dihitung berapa kali? Flirt male

Selengkapnya...

Pengenalan BASCOM AVR

    Dalam contoh ini kita akan berlatih merubah kongifurasi BASCOM AVR sesuai dengan minsys AVR yang kita gunakan dan membuat program sederhana untuk menyalakan LED, menggeser nyala LED dan

    membaca penekanan tombol.

    1. Membuat Project Baru:
     Klik File—>New2.Menentukan konfigurasi sistem(chip, baudrate, I/O dll.):

    A. Options—> Compiler

    clip_image002

    B. Chip: menentukan chip AVR yang digunakan, karena saya memakai DI-Smart AVR 16 maka saya gunakan m16def.dat clip_image004

    C.Options—>Programmer: menentukan jenis programmer/downloader yang digunakan. Di sini saya menggunakan usb downloader dengan firmware AVR910.

    clip_image006

    3. Test setting programmer:

    untuk mengetahui settning programmer udah sesuai apa belum klik Program—>Send to Chip—> Manual Program

    clip_image008

    Pilih Chip—>Identify. Jika setting sudah benar maka akan tampil jenis chip yang kita gunakan dan propertiesnya

    clip_image010

    clip_image012

     

     

    4. Membuat code program untuk menggeser nyala LED ke kanan:

    $regfile = "m16def.dat"
    
    $crystal = 11059200
    
    Config Portc = Output
    
    Portc = &B1111_1110
    
    Do
    
    Rotate Portc , Right , 1
    
    Waitms 500
    
    Loop
    
    End
    Tekan F7 untuk men COMPILE.

    Jika tidak ada ERROR tekan F4, lalu pilih ERASE and PROGRAM CHIP

    clip_image014

    clip_image016

    Gambar di atas adalah tampilan program saat di running.

    A. Pembahasan program:

    $regfile = "m16def.dat"

    Menentukan chip AVR yang kita gunakan, saya menggunakan ATMEGA16. Menggunakan chip AVR yang lain harus merubah baris ini dan juga konfigurasi compiler yang dibahas pada point 2.B.

    Misal kita menggunakan ATMEGA8 maka kita tulis $regfile = "m8def.dat"

    $crystal = 11059200

    Nilai yang diisikan disini sesuai crystal/ xtal yang dipakai. Saya menggunakan crystal 11,0592MHz.

    Config Portc = Output

    PORTC di gunakan sebagai output. Saya menggunakan PORTC sebagai output karena LED-LED di board SMART AVR 16 SYSTEM terhubung ke PORTC

    Portc = &B1111_1110

    Nilai PORTC di set ke 1111 1110. Ini berarti PORTC.7—PORTC.1 nilainya = 1=high=5volt.

    Sedangkan POTC.0 nilainya = 0 = low = 0 volt.

    Berarti LED yang terhubung ke PORTC.0 akan menyala. Perlu diketahui LED-LED pada board Smart AVR System dirangkai active low artinya jika di beri Logic Low / teg. 0 volt maka LED akan active/menyala.

    Do

    Rotate Portc , Right , 1

    Waitms 500

    Loop

    End

    Baris-baris program yang berada di antara Do --- Loop merupakan baris –baris program utama/ main program yang akan di kerjakan terus menerus.

    Rotate Portc , Right , 1

    Menggeser nilai pada PORTC ke KANAN sebanyak 1kali. Di awal program nilai PORTC di set ke 1111_1110 jika digeser kekanan 1 kali maka nilainya menjai 0111_1111 berarti PORTC.7 =Low= 0 volt sehingga LED yang terhubung ke port ini akan menyala.

    Waitms 500

    Delay 500ms, selama waktu ini microcontroller tidak melakukan apa2.

    Loop

    Perintah untuk mengulang program ke baris DO, sehingga program untuk menggeser LED akan dijalankan terus.

     

    5. Membuat code program untuk membaca tombol

    Program ini bertujuan untuk membaca penekanan tombol untuk merubah nyala led.

    Pada board Smart AVR System Tombol 1 terhubung ke PIND.2, Tombol 2 terhubung ke PIND.3

    Jika tombol 1 ditekan maka nyala LED akan begeser ke kanan.

    Jika tombol 2 ditekan maka nyala LED akan bergeser ke ke kiri

    $regfile = "m16def.dat"
    
    $crystal = 11059200
    
    Config Portd.2 = Input 
    
    Config Portd.3 = Input
    
    Portd.2 = 1
    
    Portd.3 = 1
    
    Config Portc = Output
    
    Portc = &B1111_1110
    
    Do
    
    If Pind.2 = 0 Then Rotate Portc , Right , 1
    
    If Pind.3 = 0 Then Rotate Portc , Left , 1
    
    Waitms 500
    
    Loop
    
    End
    Tekan F7 untuk men COMPILE.

    Jika tidak ada ERROR tekan F4, lalu pilih ERASE and PROGRAM CHIP

    A. Pembahasan program:

    Config Portd.2 = Input

    Config Portd.3 = Input

    PORTD.2 dan PORTD.3 di setting sebagai input

    Portd.2 = 1

    Portd.3 = 1

    Memberi nilai 1/ high pada PORTD.2 dan PORTD.3, karena sebelumnya port-port ini disetting sebagai input maka baris program ini akan mengaktifkan internal pull up. Jika internal pull up tidak diaktfikan maka kondisi port input akan mengambang menyebabkan nilai pembacaan kacau.

    If Pind.2 = 0 Then Rotate Portc , Right , 1

    Jika PIND.2 = 0 maka PORTC akan di geser ke kanan 1kali. PIND.2 akan bernilai 0 jika tombol 1 ditekan.

    If Pind.3 = 0 Then Rotate Portc , Left , 1

    Jika PIND.3 = 0 maka PORTC akan di geser ke kiri 1kali. PIND.3 akan bernilai 0 jika tombol 2 ditekan.

Selengkapnya...

Search

Entri Populer

 

Total Tayangan Halaman

Diberdayakan oleh Blogger.