Technologination

maaf aq udah ga aktif di blog ini lagi, sekarang pindah ke:

http://technologination.blogspot.com

Komunikasi serial atau port db9 antara mikrokontroler dan komputer dapat dilakukan dengan perantara IC MAX232, hubungkan pin Rx dan TX pada mikrokontroler ke IC MAX232 sbb:

Listing programnya dengan Bascom AVR sbb:

a)  Mengirimkan data ke komputer

  1. $regfile = “m32def.dat”
  2. $crystal = 11059200
  3. $baud = 9600
  4. Dim X As Integer
  5. Print “Test serial”
  6. Wait 1
  7. X = 1
  8. Do
  9. Print “Nilai X= ” ; X
  10. Wait 1
  11. X = X + 1
  12. Loop Until X = 10
  13. Print “Test serial selesai”

 

b)  Menerima data dari komputer

Cara pertama adalah dengan INKEY() sbb:

 

Komunikasi serial atau port db9 antara mikrokontroler dan komputer dapat dilakukan dengan perantara IC MAX232, hubungkan pin Rx dan TX pada mikrokontroler ke IC MAX232 sbb:

max232

Listing programnya dengan winAVR sbb:

a)   Mengirimkan data ke komputer

  1. #include<util/delay.h>
  2. #include<stdlib.h>
  3. #include<avr/io.h>
  4. #include<avr/pgmspace.h>
  5. #include<avr/interrupt.h>
  6. #define F_CPU 8000000UL
  7. #define USART_BAUDRATE 9600
  8. #define BAUD_PRESCALE (((F_CPU/(USART_BAUDRATE*16UL)))-1)
  9. void initserial()
  10. {
  11. // Aktifkan transmitter dan receiver
  12. UCSRB |= (1 << RXEN) | (1 << TXEN);
  13. // Ukuran karakter sebesar 8 bit
  14. UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
  15. // Load 8-bit yang lebih rendah dari nilai baud rate ke byte rendah dari UBRR register
  16. UBRRL = BAUD_PRESCALE;
  17. // Load 8-bit yang lebih atas dari nilai baud rate ke byte tinggi dari UBRR register:
  18. UBRRH = (BAUD_PRESCALE >> 8);
  19. }
  20. void uart_putc(unsigned char c)
  21. {
  22. while(!(UCSRA & (1 << UDRE)));
  23. UDR = c;
  24. }
  25. void uart_puts (char *s)
  26. {
  27. while (*s) {
  28. uart_putc(*s);
  29. s++;
  30. }
  31. }
  32. int main()
  33. {
  34. unsigned char tempserial;
  35. initserial();
  36. for(;;)
  37. {
  38. if (bit_is_set(UCSRA,RXC))
  39. {
  40. uart_puts(“Test Serial\r”);
  41. _delay_ms(5000);
  42. uart_puts(“Mengirim data ke komputer”);
  43. _delay_ms(5000);uart_putc(13);
  44. uart_putc(10);
  45. }
  46. }
  47. }

 

b)   Menerima data dari komputer

Program utama int main() diganti sbb:

  1. int main()
  2. {
  3. unsigned char tempserial;
  4. initserial();
  5. DDRB=0x00;
  6. uart_puts(“Test Serial Menerima Data\r”);
  7. uart_putc(13);
  8. uart_putc(10);
  9. for(;;)
  10. {
  11. if (bit_is_set(UCSRA,RXC))
  12. {
  13. tempserial=UDR;
  14. UDR = tempserial;
  15. }
  16. }
  17. }

Untuk menampilkan data serial secara langsung dari mikrokontroler ke komputer dapat digunakan Hyperterminal. Caranya dengan pilih Start All Programs Accessories Communications Hyperterminal.

Jika Hyperterminal baru pertama kali dibuka, maka akan muncul pengaturan lokasi, diisi bebas.

Setelah itu akan muncul gambar sbb:

Tuliskan nama Hyperterminal bebas dan pilih gambar telepon merah dan kuning. Kemudian pilih COM yang terhubung dengan kabel serial, misalnya COM1.hyperterm

Lakukan pengaturan komunikasi serial dengan baud rate (bits per second) 9600, data bits 8, parity none, stop bits 1, flowcontrol none.

Jika komunikasi serial berhasil maka pada Hyperterminal akan ditampilkan tulisan yang dikirim dari mikrokontroler ke komputer.

Terkadang terjadi kegagalan dengan komunikasi serial karena kesalahan pengaturan fuse bit, jika memakai crystal internal 8MHz maka lakukan pengaturan fuse bit untuk crystal 8MHz, jika menggunakan crystal external 11,0592MHz maka lakukan pengaturan fuse bit external 11,0592MHz.

Sensor SHT11 penampakannya seperti ini:

sht11

Rangkaian skematik SHT11 (sistemnya i2c): skematiksht11

