Archive

Archive for the ‘MCS51’ Category

Tutorial Mikrokontroler 89S51: Contoh Program Komunikasi Data Serial UART

October 9, 2012 Leave a comment

89s51_rs232

Komunikasi data serial UART merupakan salah satu fitur mikrokontroler 89S51 yang sangat penting karena dengan adanya fitur ini mikrokontroler dapat melakukan komunikasi data secara serial dengan  komputer, dengan sesama mikrokontroler, ataupun dengan piranti-piranti kontrol dan otomasi seperti PLC, Temperature Controller, Power Meter, dan lain-lain.

Gambar disamping adalah skematik rangkaian mikrokontroler AT89S51 dengan konverter tegangan TTL-to-RS232 menggunakan IC Maxim MAX232. Kapasitor C1, C2, C3, dan C4 adalah kapasitor elektrolit dengan nilai 1uF/25V atau 22uF/25V. Konektor J1 terhubung ke port serial RS232 komputer.

Untuk menguji rangkaian di atas, berikut adalah contoh program komunikasi data serial yang ditulis dalam bahasa C. Program dikompilasi menggunakan kompiler freeware SDCC. Untuk memudahkan proses pengembangan program, saya menggunakan IDE yang juga freeware yakni MIDE-51. Sedikit pengantar mengenai MIDE-51 beserta download link-nya dapat Anda baca pada postingan berikut ini: http://telinks.wordpress.com/2012/10/12/tutorial-mikrokontroler-89s51-mengenal-mide-51-development-tools-mcs-51-gratis-dari-opcube/

image 

LISTING PROGRAM

/*
  Contoh program komunikasi data serial
http://teknikelektrolinks.com
*/
#include <at89x51.h>
#include <stdio.h>

void delay(unsigned int n)
{
   unsigned int i, j;

   for (i=1;i<=n;i++) for (j=1;j<=10;j++);
}

void putchar (char c)
{
  while (!TI);
  TI = 0;
  SBUF = c;
}

char getchar(void)    // Get Character from UART
{
  if (RI!=0)
  {
    RI = 0;
    return SBUF;
  }
  else
    return -1;
}

void initseri()
{
   SCON = 0x52;
   TMOD = (TMOD & 0x0F) | 0x20;
   PCON = 0x80;
   TH1 = 0xFD;
   TR1 = 1;
   ES = 1;
   TI = 1;
   RI = 0;
   EA = 1;
}

/* PROGRAM UTAMA */
int main()
{
  int x = 0, c;

  initseri();

  printf_tiny("Minsys AT89S51\n\r");
  printf_tiny("Teknik Elektro Links\n\r");
  printf_tiny("http://teknikelektrolinks.com\n\r");

  while(1)
  {
    c = getchar();
    if (c!=-1)
    {
      printf_tiny("\n\rTerima data = %d\n\r", c);
    }
    P1 = ~P1;
    P2 = ~P2;
    P0 = ~P0;
    x++;
    printf_tiny("%d", x);
    delay(5000);
    if (x==10)
    {
      x = 0;
      printf_tiny("\n\r\n\r");
      printf_tiny("Minsys AT89S51\n\r");
      printf_tiny("Teknik Elektro Links\n\r");
      printf_tiny("http://teknikelektrolinks.com\n\r");
    }
  } 
}

Sebelum dapat digunakan, UART perlu diinisialisasi terlebih dahulu, termasuk juga fungsi TIMER1 untuk pembangkit clock baudrate. Pada contoh ini digunakan baudrate 2×9600=19200 pada sistem dengan kristal 11,0592MHz. Pada percobaan ini saya menggunakan kristal 22,1184MHz sehingga baudrate yang dihasilkan adalah 38400.

Berikut adalah screenshot program Hyperterminal yang berkomunikasi dengan mikrokontroler melalui port serial RS232.

89s51_rs232_hyperterminal

