Komunikasi Serial Mikrokontroler AT89S51


AT89S51 memiliki komunikasi data serial memiliki parameter yang terdiri dari register SBUF, Register Serial Port Control (SCON), dan register Power Mode Control (PCON). Register SBUF untuk menahan data dan merupakan bit dalam register SFR. Register Serial Port Control (SCON) seperti yang diperlihatkan Gambar 2.13 berfungsi untuk mengontrol komunikasi data.
 
Tabel 2.8 pada halaman berikut ini memperlihatkan fungsi-fungsi pada bit SCON

Sementara itu, tabel 2.9 di bawah ini berisi konfigurasi mode SM0 dan SM1.
Register Power Mode Control (PCON) seperti yang terlihat pada gambar 2.14 berfungsi untuk mengontrol data rate ,dan pin RXD dan TXD yang terhubung pada rangkaian data serial.
Tabel 2.10 di bawah ini memperlihatkan fungsi-fungsi dari bit PCON.


Untuk membentuk komunikasi serial AT89S51, ada beberapa ketentuan yang harus diperhatikan. Sistem Transmisi Serial  
Dalam komunikasi serial AT89S51 terdapat dua jenis transmisi serial.
  • Synchronous, yaitu detak (clock) yang dikirim bersama dengan data serial itu sendiri.
  •  Asynchronous, yaitu detak dibangkitkan oleh masing-masing sistem, baik pengirim maupun penerima
Protokol Serial
Proses komunikasi serial membutuhkan protokol yang disebut dengan protokol serial. Protokol serial terdapat pada komunikasi asynchronous. Format yang dipakai dalam protokol serial adalah 12 bit seperti yang diperlihatkan pada gambar 2.15. 
  1. Start bit berfungsi untuk menginisialisasikan rangkaian pewaktu. Hal ini terdeteksi dengan perubahan bit dari high ke low.
  2. bit data diawali Least Significant Bit (LSB) dan diakhiri Most Significant Bit (MSB).
  3. Optional bit parity.
  4. Stop bit. Pada stop bit, line menjadi high untuk 1 atau 2 bit yang menandakan karakter telah habis. 

Inisialisai UART
Dalam proses inisialisasi ada beberapa buah register yang perlu ditentukan nilainya, yaitu TMOD, SCON, dan PCON.
TMOD merupakan register 8 bit yang berfungsi untuk mengatur kerja Timer/Counter. Dengan memanfaatkan bit TMOD.5 dan TMOD.1 (Timer 1) atau dengan TMOD.4 dan TMOD.0 (Timer 0), kita dapat memilih mode operasi pencacah biner yang diinginkan. Dengan bantuan register SCON, kita dapat menentukan besarnya laju baud (baud rate) yang diinginkan dengan memanfaatkan bit SCON.7 dan SCON.6  untuk memilih mode jenis baud rate. Perhitungan baud rate dari tiap mode adalah[7]:

Proses  pengiriman  data  serial  dilakukan  per  byte  data.  Proses  tersebut menggunakan  bit  yang  ada  pada  register  SCON,  yaitu  bit  TI.  Bit  TI  merupakan petanda  yang  setara  dengan  petanda Transmitter  Data  Register  Empty (TDRE) yang  umum  dijumpai  pada  UART  standar.  Data  yang  dikirim  disimpan  terlebih dahulu pada register SBUF. Berikut adalah subrutin pengiriman data serial.
01:SerialOut:
02:JNB TI,$
03:MOV SBUF,A
04:CLR TI
05:RET
Baris pertama adalah subrutin dengan nama SerialOut. Baris kedua menunggu data sebelumnya selesai dikirim. Baris ketiga mangirimkan data melalui port serial dengan cara meletakkan data yang telah disimpan di akumulator A ke register SBUF. Setelah itu, nilai TI dinolkan kembali. 
 
Penerimaan Data
Proses penerimaan data serial dilakukan dengan mengecek bit RI pada register SCON. Bit RI merupakan petanda yang setara dengan petanda Receiver Data Register Full (RDRF). Setelah register SBUF menerima data dari port serial, bit RI akan bernilai 1 dengan sendirinya kemudian harus dinolkan dengan program agar bisa dipakai untuk memantau keadaan SBUF dalam penerimaan data berikutnya. Berikut adalah subrutin penerimaan data serial.
01:SerialIn:
02:JNB  RI,$
03:MOV A,SBUF
04:CLR RI 05:RET
Baris  pertama  adalah  subrutin  dengan  nama SerialIn.  Baris  kedua menunggu  register  RI  bernilai 1 untuk  memastikan  sudah  ada  data  baru  yang diterima pada SBUF. Baris ketiga, SBUF ditempatkan pada akumulator A supaya RI  dapat  dipakai  untuk  memantau  keadaan  SBUF  pada  pengiriman  data
berikutnya. Selanjutnya, pada baris empat RI dinolkan.  

