Pages

Wednesday, December 3, 2014

Program Bascom AVR Untuk PS2 Controller

          Berikut adalah program bascom AVR untuk percobaan joystick yang baru saja saya selesaikan, merupakan tugas kuliah praktek antar muka mikroprosesor, berikut programnya :

'----------------------------------------------------------
'Nama File   : JoystickPS2.Bas
'Ditulis oleh : Dori Saka Pradito
'
'Support : - Sony PSX Handcontroller
'                  - Hardware SPI  Function in BASCOM
'                  - External crystal 11.0592 MHz
'
'PS2 pinout dapat dilihat dibawah ini :
'                _____________________
'Pin 1 ->|   o  o  o   |   o  o  o   |   o  o  o   |
'                \___________________/
'
'Untuk ATMEGA 8535
'Keterangan :
'Pin 1 = Data (PSX PAD data line output)         - PORTB.1
'Pin 2 = Command (PSX PAD data line input  - PORTB.5
'Pin 3 = N/C no connection
'Pin 4 = GND obvious
'Pin 5 = VCC +5VDC obvious
'Pin 6 = ATT (Select)                                               - PORTB.2
'Pin 7 = Clock Line (SCK)                                      - PORTB.7
'Pin 8 = N/C no connection
'Pin 9 = ACK no connection
'
'----------------------------------------------------------

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

'----------------------------------------------------------

'Simbol-simbol pada controller
Deflcdchar 0 , 4 , 4 , 10 , 10 , 27 , 17 , 17 , 31          'Segitiga
Deflcdchar 1 , 31 , 17 , 17 , 17 , 17 , 17 , 17 , 31        ' Kotak
Deflcdchar 2 , 4 , 14 , 21 , 4 , 4 , 4 , 4 , 4                    ' Up
Deflcdchar 3 , 4 , 4 , 4 , 4 , 4 , 21 , 14 , 4                    ' Down
Deflcdchar 4 , 32 , 32 , 4 , 2 , 31 , 2 , 4 , 32               ' Right
Deflcdchar 5 , 32 , 32 , 4 , 8 , 31 , 8 , 4 , 32               ' Left

'----------------------------------------------------------

'LCD 16x2
'Menggunakan PORTC
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4
Config Lcdpin = Pin , Db7 = Portc.5 , Rs = Portc.0 , E = Portc.1
Cursor Noblink Off : Cls

'----------------------------------------------------------

'SPI
Config Spi = Hard , Interrupt = Off , Data Order = Lsb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 128
Spiinit
Config Portb.1 = Output
Pad_att_line Alias Portb.1

Dim Cmdstart As Byte : Cmdstart = &H01
Dim Cmdstatus As Byte : Cmdstatus = &H42

Dim Joy_present As Byte , Joy_mode As Byte
Dim Joy_byte1 As Byte , Joy_byte2 As Byte
Dim Joy_kanan_x As Byte , Joy_kanan_y As Byte
Dim Joy_kiri_x As Byte , Joy_kiri_y As Byte

'----------------------------------------------------------

Key_select Alias Joy_byte1.0
Key_joyr Alias Joy_byte1.1
Key_joy1 Alias Joy_byte1.2
Key_start Alias Joy_byte1.3
Key_up Alias Joy_byte1.4
Key_right Alias Joy_byte1.5
Key_down Alias Joy_byte1.6
Key_left Alias Joy_byte1.7

Key_l2 Alias Joy_byte2.0
Key_r2 Alias Joy_byte2.1
Key_l1 Alias Joy_byte2.2
Key_r1 Alias Joy_byte2.3
Key_triangle Alias Joy_byte2.4
Key_circle Alias Joy_byte2.5
Key_x Alias Joy_byte2.6
Key_square Alias Joy_byte2.7

Config Portd.7 = Output
Config Portd.6 = Output
Config Portd.5 = Output
Config Portd.4 = Output

'----------------------------------------------------------

Cls
Lcd "Tes Joystick PS2"
Lowerline
Lcd "-----SUKSES-----"
Wait 3
Cls
Lcd "--DORI & JIMI-- "
Wait 3
Cls