Inisialisasi UART dilakukan dengan memanggil fungsi initseri(). Selanjutnya mikro akan mengirimkan tulisan: “Minsys AT89S51… dst.”, dan menampilkan deretan angka mulai dari 1 hingga 10. Mikrokontroler akan terus-menerus mengirimkan data tersebut.

Selain mengirimkan data tulisan, mikrokontroler juga senantiasa mengecek apakah ada data yang diterima dari komputer. Jika mikrokontroler menerima data dari komputer, maka mikrokontroler akan mengirimkan tulisan: “Terima data = <data>”. <data> adalah nilai integer dari data karakter yang diterima oleh mikrokontroler.

Perlu diperhatikan juga bahwa dalam contoh program ini digunakan fungsi printf_tiny(), yakni fungsi untuk menampilkan atau mengeluarkan data karakter atau string ke standard output yang ditentukan, dalam hal ini adalah port serial UART. SDCC memiliki banyak jenis fungsi printf() yang dapat Anda pelajari pada dokumentasi SDCC.

telinks_ms89s51

Modul Minimum System 89S51 lengkap dengan rangkaian RS232 seperti di atas dapat Anda dapatkan di: http://teknikelektrolinks.com.

Semoga bermanfaat, selamat belajar dan selamat berkarya!

:)

Counter Barang Dengan Sensor Cahaya Berbasis Mikrokontroler 89S51

September 23, 2012 Leave a comment

telinks_counter_ldr

Counter elektronik merupakan salah satu komponen kontrol dan otomasi yang banyak diaplikasikan di industri. Counter bertugas menghitung. Counter menghitung kuantitas fisik secara elektronik dengan bantuan sensor. Sensor yang banyak digunakan di dunia industri untuk keperluan counting adalah limit-switch, proximity switch, dan infra merah.

Limit-switch menggunakan sistem mekanik dalam kerjanya. Limit-switch merupakan sensor tipe kontak. Penghitungan dilakukan berdasarkan perubahan kondisi limit-switch yang berubah-ubah dari kondisi TERHUBUNG dan TAK-TERHUBUNG. Karena sistemnya mekanik,  perubahan kondisi switch tersebut terjadi karena adanya impact dari benda kerja secara langsung maupun ekstensi-bantunya, sehingga menyebabkan sistem harus dirancang sebaik mungkin agar limit-switch tidak cepat rusak.

Sensor yang lebih baik adalah tipe non-kontak. Proximity-switch dan sensor infra merah adalah sensor non-kontak yang sangat banyak digunakan di dunia industri. Dengan menggunakan sensor tipe non-kontak maka diharapkan usia sensor juga jauh lebih tahan-lama dan akurasi juga akan dapat ditingkatkan.

Berbeda dengan ketiga jenis sensor industrial yang sudah disebutkan di atas, berikut ini adalah rangkaian sensor cahaya menggunakan LDR yang dapat digunakan sebagai sensor pada aplikasi counter barang. Rangkaiannya sederhana, namun hasilnya sangatlah menggembirakan.

telinks_ldr_89s51 Resistansi LDR berubah-ubah sesuai dengan intensitas cahaya yang diterima oleh permukaan sensor. Semakin tinggi intensitas cahaya yang diterima, semakin rendah resistansinya.

Dengan menerapkan rangkaian komparator menggunakan opamp, maka kita dapat mendeteksi perubahan kondisi gelap atau terang dengan batasan dan kepekaan yang kita inginkan.

Rangkaian di samping terbukti sangat efektif untuk membedakan kondisi gelap-terang. Dengan menempatkan sensor pada posisi yang tepat, maka rangkaian akan dapat mendeteksi apakah sensor terhalang benda ataukah tidak. Yang artinya, mikrokontroler AT89S51 akan dapat menghitung jumlah perubahan logika (pulsa) yang terjadi.

Pada gambar di atas ditampilkan screenshot demo program counter barang yang dibuat menggunakan VB.NET 2005 Express Edition. Program berkomunikasi dengan mikrokontroler AT89S51 melalui port serial RS232. Secara kontinyu mikrokontroler akan memonitor kondisi sensor, dan akan menghitung jika terjadi perubahan logika. Data hitungan akan dikirimkan kepada komputer secara langsung maupun menunggu request atau permintaan dari komputer.