Aplikasi Proses Pengisian dan Muat Barang dengan PLC Siemens Menggunakan TIA Portal V11


Pada Kesempatan kali ini, saya akan coba mempresentasikan contoh Ladder Pemograman PLC SIEMEN'S dengan Software TIA PORTAL V11

Berikut Penjelasan nya.....:-)

Motor Conveyor1 "C1"
Motor Conveyor2 Forward "C2F"
Motor Conveyor2 Reverse "C2R"
Motor Conveyor3 "C3"
Motor Conveyor4 "C4"
Valve Pengisian Tangki1 "V1" dan "V2"
Valve Pengisian Pada Kemasan Kosong (siap isi) "V3"

Sensor Low "SL" (mendeteksi saat isi tangki hampir kosong)
Sensor Middle "SM" (mendeteksi saat isi tangki setengah penuh)
Sensor High "SH" (Mendeteksi saat isi tangki full atau penuh)
Sensor Penghitung (Counter) Pengisian Kedalam Kemasan PACK (Kardus) "S1"
Sensor Pendeteksi adanya kemasan kosong "S2"
sensor Kemasan Merah "S3"
Sensor Kemasan Putih "S4"


Pada Awal"...
PROSES TANGKI
--------------------------------------------------------------------
terdapat "Tangki" bahan baku siap kemas,
kita beri nama "T1"
pada T1 terdapat 3 buah sensor dan 2 buah Valve pengisian...

Ketika "SL" mendeteksi, maka kedua "V1" dan "V2" akan membuka katupnya untuk mengisi "T1"
ketika "SM" mendeteksi Maka "V1" akan menutup namun "V2" tetap terbuka
ketika "SH" Mendeteksi Maka "V2" akan tertutup (kedua Valve telah tertutup)

PROSES CONVEYOR1 (Membawa Kemasan Kosong siap isi)
--------------------------------------------------------------------
ketika PB (Push Button) Strar C1 di tekan, C1 ON (berjalan) menuju "V3"
ketika "S2" Mendeteksi maka "C1" akan OFF delay sejenak dan "V3" akan membuka katup nya untuk mengisi kemasan dengan Timer 5s, (Timer Off Delay) ketika Timer mencapai 5s maka "C1 secara otomatis ON kembali dan begitu seterus nya..

PROSES CONVEYOR2 (Membedakan Kemasan Melauli Warna)
--------------------------------------------------------------------
Ketika "S3" Mendeteksi Maka "C2" akan berfungsi Forward (menuju Packing Kardus Kemasan Merah)
Ketika "S4" Mendeteksi Maka "C2" akan berfungsi Reverse (Menuju Packing Kardus Kemasan Putih)


PROSES CONVEYOR3 (Menuju Packing Kardus)
Pada saat "S1" menghitung hingga 12 maka "C4" ON dam mebawa PACK KARDUS Menuju Ruangan Muat Barang



NB: C4 Disana Hanya dibuat 1 Program (untuk Kemasan Merah) tidak d buat Kemasan untuk warna Putih, Namun bentuh programnya sama dengan yang Merah, begitu pula dengan Counter nya..


Saya rasa cukup sekian dulu...

untuk kelengkapannya
Klik Disini

untuk file simulasi dengan TIA Portal belum sempat di upload.
bagi yang berminat silahkan PM ajah Via Inbox FB
nanti saya kirim Via Email..

Percobaan ini masih dalam tahap pengembangan dan penyempurnaan
next akan di posting kembali

Thank's...
salam belajar bersama...
:-)

USART Pada Mikrokontroler ATMEGA16