Listing programnya:

  1. $regfile = “m8535.dat”           ‘mikrokontroler ATMega8535, jenis mikro yang dipakai bebas, tapi konfigurasi dan yang dipakai harus sama
  2. $crystal = 11059200
  3. $baud = 9600                                     ‘baud rate utk pengiriman data serial
  4. Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
  5. Config Lcd = 16 * 2
  6. Deflcdchar 1 , 28 , 20 , 28 , 32 , 32 , 32 , 32 , 32   ‘membuat karakter derajat
  7. Dim Dataword As Word
  8. Dim Command As Byte
  9. Dim Calc As Single
  10. Dim Calc2 As Single
  11. Dim Rhlinear As Single
  12. Dim Rhlintemp As Single
  13. Dim Tempc As Single
  14. Dim Ctr As Byte
  15. Dim X As Word
  16. Dim Y As Single
  17. Dim Z As Single
  18. Dim Suhu As String * 10
  19. Dim Kelembaban As String * 10
  20. Dim Tekanan As String * 10
  21. Const C1 = -4
  22. Const C2 = 0.0405
  23. Const C3 = -0.0000028
  24. Const S = .01
  25. Const H = .00008
  26. Sck Alias Portc.0                                       ‘sck output pada port C.0
  27. Dataout Alias Portc.1                              ‘ketika memanggil dataout portc.1 menjadi output
  28. Datain Alias Pinc.1                                ‘ketika memanggil datain portc.1 menjadi input
  29. Declare Sub Kirim()
  30. Ddrc = &B11111111                                  ‘port c sebagai output
  31. Config Pinc.0 = Output
  32. Config Pinc.1 = Output
  33. Wait 1
  34. Set Dataout
  35. For Ctr = 1 To 12
  36. Set Sck
  37. Waitus 2
  38. Reset Sck
  39. Waitus 2
  40. Next Ctr
  41. Do
  42. Gosub Data_suhu
  43. Print “Data suhu: “; Suhu             ‘menampilkan pada komputer
  44. Print “Data kelembaban: “; Kelembaban
  45. ‘Waitms 100
  46. Gosub Tampil
  47. Loop
  48. Tampil:                       ‘sub program untuk menampilkan pada LCD
  49. Cls
  50. Cursor Off
  51. Upperline
  52. Lcd “Suhu= ” ; Suhu ; ” ” ; Chr(1) ; “C”
  53. Lowerline
  54. Lcd “Rh  = ” ; Kelembaban ; ” ” ; “%”
  55. Wait 1
  56. Return
  57. Data_suhu:            ‘sub program untuk mengambil data suhu dan kelembaban dari sht11
  58. Command = &B00000011
  59. Call Kirim                                               ‘memanggil fungsi kirim
  60. Tempc = S * Dataword
  61. Tempc = Tempc – 40
  62. Suhu = Fusing(tempc , “#.##”)     ‘mengubah data single menjadi string dengan 2 angka dibelakang koma
  63. Command = &B00000101
  64. Call Kirim
  65. Calc = C2 * Dataword
  66. Calc2 = Dataword * Dataword
  67. Calc2 = C3 * Calc2
  68. Calc = Calc + C1
  69. Rhlinear = Calc + Calc2
  70. Calc = H * Dataword
  71. Calc = Calc + S
  72. Calc2 = Tempc – 25
  73. Calc = Calc2 * Calc
  74. Rhlintemp = Calc + Rhlinear
  75. Kelembaban = Fusing(rhlintemp , “#.##”)
  76. Return
  77. Sub Kirim()
  78. Local Datavalue As Word
  79. Local Databyte As Byte
  80. Set Sck
  81. Reset Dataout
  82. Reset Sck
  83. Set Sck
  84. Set Dataout
  85. Reset Sck
  86. Shiftout Dataout , Sck , Command , 1
  87. Ddrc = &B11111101
  88. Config Pinc.1 = Input
  89. Set Sck
  90. Reset Sck
  91. Waitus 10
  92. Bitwait Pinc.1 , Reset
  93. Shiftin Datain , Sck , Databyte , 1
  94. Datavalue = Databyte
  95. Ddrc = &B11111111
  96. Config Pinc.1 = Output
  97. Reset Dataout
  98. Set Sck
  99. Reset Sck
  100. Ddrc = &B11111101
  101. Config Pinc.1 = Input
  102. Shiftin Datain , Sck , Databyte , 1
  103. Shift Datavalue , Left , 8
  104. Datavalue = Datavalue Or Databyte
  105. Dataword = Datavalue
  106. Ddrc = &B11111111
  107. Config Pinc.1 = Output
  108. Reset Dataout
  109. Set Sck
  110. Reset Sck
  111. Ddrc = &B11111101
  112. Config Pinc.1 = Input
  113. Shiftin Datain , Sck , Databyte , 1
  114. Ddrc = &B11111111
  115. Config Pinc.1 = Output
  116. Set Dataout
  117. Set Sck
  118. Reset Sck
  119. End Sub
  120. End

 

 

Berikut listing program untuk menampilkan tulisan pada LCD 16×2 dengan Bascom AVR:

  1. $regfile = “m32def.dat”                                ‘mikrokontroler ATMega32
  2. $crystal = 11059200
  3. Config Lcdpin = Pin, Db4 = Portc.4, Db5 = Portc.5, Db6 = Portc.6,           Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2     ‘Pin-pin yg dipakai
  4. Config Lcd = 16 * 2                                         ‘Tipe LCD 16×2
  5. Dim Y As Integer
  6. Cls                                                                          ‘Bersihkan layar LCD
  7. Cursor Off                                                            ‘Cursor disembunyikan
  8. Locate 1 , 2                                                          ‘LCD Kolom1, baris 2
  9. Lcd “Test LCD diam”
  10. Locate 2 , 4
  11. Lcd “Bascom AVR”
  12. Wait 1                                                                  ‘Tunggu 1 detik
  13. cls
  14. Locate 1 , 1
  15. Lcd ” TEST LCD”
  16. For Y = 1 To 20
  17. Shiftlcd Left                                                       ‘Menggerakkan LCD ke kiri
  18. Waitms 200
  19. Next
  20. Cls
  21. Locate 2 , 1
  22. Lcd ” BERGERAK KE KIRI”
  23. For Y = 1 To 20
  24. Shiftlcd Left
  25. Waitms 200
  26. Next

lcd 16x2

Dengan Bascom AVR juga bisa menampilkan karakter khusus menggunakan LCD Designer pada Tools, contohnya membuat karakter gambar “Love”:
lcd love
Setelah diklik OK akan muncul:

Deflcdchar ?,32,10,31,31,14,4,32,32 ‘replace ? with number (0-7)

Ganti “?” dengan angka 0-7, misalnya diganti angka 1:

Deflcdchar 1,32,10,31,31,14,4,32,32

maka cara memanggilnya:

Lcd “Karakter Love:  “; chr(1)

karakter love  sebagai chr(1).

lcd2

Menampilkan tulisan pada LCD dengan WinAVR

_____________________________________________________

Untuk membuat tampilan LCD pada contoh ini gunakan file tambahan lcd_lib.c dan lcd_lib.h.

Penggunaan port LCD tersebut sesuai dengan empat baris perintah pada file  lcd_lib.h adalah sebagai berikut:

#define LDP PORTD

#define LCP PORTD

#define LDDR DDRD

#define LCDR DDRD

Kemudian pin-pin pada Port D yang digunakan adalah sebagai berikut:

#define LCD_4bit

#define LCD_RS    0

#define LCD_E     2

#define LCD_D4    4

#define LCD_D5    5

#define LCD_D6    6

#define LCD_D7    7

Data yang digunakan adalah 4 bit, yang terdiri dari DB4 pada port D.4, DB5 pada port D.5, DB6 pada port D.6, dan DB7 pada port D.7, jika 8 bit yang digunakan maka pin DB0 – DB7 semuanya dihubungkan ke mikrokontroler. Rs pada port D.0 dan Enable pada port D.2, RW tidak digunakan dan dihubungkan ke GND (ground).

Gambar rangkaian LCD dan mikrokontroler adalah sebagai berikut:

Listing programnya adalah sebagai berikut:

#include <avr/io.h>

#include <avr/pgmspace.h>

#include <util/delay.h>

#include “lcd_lib.h”

const uint8_t Tampil1[] PROGMEM=”Test LCD”;

const uint8_t Tampil2[] PROGMEM=” Wahyu Rahmaniar”;

int main(void)

{

LCDinit();//init LCD bit

LCDclr();//bersihkan tampilan LCD

CopyStringtoLCD(Tampil1, 4, 0); //(Tulisan, kolom 4, baris 1)

CopyStringtoLCD(Tampil2, 0, 1); //(Tulisan, kolom 0, baris 2)

_delay_ms(100);

}


Fungsi-fungsi pada LCD antara lain:

1)     LCDBlank() = untuk menghilangkan tampilan pada LCD

2)     LCDVisible() = untuk memunculkan tampilan pada LCD

3)     LCDclr() = untuk membersihkan layar LCD

4)     LCDGotoXY(x, y) = untuk menempatkan kursor pada kolom x dan baris y

5)     LCDsendChar(‘x’) = untuk menampilkan sebuah karakter x

6)     CopyStringtoLCD(string, x, y) = untuk menampilkan data string pada kolom x dan baris y

7)     LCDinit() = untuk inisialisasi tipe data LCD yang digunakan, 4 bit atau 8 bit

8)     LCDshiftLeft(uint8_t n) = untuk menggerakkan tulisan pada LCD ke kiri sebanyak n

9)     LCDshiftKanan(uint8_t n) = untuk menggerakkan tulisan pada LCD ke kanan sebanyak n

10)  LCDcursorOn() = untuk menampilkan kursor LCD

11)  LCDcursorOff() = untuk menghilangkan kursor LCD

12)  LCDcursorOnBlink() = untuk menampilkan kursor kedip-kedip

13)  LCDcursorLeft(uint8_t n) = untuk menempatkan kursor LCD ke kiri sebanyak n

LCDcursorRight(uint8_t n) = untuk menempatkan kursor LCD ke kanan sebanyak n

Ikuti

Kirimkan setiap pos baru ke Kotak Masuk Anda.