Do

   Reset Pad_att_line : Waitus 100
   Spiout Cmdstart , 1
   Joy_mode = Spimove(cmdstatus)
   Spiin Joy_present , 1
   Spiin Joy_byte1 , 1
   Spiin Joy_byte2 , 1
   Spiin Joy_kanan_x , 1
   Spiin Joy_kanan_y , 1
   Spiin Joy_kiri_x , 1
   Spiin Joy_kiri_y , 1
   Set Pad_att_line : Waitus 100

   If Joy_byte1.3 = 0 Then
   Locate 1 , 1
   Lcd "Start           "
   Print "Start           "
   Portd.4 = 0
   Portd.5 = 1
   Portd.6 = 0
   Portd.7 = 0
   Waitus 500

   Elseif Joy_byte1.0 = 0 Then
   Locate 1 , 1
   Lcd "Select          "
   Print "Select          "
   Portd.4 = 0
   Portd.5 = 1
   Portd.6 = 0
   Portd.7 = 0
   Waitus 500

   Elseif Joy_byte1.1 = 0 Then
   Locate 1 , 1
   Lcd "Joystick kanan  "
   Locate 2 , 1
   Lcd "X = " ; Joy_kanan_x ; "Y = " ; Joy_kanan_y
   Print "Joystick kanan  "

   Elseif Joy_byte1.2 = 0 Then
   Locate 1 , 1
   Lcd "Joystick kiri   "
   Locate 2 , 1
   Lcd "X = " ; Joy_kiri_x ; "Y = " ; Joy_kiri_y
   Print "Joystick kiri   "

   Elseif Joy_byte1.4 = 0 Then
   Locate 1 , 1
   Lcd Chr(2) ; "  Panah keatas "
   Print "Panah keatas    "
   Portd.4 = 0
   Portd.5 = 1
   Portd.6 = 0
   Portd.7 = 0
   Waitus 500

   Elseif Key_down = 0 Then
   Locate 1 , 1
   Lcd Chr(3) ; "  Panah kebawah "
   Print "Panah kebawah   "
   Portd.4 = 0
   Portd.5 = 1
   Portd.6 = 0
   Portd.7 = 0
   Waitus 500

   Elseif Key_right = 0 Then
   Locate 1 , 1
   Lcd Chr(4) ; "  Panah kekanan"
   Print "Panah kekanan   "
   Portd.4 = 0
   Portd.5 = 1
   Portd.6 = 0
   Portd.7 = 0
   Waitus 500

   Elseif Key_left = 0 Then
   Locate 1 , 1
   Lcd Chr(5) ; "  Panah kekiri "
   Print "Panah kekiri    "
   Portd.4 = 0
   Portd.5 = 1
   Portd.6 = 0
   Portd.7 = 0
   Waitus 500

   Elseif Key_triangle = 0 Then
   Locate 1 , 1
   Lcd Chr(0) ; " Segitiga      "
   Print "Segitiga        "
   Portd.4 = 0
   Portd.5 = 0
   Portd.6 = 0
   Portd.7 = 1
   Waitus 500

   Elseif Key_x = 0 Then
   Locate 1 , 1
   Lcd "Tombol X        "
   Print "Tombol X        "
   Portd.4 = 0
   Portd.5 = 0
   Portd.6 = 0
   Portd.7 = 1
   Waitus 500

   Elseif Key_square = 0 Then
   Locate 1 , 1
   Lcd Chr(1) ; " Kotak         "
   Print "Kotak           "
   Portd.4 = 0
   Portd.5 = 0
   Portd.6 = 0
   Portd.7 = 1
   Waitus 500

   Elseif Key_circle = 0 Then
   Locate 1 , 1
   Lcd "O Lingkaran     "
   Print "Lingkaran       "
   Portd.4 = 0
   Portd.5 = 0
   Portd.6 = 0
   Portd.7 = 1
   Waitus 500

   Elseif Key_l1 = 0 Then
   Locate 1 , 1
   Lcd "L1              "
   Print "L1              "
   Portd.4 = 0
   Portd.5 = 0
   Portd.6 = 1
   Portd.7 = 0
   Waitus 500

   Elseif Key_l2 = 0 Then
   Locate 1 , 1
   Lcd "L2              "
   Print "L2              "
   Portd.4 = 0
   Portd.5 = 0
   Portd.6 = 1
   Portd.7 = 0
   Waitus 500

   Elseif Key_r1 = 0 Then
   Locate 1 , 1
   Lcd "R1              "
   Print "R1              "
   Portd.4 = 0
   Portd.5 = 0
   Portd.6 = 1
   Portd.7 = 0
   Waitus 500

   Elseif Key_r2 = 0 Then
   Locate 1 , 1
   Lcd "R2              "
   Print "R2              "
   Portd.4 = 0
   Portd.5 = 0
   Portd.6 = 1
   Portd.7 = 0

   Elseif Pad_att_line = 1 Then
   Locate 1 , 1
   Lcd "Tidak ada respon"
   Print "Tidak ada respon"
   Portd.4 = 1
   Portd.5 = 0
   Portd.6 = 0
   Portd.7 = 0
   End If
   Waitus 100

