Tutorial kali ini akan membahas akses dan komunikasi antara Real Time Clock (RTC) pada modul UniPi dengan Arduino. Hal ini dilakukan jika Anda tidak memiliki Raspberry Pi atau hanya ingin menggunakan Arduino untuk memanfaatkan periferal yang terdapat pada modul UniPi. Adapun RTC pada modul UniPi menggunakan IC MCP79410 yang dapat diakses menggunakan protokol I2C. Berdasarkan informasi yang terdapat pada dokumentasi UniPi, IC MCP79410 pada modul UniPi dapat diakses pada alamat 0x6F untuk RTC, dan 0x57 untuk EEPROM. Seperti pada tutorial sebelumnya, untuk mengakses periferal yang menggunakan protokol I2C pada modul UniPi, Anda perlu menyolder pin header jika modul Anda belum memilikinya. Berikut ini adalah letak pin header I2C pada modul UniPi:

External I2C Header

Selain pin header, Anda juga membutuhkan baterai koin CR2032 sebagai sumber tegangan independen IC MCP79410. Pasang baterai pada tempat yang telah disediakan, serta hubungkan Arduino dengan modul UniPi melalui pin header I2C dengan konfigurasi berikut ini:

UniPi Arduino
VCC 5V
GND GND
SCL SCL
SDA SDA

Setelah terhubung, jalankan IDE Arduino dan salin sketch berikut ini kemudian upload ke Arduino yang Anda gunakan. Sketch ini merupakan contoh yang ada di github, dan Anda perlu melakukan penyesuaian secara manual pada fungsi loop agar waktu yang Anda gunakan sesuai dengan jam pada saat Anda melakukan upload sketch.

/**
 * From: http://web.icedsl.hu/enicke/mcprtc/mcpcode.html
 */

#include <Wire.h>

void setup()
{
   Serial.begin(9600);
   Wire.begin();
}

void loop()
{
    WriteRTCByte(0,0);      // STOP RTC
    WriteRTCByte(1,0x36);   // MINUTE=36
    WriteRTCByte(2,0x08);   // HOUR=8
    WriteRTCByte(3,0x01);   // DAY=1(MONDAY) AND VBAT=1
    WriteRTCByte(4,0x17);   // DATE=17
    WriteRTCByte(5,0x02);   // MONTH=2
    WriteRTCByte(6,0x20);   // YEAR=20
    WriteRTCByte(0,0x80);   // START RTC, SECOND=00
    delay(100);

    while (1) {
        Serial.print("20"); //year beginning with 20xx
        DisplayRTCData(6,8);
        Serial.print(".");
        DisplayRTCData(5,5);
        Serial.print(".");
        DisplayRTCData(4,6);
        Serial.print(" ");
        DisplayRTCData(2,6);
        Serial.print(":");
        DisplayRTCData(1,7);
        Serial.print(":");
        DisplayRTCData(0,7);
        Serial.println();

        delay(1000);
    }
}

unsigned char ReadRTCByte(const unsigned char adr)
{
    unsigned char data;

    Wire.beginTransmission(0x6f);
    Wire.write(adr);
    Wire.endTransmission();

    Wire.requestFrom(0x6f,1);
    while (Wire.available()) data = Wire.read();

    return data;
}

void WriteRTCByte(const unsigned char adr, const unsigned char data)
{
    Wire.beginTransmission(0x6f);
    Wire.write(adr);
    Wire.write(data);
    Wire.endTransmission();
}

void DisplayRTCData(const unsigned char adr, const unsigned char validbits)
{
    unsigned char data;

    data = ReadRTCByte(adr);
    data = data & 0xff>>(8-validbits);
    if (data < 10) Serial.print("0");  //leading zero
    Serial.print(data,HEX);
}

Setelah mengedit sketch di atas, lakukan upload ke Arduino dengan menekan tombol Ctrl-U pada keyboard, atau memilih menu Sketch -> Upload pada IDE Arduino. Setelah proses upload selesai, maka RTC modul UniPi akan aktif dan dapat Anda periksa menggunakan Serial Monitor pada IDE Arduino dengan menekan tombol Ctrl-Shift-M pada keyboard atau dengan memilih menu Tools -> Serial Monitor. Berikut ini adalah contoh output pada Serial Monitor setelah melakukan upload sketch:

2020.02.17 08:51:16
2020.02.17 08:51:17
2020.02.17 08:51:18
2020.02.17 08:51:19
2020.02.17 08:51:20

Bisa terlihat bahwa RTC pada modul UniPi berfungsi dengan baik. Selanjutnya, Anda dapat memanfaatkan RTC tersebut untuk keperluan perangkat embedded yang Anda rancang. Sekian tutorial singkat kali ini, semoga bermanfaat. Terima kasih kepada Allah SWT, dan Anda yang telah membaca tutorial ini.

Gan Compile Python seperti apa yang susah di decompile? Kemaren sya nanya gak di jawab

Saya udah jawab itu: kalau pakai python lebih mudah untuk didecompile dan semacamnya. Kalau emg serius, bikin pakai C/C++ atau assembly aja.