USART (Universal Syncronous Asyncronous Receiver/Transmiter) pada mikrokontroler ATMEGA16 memiliki beberapa keuntungan diantaranya ialah operasi full duplex (memiliki register receive dan transmiter yang terpisah), mendukung komunikasi multiprosesor dan kecepatan transmisi berorde Mbps.
Dalam Uji coba kali ini mikrokontroler ATMEGA16 akan berkomunikasi secara USART dengan komputer melalui port serial. berikut rangkaian uji coba lengkapnya :
USART_1
Mikrokontroler akan menerjemahkan data yang dikirimkan PC dan menyalakan / mematikan LED berdasarkan data yang diterima dari PC.
RS232
Chip Max 232 dalam uji coba ini berfungsi untuk mengkonversi level tegangan mikrokontroler ke level tegangan komunikasi serial PC dan sebaliknya.
Berikut merupakan aplikasi yang digunakan untuk menguji coba komunikasi serial antara mikrokontroler dan PC :
MICU
Aplikasi ini dapat di download disini
Aplikasi ini berfungsi untuk mengirimkan data ke mikrokontroler dan menerima data dari mikrokontroler. dalam uji coba ini LED akan menyala ketika dikirimkan data ‘1’ dan padam ketika dikirimkan data ‘0’. Ketika LED menyala mikrokontroler akan mengirimkan string “LED ON” kepada PC dan dalam aplikasi akan menampilkan string yang dikirimkan mikrokontroler.
Program lengkap dan penjelasan uji coba ini dapat dilihat berikut ini :
#include <mega16.h>
#include <delay.h>

// Standard Input/Output functions
#include <stdio.h>
unsigned char data;

void main(void)
{
PORTC=0xff;  //Pull Up internal diaktifkan
DDRC=0xff;
//PORTA sebagai Output
//// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;

while (1)
      { 
       data=getchar();delay_ms(1000); //Baca data yang dikirimkan PC simpan dalam var data
      if(data=='1'){PORTC=0x00;printf ("\n LED ON");}  //Jika data=1 LED on, kirimkan LED ON 
      if(data=='0'){PORTC=0xff;printf ("\n LED OFF");}  //Jika data=1 LED on, kirimkan LED ON
      }
}

ADC pada Mikrokontroler ATMEGA16

 

Dalam Mikrokontroler ATMEGA16 terdapat 8 buah ADC yang berada pada PORTA (ADC0-ADC7), ADC (Analog to Digital Converter) merupakan proses perubahan tegangan DC kedalam data bilangan digital, bisa berupa biner, heksa, ataupun desimal tergantung pemrograman yang dilakukan.

Dalam percobaan kali ini akan dilakukan uji coba pembacaan nilai ADC pada PORTA.0(ADC 0) dan PORTA.1(ADC 1) pembacaan data dalam bentuk digital 8bit dan dirubah kedalam bentuk desimal dan ditampilkan dalam LCD 16x2. berikut merupakan skema rangkaian uji cobanya :

ADC_LCDADC pada mikrokontroler ATMEGA16 dapat diberi referensi tegangan eksternal, yang dalam uji coba ini referensi tegangan eksternal di inputkan pada PIN 30 (AVCC).POT_ADC  Dua buah potensio meter di inputkan pada port ADC yang dipergunakan sebagai simulasi perubahan tegangan yang terjadi ketika potensio ini diputar, dalam kenyataan perubahan nilai tegangan ini dapat di aplikasikan berupa pembacaan sensor, misalkan sensor suhu LM35, sensor jarak GP2D12, dll tergantung aplikasi yang akan digunakan.

Berikut merupakan program percobaan beserta penjelasannya yang saya tulis dalam CodeVision AVR :

#include <mega16.h>

#include <delay.h>

// Alphanumeric LCD functions
#include <alcd.h>
#include <stdlib.h>

#define ADC_VREF_TYPE 0x60  //Tegangan referensi yang digunakan pin AVCC

// Nilai konversi adc 8bit
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}

int adc0,adc1; 
char buf0[8];
char buf1[8];

void main(void)
{
PORTA=0xFF;  //Pull up interal port A diaktifkan
DDRA=0x00; 
//Seluruh PIN Port A sebagai Input

// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: ADC Stopped
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16

lcd_init(16);

while (1)
      {
       lcd_gotoxy(0,0);lcd_putsf("ADC 0 =");
      lcd_gotoxy(0,1);lcd_putsf("ADC 1 =");
      adc0=read_adc(0); // Baca nilai ADC0 dan simpan dalam variabel adc0
      itoa(adc0,buf0);
// Konversi nilai integer adc0 ke dalam bentuk karakter

      lcd_gotoxy(8,0);lcd_puts(buf0); // Tampilkan nilai adc0
      adc1=read_adc(1);  // Baca nilai ADC1 dan simpan dalam variabel adc1
      itoa(adc1,buf1);
//Konversi nilai integer adc1 ke dalam bentuk karakter

      lcd_gotoxy(8,1);lcd_puts(buf1); //tampilkan nilai adc1
      }
}

Hasil Pembacaan ADC akan ditampilkan dalam bentuk desimal 0-255 berdasarkan hasil pembacaan.LCD_adcSemoga membantu, Terima Kasih.