Loop

'----------------------------------------------------------

          Pada program diatas sudah bisa terhubung dengan komputer, dengan menggunakan rangkaian serial MAX232, bisa ditampilkan dengan hyperterminal ataupun menggunakan aplikasi Visual Basic 6.0 pada komputer.

          Untuk pengembangan, jika ada yang bisa membantu untuk menambahkan program pembacaan nilai X dan Y pada joystick mohon beri komentar, karena pada program diatas belum saya masukkan untuk keadaan  Red Mode.

Friday, November 28, 2014

Rangkaian Driver Relay 5VDC

          Pada rangkaian yang saya buat ini, diperlukan beberapa komponen sebagai berikut :

1. Relay 5VDC (bisa diganti sesuai kebutuhan/ yang relevan)
2. Resistor 100 ohm
3. Transistor 2N222 (NPN - bisa diganti sesuai kebutuhan)
4. Dioda 
5. Terminal Screw 3 Pin

          Rangkaian ini hanya untuk satu driver relay, untuk penggunaan yang lebih banyak dapat dikombinasikan lagi. Berikut gambar rangkaian skematiknya :


          Untuk rangkaian pada PCB dapat dilihat pada gambar dibawah ini :


          Tata letak komponennya sebagai berikut :


          Rangkaian ini bisa diaplikasikan pada rangkaian pengendali lampu rumah, pengendai motor DC maupun AC, dan lain sebagainya. Pada gambar diatas dapat kita lihat terdapat 6 buah pin (3 buah pin disisi kiri dan kanan), pada 3 buah pin disisi kiri terdiri dari pin : VCC, Kendali dari mikro, dan GND, kemudian pada 3 buah pin disisi kanan merupakan pin untuk perangkat yang ingin dikendalikan, NC merupakan singkatan dari normally close, artinya pin tersebut daam kondisi normal tertutup saat inputan tidak diberikan pada pin masukan relay, sedangkan NO merupakan singkatan dari normally open, artinya pin tersebut normal terbuka saat inputan tidak diberikan pada pin masukan relay, kemudian pada pin tengah (sisi kanan) merupakan sumber tegangan (AC atau DC) dari perangkat yang ingin dikendaikan. Semoga bisa menambah wawasan dan mohon koreksinya jika terdapat kesalahan.

Saturday, November 22, 2014

Masalah 'Airwires Hidden' di EAGLE

     Baru-baru ini saya mendapat masalah saat sedang mendesain rangkaian di EAGLE, tanpa saya sadari kalau sedang mengklik sesuatu saat menu properties wire terbuka, dan ternyata yang saya klik adalah menu pilihan "Airwires hidden", kala itu menu properties yang terbuka adalah ground wire, akibatnya adalah sambungan ke seluruh ground menghilang! 



     Terihat unrouted wire untuk ground menjadi hilang (lingkaran hitam).



     Pusing bukan kepalang gara-gara ini, saya utak-atik nih aplikasi, mencari tahu bagaimana memunculkan kembali wire yang sudah menghilang, mulai dari Display Toolbar sampai menu HELP! akhirnya saya mulai bertanya sama mbah google, ketemu juga deh sama forum yang bahas masalah ini (thanks chrisphoenix) beliau ngomong gini "Hides airwires selected via the GROUP command during routing. Simply select the airwires to hide with the group command and run this ULP. Use 'RATS *' at the command prompt to show all airwires." lalu saya ikuti saran beliau dengan ketik RATS * pada command prompt di eagle. Ahasil muncul wire yang tadinya menghilang!


         Semoga bisa membantu.

Sunday, July 20, 2014

Mengontrol Lampu Menggunakan Remote Universal

          Halo semuanya, udah lama ga posting, karena kesibukan kuliah. Kali ini saya ingin memperlihatkan video rangkaian percobaan mengontrol lampu menggunakan remote universal yang berhasil saya buat. enjoy the video!



Follow Google+

@Dori_Saka