Handal. Itulah kata yang cocok untuk rangkaian sensor cahaya menggunakan LDR tersebut, karena secara pengujian dan penerapan rangkaian tersebut terbukti sangat efektif mendeteksi perubahan cahaya sesuai dengan harapan.

Modul rangkaian sensor dapat dipesan secara tersendiri (modul sensor saja) ataupun lengkap dengan sistem mikrokontrolernya, baik mikrokontroler AT89S51/52 atau mikrokontroler AVR ATmega/ATtiny. Untuk pemesanan silakan menghubungi kami di: http://teknikelekrtolinks.com/kontak.htm.

Selamat berkarya!

:)

Modul Interface Kontroler Level Air Tandon Untuk Mikrokontroler

Sistem pengisian tandon air secara otomatis dapat dibuat dengan mengaplikasikan kontroler mekanik yang umum dipakai, yakni switch otomatis dengan bola pelampung. Switch pelampung ini cukup efektif untuk mengontrol level air di dalam tandon air.

Satu kuncinya: Jangan gunakan switch pelampung untuk menggerakkan pompa secara langsung, karena kemampuan kontak switch yang digunakan kurang besar.

Jika digunakan secara langsung untuk menggerakkan pompa air, pasti umurnya tidak akan lama. Jadi, tambahkan unit relay atau kontaktor dengan kemampuan kontak yang besar. Memang jadi lebih mahal total biayanya, karena harga kontaktor 20A lebih mahal daripada switch pelampung itu sendiri.

Untuk menggantikan sistem mekanik tersebut, saya menerapkan sebuah sistem elektronik dengan sensor level air elektronik menggunakan stik (batangan) baja anti-karat. Anda bisa menyimak tulisan tentang perancangan sensor level air ini di link berikut ini:

http://telinks.wordpress.com/2010/04/24/perancangan-sensor-ketinggian-air-tandon/

Dalam tulisan tersebut, Anda dapat melihat rancangan sensor level air tandon dengan 5 buah stik baja anti-karat beserta rangkaian skematik sensornya.

Nah, pada tulisan kali ini, saya akan menyajikan sebuah modul rangkaian antarmuka mikrokontroler untuk sistem pengontrolan level air tandon. Berikut adalah foto modulnya.

telinks_modul_level_air_tandon

Modul ini terdiri dari rangkaian sensor level air dengan 3 buah stik baja anti-karat sebagai sensornya. Satu stik sebagai referensi tegangan dan terhubung dengan GND. Stik kedua sebagai batas level bawah, dan stik ketika sebagai batas level atas.

Rangkaian sensor level air memiliki 2 buah keluaran logika yang menyatakan kondisi sensor level air atas dan bawah (terkena air ataukah tidak)

Rangkaian lain penyusun modul ini adalah rangkaian LED dan RELAY. Rangkaian LED berfungsi sebagai indikator untuk kondisi sensor level atas dan bawah, dan sebuah LED lagi sebagai indikator ekstra. RELAY berfungsi sebagai kontak yang dapat secara langsung digunakan untuk menggerakkan pompa air berukuran kecil. Namun demikian, sebaiknya gunakan relay atau kontaktor yang lebih besar sebagai power driver pompa air.

Modul ini dapat dengan mudah dihubungkan ke sistem minimum mikrokontroler, baik yang berbasis 89S51/52, AVR, PIC, ataupun tipe-tipe yang lain. Modul ini membutuhkan catudaya DC 5V. Semua pin input dan output-nya bekerja pada level tegangan TTL.

Algoritma program kontrol otomatis pengisian air tandon sangatlah sederhana. Jika kedua sensor tidak terkena air, maka berarti tandon kosong, dan kontroler harus mengaktifkan relay. Pompa pun berputar dari tandon akan terisi air.

Dan jika kedua sensor terkena air, maka berarti tandon penuh, dan kontroler harus mematikan relay. Sangat sederhana, bukan?

