Friday 4 April 2014

Belajar Input Output Mikrokontroller

Hai Sobat!!
Salam Resistorrr!! :D
Hal dasar yang harus kita pahamin ketika berhubungan dengan mikrokontroller yaitu mengenai sistem input/outputnya. Mengapa?? Karena hal tersebut akan menjadi awalan kita sebelum memrogram mikrokontroller lebih dalam dan lebih kompleks lagi.
Pada mikrokontroller jenis ATMEGA 64/32/16/8535 mempunyai 32 PIN I/O yang bisa kita gunakan. 32 I/O terdiri dari 4 jenis PIN yaitu A,B,C,D yang artinya 1 jenis PIN mempunyai 8 channel (4x8=32). Dalam I/O kita akan mendengar kata-kata seperti Pull-Up, DDRX, PORTX, PINX. Apa maksud dari kata-kata tersebut? Berikut Penjelasannya.



Kita mulai dari register DDRX.
Register ini kita gunakan untuk menentukan apakah PIN tersebut menjadi keluaran atau masukan. Jika kita ingin menjadikannya sebagai keluaran kita set HIGH (1), jika sebagai masukan kita set LOW (0).
Sebagai Contoh jika kita ingin membuat program dimana seluruh PINA kita jadikan sebagai keluaran dengan logika LOW. Maka programnya seperti ini.

DDRA=0xFF;   // 0b11111111
PORTA=0x00; //  0b00000000

atau jika kita ingin buat per 1 PIN maka kodingnya seperti ini

DDRA.0= 1;
DDRA.1=1;
.....
DDRA.7=1;

PORTA.0=0;
PORTA.1=0;
......
PORTA.7=0;

Jika kita ingin membuat program dimana seluruh PINA kita jadikan sebagai keluaran dengan logika HIGH. Maka programnya seperti ini.


DDRA=0xFF;   // 0b11111111
PORTA=0xFF; // 0b11111111

atau jika kita ingin buat per 1 PIN maka kodingnya seperti ini

DDRA.0= 1;
DDRA.1=1;
.....
DDRA.7=1;

PORTA.0=1;
PORTA.1=1;
......
PORTA.7=1;

Register PORTX.
Register ini kita gunakan untuk menentukan apakah PIN tersebut dalam keadaan Pull- Up, logika HIGH dan logika LOW.


Gambar diatas adalah perbedaan antara PIN yang di Pull-up dan yang tidak di Pull-up. Dengan kata lain jika kita Pull-up PIN 1 dan PIN 2 kita buat dalam keadaan mengambang. Maka pada PIN 1 terdapat sebuah rangkaian internal yang tersambung dengan 5V dan sebuah resistor. Saat kita ubah PIN 1 ini sebagai Pull-up rangkain internal ini otomatis timbul didalam mikrokontroller tsb.
 Programnya sebagai berikut.
Anggap gambar diatas contoh pada channel A

DDRA=0b00000000;
PORTA=0b0000001;

Atau
DDRA.0=0;
DDRA.1=0;

PORTA.0=1;
PORTA.1=0;

Register PINX
Register ini kita gunakan untuk membaca apakah dalam suatu terdapat masukan atau tidak. Akan kita jelaskan dalam simulasi.

Jadi dengan kata lain hal ini dapat kita ringkas bahwa :

Berikut listing programnya

  1. #include <mega8535.h>

  2. // Alphanumeric LCD Module functions
  3. #asm
  4.    .equ __lcd_port=0x15 ;PORTC
  5. #endasm
  6. #include <lcd.h>
  7. #include <delay.h>

  8. // Declare your global variables here

  9. void main(void)
  10. {

  11. PORTA=0x00;
  12. DDRA=0x03;


  13. PORTB=0x03;
  14. DDRB=0x00;


  15. PORTC=0x00;
  16. DDRC=0x00;


  17. PORTD=0x00;
  18. DDRD=0x00;

  19. lcd_init(16);

  20. while (1)
  21.       {
  22.       // Place your code here
  23.    
  24.        lcd_gotoxy(0,0);
  25.       lcd_putsf("Simulasi");
  26.          
  27.       lcd_gotoxy(0,1);
  28.       lcd_putsf("I/O");
  29.    
  30.       if(PINB.0==0 && PINB.1==1)
  31.       {
  32.      
  33.       PORTA.0=1;
  34.       PORTA.1=0;
  35.       }
  36.    
  37.       else if(PINB.0==1 && PINB.1==0)
  38.       {
  39.    
  40.       PORTA.0=0;
  41.       PORTA.1=1;
  42.       }
  43.    
  44.       else if(PINB.0==0 && PINB.1==0)
  45.       {
  46.      
  47.       PORTA.0=1;
  48.       PORTA.1=1;
  49.       }
  50.    
  51.       else
  52.       {
  53.    
  54.       PORTA.0=0;
  55.       PORTA.1=0;
  56.       }
  57.       };
  58. }



Dan Video simulasinya

Teima kasih 
Mohon koreksinya ya
Semoga bermanfaat :D

No comments:

Post a Comment