Komunikasi Serial RS232 dengan Internal Clock 1Mhz - Elang Sakti
Download Ebook Belajar Arduino PDF, Arduino untuk pemula
Jasa Pembuatan Program Arduino, pemrograman Arduino
# Hack Your Skills! to be Professional Mechatronics

Komunikasi Serial RS232 dengan Internal Clock 1Mhz

Tidak ada komentar
Komunikasi serial rs232 pada atmega16a internal clock 1mhz baud rate 4800

Jika kita ingin menggunakan mikrokontroller tanpa clok external dari XTAL, maka kita bisa menggunakan clock internal mikrokontroller. Misal, pada contoh ini adalah ATMega16A PU yang memiliki clock internal 1MHz. Untuk komunikasi serial rs232 dengan clock 1MHz, maka kita tidak bisa menggunakan baud rate 9600 seperti biasa sebab data yang dikirim akan error. Untuk clock 1MHz, baud rate yang kita butuhkan adalah 4800.

Tulisan ini dipicu oleh kebingungan saya ketika ingin membuat komunikasi antara ATmega16A dan komputer. Kabel yang saya gunakan serial to usb, kemudian baud rate saya setting 9600 dengan clock 8MHz. Awalnya saya pikir clock tipe mikrokontroller ini 8MHz hehe, padahal di datashit-nya (haha, maksudnya datasheet) bisa hingga 16MHz. Maklum pemula :p

Anggapan saya sebagai pemula yang suka coba-coba, jika XTAL-nya tidak saya pasang, mungkin default clock internalnya jadi 8MHz. Sebab beberapa contoh program untuk ATMega16A yang berkaitan dengan komunikasi serial rs232 menggunakan clock 8MHz. Dan yess, ternyata anggapan saya tidak sepenuhnya keliru!

Setelah saya baca manualnya [1], ternyata ATMega16A memang bisa mempunyai clock internal 8MHz, tapi secara default, ia memiliki clock internal 1MHz (baca halaman 25 bagian 8.3). Menurut manual tersebut, ia bisa dikalibrasi dengan clock internal 1MHz, 2MHz, 4MHz, dan 8MHz dengan cara memprogram CKSEL Fuse (baca halaman 28-29). Jadi, saat itu saya tidak berpikir bagaimana cara memprogram CKSEL Fuse, tapi yang penting adalah bagaimana agar saya bis memastikan benda ini bisa berkomunikasi dengan laptop.

Setelah mencari, ternyata untuk melakukan komunikasi, maka ada beberapa parameter harus disetting saat memprogram, seperti UCSRA, UCSRB, dst. Dan untuk menentukan nilai dari variabel-variabel tersebut ada hitungannya. Ya tentu hitungannya berkaitan dengan clock yang dipakai, baud rate yang digunakan, dan beberapa settingan standar komunikasi serial UART.

Untuk ATMega16A dengan clock 1MHz dan baud rate 4800, kita bisa menggunakan settingan UART seperti berikut:

/*
 * Komunikasi Serial UART ATMega16A - PU
 * dengan internal Clock 1Mhz
 * coder : haripinter
 */

#include <mega16a.h>
#include <stdio.h>
#include <delay.h>

void main(void){
    // Setting UART
    // Clock 1MHz & BAUDRATE 4800
    UCSRA=0x00;
    UCSRB=0x18;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x0C;
    
    while(1){
        printf("Hello!");
        delay_ms(1000);
    }
}


Program diatas hanya untuk mengirim string "Hello!" ke komputer berulang-ulang dengan jeda 1 detik. Tapi karena clocknya cuman 1MHz, 1 detiknya tidak sesuai. Saya belum tahu bagaimana cara menghitungnya, yang pasti ketika delay 1000ms dengan clock 1MHz dan delay 1000ms dengan clock 16MHz itu hasilnya beda. Delay 1000ms untuk 1MHz lebih lambat dari waktu sebenarnya.

Semoga tulisan ini bermanfaat :)

[1] http://www.atmel.com/images/atmel-8154-8-bit-avr-atmega16a_datasheet.pdf


Written by Hari Santoso
Komunikasi Serial RS232 dengan Internal Clock 1Mhz
Bahasan: Jika kita ingin menggunakan mikrokontroller tanpa clok external dari XTAL, maka kita bisa mengg...
Published at Selasa, 07 Juli 2015, Updated at Selasa, 07 Juli 2015
Reviewed by dr. on
Rating: 4.7

Tidak ada komentar :

Poskan Komentar