Berikut adalah contoh program pengontrolan pompa pengisian air tandon berdasarkan pembacaan sensor level air yang diletakkan dalam tandon yang ditulis dalam bahasa Pascal. Kompiler yang digunakan adalah TURBO51, yakni kompiler Pascal untuk mikrokontroler keluarga MCS-51.

telinks_program_level_air_tandon

Bagi Anda yang membutuhkan modul rangkaian antarmuka ini, Anda dapat menghubungi saya melalui SMS ke 083834849975 atau melalui email ke info@teknikelektrolinks.com. Modul dilengkapi dengan contoh program untuk mikrokontroler 89S51 dan AVR dengan kompiler TURBO51, AVR-GCC, dan Arduino.

Selamat berkarya!

:)

FLEX-DL2M – AVR/89S51 ISP Downloader Dengan Kabel Panjang dan Konektor Fleksibel

February 19, 2012 Leave a comment

telinks_flex_dl2m_600

ISP Downloader merupakan perangkat keras yang mutlak diperlukan dalam proses belajar mikrokontroler AVR dan 89S51/52.

ISP Downloader adalah rangkaian antarmuka yang berfungsi menghubungkan komputer dengan mikrokontroler dalam proses pemrograman mikrokontroler. Melalui rangkaian ISP Downloader inilah, software downloader pada komputer berinteraksi dengan mikrokontroler dan melakukan proses penulisan/pembacaan program biner ke/dari memori program mikrokontroler. Tak hanya itu, software downloader juga dapat mengkonfigurasi mikrokontroler sesuai kebutuhan melalui bit-bit konfigurasi (fuse-bits) dan mengeset bit-bit pengunci (lock-bits).

FLEX-DL2M adalah rangkaian ISP Downloader yang menggunakan port paralel. FLEX-DL2M menggunakan skematik yang kompatibel dengan STK200. FLEX-DL2M memiliki beberapa fitur unggulan yakni:

  • Bisa digunakan dengan software Avrdude, BASCOM, CodeVision, Ponyprog, Asim Khan SPI PGM 3.7, ElmChan AVRSP, ISP Programmer 1.2.0.55 (Adam Dybkowski), dan UISP.
  • Kabel konektor yang panjang (standar 2 meter, bisa lebih sesuai permintaan).
  • Konektor pin yang fleksibel sehingga dapat mengakomodasi perbedaan tipe konektor ISP yang ada pada board mikrokontroler.
  • Dilengkapi CD Program yang berisi program assembler, kompiler, dan downloader untuk mikrokontroler AVR dan 89S51.

Jika Anda ingin membuat sendiri, berikut adalah skematik dari ISP Downloader FLEX-DL2M.

flex-dl2m-skema

Jika Anda tidak mau repot, modul ISP Downloader FLEX-DL2M siap dikirim dan menemani Anda bereksperimen mikrokontroler.

Untuk informasi harga dan pemesanan silakan mengunjungi situsnya di: http://teknikelektrolinks.com.

Selamat berkarya!

Smile

Rangkaian LED Aktif-Low dan LED Aktif-High dan Contoh Program Kontrol LED Untuk AVR-GCC dan Arduino

December 3, 2011 1 comment

led_hi_lo

Perhatikan gambar di samping. Gambar sebelah kiri adalah rangkaian LED Aktif-Low, dan gambar sebelah kanan adalah rangkaian LED Aktif-High. Rangkaian terdiri dari sebuah resistor yang diseri dengan sebuah LED.

Pada rangkaian LED Aktif-Low, LED akan menyala jika diberi logika 0 (LOW) dan akan mati jika diberi logika 1 (HIGH).

Ketika diberi logika 0, maka tegangan pada kaki anoda LED lebih positif dibandingkan dengan kaki katoda. Selisih tegangan pada kaki anoda dan katoda LED ini melebihi tegangan jatuh LED, sehingga LED pun menghantar (dialiri arus listrik) dan menyala. Sebaliknya, ketika diberi logika 1, maka kaki anoda LED tidak lebih positif daripada kaki katoda, oleh karenanya LED tidak menghantar (tidak dialiri arus listrik) sehingga LED pun tidak menyala.

Pada rangkaian LED Aktif-High, LED akan menyala jika diberi logika 1 (HIGH) dan akan mati jika diberi logika 0 (LOW).

Ketika diberi logika 1, maka tegangan pada kaki anoda LED lebih positif dibandingkan dengan kaki katoda LED. Selisih tegangan pada kaki anoda dan katoda LED ini melebihi tegangan jatuh LED, sehingga LED pun menghantar (dialiri arus listrik) dan menyala. Sebaliknya, ketika diberi logika 0, maka tegangan pada kaki anoda LED tidak lebih positif daripada kaki katoda LED, oleh karenanya LED tidak menghantar (tidak dialiri arus listrik) sehingga LED pun tidak menyala.

Fungsi resistor seri pada rangkaian diatas adalah sebagai pembatas arus. Anda bisa menggunakan resistor dengan nilai yang aman mulai 150 ohm, 180 ohm, 220 ohm, hingga 2K2 ohm tergantung dari tipe LED yang Anda gunakan dan seberapa tingkat kecerahan yang Anda inginkan.

Dengan asumsi bahwa rangkaian LED Aktif-Low terhubung ke PORTB.0 dan rangkaian LED Aktif-High terhubung ke PORTB.1, berikut adalah contoh program kontrol LED untuk AVR-GCC.

Contoh Program Kontrol LED (AVR-GCC)
#define F_CPU 1000000L

#include <avr/io.h>
#include <util/delay.h>

#define ON 1
#define OFF 0

//macro LED ON/OFF untuk LED Aktif-Low
#define LED_AL(x) ((x)==(ON) ? (PORTB&=~_BV(PB0)) : (PORTB|=_BV(PB0)))

//macro LED ON/OFF untuk LED Aktif-High
#define LED_AH(x) ((x)==(ON) ? (PORTB|=_BV(PB1)) : (PORTB&=~_BV(PB1)))

int main(void)
{
  PORTB = 0b00000001; //PB1=0, PB0=1 --> kedua LED OFF
  DDRB = 0b00000011;  //PB0 dan PB1 sebagai output

  while(1)
  {
    LED_AL(ON); LED_AH(ON);   //kedua LED ON
    _delay_ms(500);           //delay 1/2 detik
    LED_AL(OFF); LED_AH(OFF); //kedua LED OFF
    _delay_ms(500);           //delay 1/2 detik
  }
}
Contoh Program Kontrol LED (Arduino)

Dengan asumsi bahwa rangkaian LED Aktif-Low terhubung ke pin-11 dan rangkaian LED Aktif-High terhubung ke pin-12, berikut adalah contoh program pengendalian LED untuk Arduino.

void setup()
{
  pinMode(11, OUTPUT); //pin-11 sebagai output
  pinMode(12, OUTPUT); //pin-12 sebagai output
}

void loop()
{
  digitalWrite(11, LOW);  //LED Aktif-Low ON
  digitalWrite(12, HIGH); //LED Aktif-High ON
  delay(500);             //delay 1/2 detik
  digitalWrite(11, HIGH); //LED Aktif-Low OFF
  digitalWrite(12, LOW);  //LED Aktif-High OFF
  delay(500);             //delay 1/2 detik
}

Rangkaian LED Aktif-Low dan Aktif-High merupakan rangkaian yang sangat penting dalam bereksperimen mikrokontroler. Tak hanya karena murah dan mudah dirangkai, tapi kedua rangkaian tersebut dapat mewakili berbagai macam rangkaian output, baik yang aktif-low maupun yang aktif-high seperti relay, buzzer, motor, dan solenoid. Selanjutnya tinggal mempelajari dan memahami berbagai macam rangkaian driver output.

Selamat belajar!

Smile

Follow

Get every new post delivered to your Inbox.

Join 169 other followers