Kamis, 29 September 2016

Serial USART Interrupt pada STM32F4 Discovery

Berdasarkan pengalaman, interupt biasanya sangat dibutuhkan untuk beberapa project. Terutama project yang sifatnya multi tasking. Mangkanya perlu pemahaman tentang interupt yang cukup bagi developer microcontroller. Dan biasanya, seringkali saya memakai USART mode interupt pada semua project microcontroller saya sejak jaman kuliah, karena lebih mudah dan 99.99% data diterima dengan baik(yang penting cable noise free lah). 

Nah, pada tulisan kali ini, saya ingin share sedikit cara penggunaaan interupt ini. Saya akan mencoba menyalakan lampu dan pembacaan ADC dari hyperminal. Ada 4 user IO led di STM32F4 Discovery. Saya ingin mencoba menyalak LED satu persatu, nyala semua, dan mematikan semua LED. Sedangakn untuk ADC, saya akan membaca tegangananalog dari potensio yang ada pada Pin A2. 

Untuk Inisialisasi USART, bisa dilihat dibawah ini:


void init_USART1(uint32_t baudrate){

    /* This is a concept that has to do with the libraries provided by ST
     * to make development easier the have made up something similar to
     * classes, called TypeDefs, which actually just define the common
     * parameters that every peripheral needs to work correctly
     *
     * They make our life easier because we don't have to mess around with
     * the low level stuff of setting bits in the correct registers
     */

    GPIO_InitTypeDef GPIO_InitStruct; // this is for the GPIO pins used as TX and RX
    USART_InitTypeDef USART_InitStruct; // this is for the USART1 initilization
    NVIC_InitTypeDef NVIC_InitStructure; // this is used to configure the NVIC (nested vector interrupt controller)

    /* enable APB2 peripheral clock for USART1
     * note that only USART1 and USART6 are connected to APB2
     * the other USARTs are connected to APB1
     */

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

    /* enable the peripheral clock for the pins used by
     * USART1, PB6 for TX and PB7 for RX
     */

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

    /* This sequence sets up the TX and RX pins
     * so they work correctly with the USART1 peripheral
     */

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; // Pins 6 (TX) and 7 (RX) are used
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;             // the pins are configured as alternate function so the USART peripheral has access to them
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;        // this defines the IO speed and has nothing to do with the baudrate!
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;            // this defines the output type as push pull mode (as opposed to open drain)
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;            // this activates the pullup resistors on the IO pins
    GPIO_Init(GPIOB, &GPIO_InitStruct);                    // now all the values are passed to the GPIO_Init() function which sets the GPIO registers

    /* The RX and TX pins are now connected to their AF
     * so that the USART1 can take over control of the
     * pins
     */

    GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1); //
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1);

    /* Now the USART_InitStruct is used to define the
     * properties of USART1
     */

    USART_InitStruct.USART_BaudRate = baudrate;                // the baudrate is set to the value we passed into this init function
    USART_InitStruct.USART_WordLength = USART_WordLength_8b;// we want the data frame size to be 8 bits (standard)
    USART_InitStruct.USART_StopBits = USART_StopBits_1;        // we want 1 stop bit (standard)
    USART_InitStruct.USART_Parity = USART_Parity_No;        // we don't want a parity bit (standard)
    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // we don't want flow control (standard)
    USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; // we want to enable the transmitter and the receiver
    USART_Init(USART1, &USART_InitStruct);                    // again all the properties are passed to the USART_Init function which takes care of all the bit setting


    /* Here the USART1 receive interrupt is enabled
     * and the interrupt controller is configured
     * to jump to the USART1_IRQHandler() function
     * if the USART1 receive interrupt occurs
     */

    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // enable the USART1 receive interrupt

    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;         // we want to configure the USART1 interrupts
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;// this sets the priority group of the USART1 interrupts
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;         // this sets the subpriority inside the group
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;             // the USART1 interrupts are globally enabled
    NVIC_Init(&NVIC_InitStructure);                             // the properties are passed to the NVIC_Init function which takes care of the low level stuff

    // finally this enables the complete USART1 peripheral
    USART_Cmd(USART1, ENABLE);
}

 Jika terjadi penerimaan data dari USART , maka akan terjadi interupt dan siklus program akan masuk ke vector interupt serial. Vector interupt dalam codingan ini adalah sebagai berikut:

void USART1_IRQHandler(void){

    // check if the USART1 receive interrupt flag was set
    if( USART_GetITStatus(USART1, USART_IT_RXNE) ){

        static uint8_t cnt = 0; // this counter is used to determine the string length
        char t = USART1->DR; // the character from the USART1 data register is saved in t

        if(t=='q')
        {
            GPIO_SetBits(GPIOD, GPIO_Pin_12);
            GPIO_ResetBits(GPIOD, GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
        }
        else if(t=='w')
        {
            GPIO_SetBits(GPIOD, GPIO_Pin_13);
            GPIO_ResetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_15);
        }
        else if(t=='e')
        {
            GPIO_SetBits(GPIOD, GPIO_Pin_14);
            GPIO_ResetBits(GPIOD, GPIO_Pin_13|GPIO_Pin_12|GPIO_Pin_15);
        }
        else if(t=='r')
        {
            GPIO_SetBits(GPIOD, GPIO_Pin_15);
            GPIO_ResetBits(GPIOD, GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_12);
        }
        else if(t=='t')
        {
            GPIO_SetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
        }
        else if(t=='x')
        {
            GPIO_ResetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
        }
        else if(t=='a')
        {
            voltage=(3300*ADC3ConvertedValue)/4095;
            float_print("Voltage =", voltage);
        }

    }
}

Saya akan mengontrol LED dengan karakter sederhana seperti diatas, tanpa protokol yang aneh aneh berhubung hanya menggunakan 1 microcontroller. Yang lumayan menjadi masalah disini adalah fungsi "sprint" dari library stdio tidak bisa untuk mengirimkan data dalam bentuk float. Hal ini sedikit berbeda dengan Library stdio pada IDE untuk atmelAVR yaitu codeVision VAR yang bisa digunakan untuk processing string dari variable float. Untuk mengatasi hal tersebut, saya membuat fungsi sederhana, yang lumayan efektif lah untuk kasus ini, untuk mengirimkan hasil konversi pembacaan tegangan ADC. Berikut fungsi yang saya buat:

void float_print(char* kalimat, int float_value)
{
    char buffer[20], buffer2[50];
    int bigvalue;
    int smallvalue;

    bigvalue=float_value/1000;//ini berisi angka di depan tanda koma
    smallvalue=(float_value%1000)/10;//ini berisi angka dibelakang koma
        sprintf(buffer,("%d.%d"),bigvalue, smallvalue);
    memset(buffer2,0,strlen(buffer2));//clear all memory
    strcat(buffer2,kalimat);//string "kalimat" ditambahkan ke string "buffer2"
    strcat(buffer2,buffer);//string "buffer" ditambahkan ke string "buffer2" 
    strcat(buffer2," volt \n\r");
    USART_puts(USART1, buffer2);
    memset(buffer2,0,strlen(buffer2));//clear all memory
}

Berikut hasil akhir di hyperterminal.



 Video nya juga bisa dilihat di youtube.



Gitu saja lah, untuk main.c nya bisa di download disini ya.

Selasa, 27 September 2016

Analog Digital COnverter ADC dan Serial Communication USART pada STM32F4 Discovery

Kali ini, saya akan membahas sedikit tentang ADC yang ada pada STM32F4 Discovery board. ADC yang digunakan disini adalah 12bit, sehingga lumayan presisi lah untuk sensor sensor tertentu seperti loadcell atau sensor lain. STM32 mempunyai 3 buah ADC inbuilt, yang dimana tiap ADC dimultiplex dengan 16 channel. Jadi totalnya, STM32F4 mempunyai 48 ADC channel. Konfigurasi pin I/O yang bisa digunakan untuk ADC adalah seperti dibawah ini.


Sumber : www.stm32f4-discovery.net/2014/04/library-06-ad-converter-on-stm32f4xx/

Tentunya biasanya kita tidaka akan menggunakan itu semua. Tapi ada bebrapa aplikasi tertentu yang sepertinya akan menggunakan banyak ADC, tapi kayaknya tidak usah dibahas. hehehe. Tapi sepertinya yang perlu digaris bawahi adalah resolusi dari ADC ini yang lumayan tinggi, yaitu 12 bit, atau hitungan desimal nya bisa 4095. Seumpama saja kita mempunyai tegangan referensi STM32F4, yaitu 3.3v, maka kita bisa mendeteksi perubahan tegangan 0.0008 volt. Kayaknya bagus untuk DSP kan. 

 Langsung saja lah, kita akan bahas cara penggunaanya. Disini saya fokus pada ADC nya, untuk USART nya, akan dibahas dilain postingan. Disini, saya akan menggunakan ADC dengan mode DMA. kenapa mode DMA? karena mode DMA (Direct Memory Access) tidak terlalu membebani CPU. Jadi, register dari pembacaan ADC akan langsung dicopy ke memory/variable yang telah kita deklarasikan sendiri. Selain tidak membebani CPU, seharusnya penggunaan ADC juga akan bekerja lebih cepat karena tidak perlu masuk CPU, tapi langsung direct transfer memory. Mode ini cocok untuk pengolahan sinyal dengan frekwensi yang tinggi. 

Berikut script inisialisasi ADC mode DMA.

void ADC3_CH2_DMA_Config(void)
{
  ADC_InitTypeDef       ADC_InitStructure;
  ADC_CommonInitTypeDef ADC_CommonInitStructure;
  DMA_InitTypeDef       DMA_InitStructure;
  GPIO_InitTypeDef      GPIO_InitStructure;
  /* Enable ADC3, DMA2 and GPIO clocks ****************************************/
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOA, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);
  /* DMA2 Stream0 channel2 configuration **************************************/
  DMA_InitStructure.DMA_Channel = DMA_Channel_2;
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC3_DR_ADDRESS;
  //ADC3Converted value adalah variable yang saya deklarasikan sendiri. 
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC3ConvertedValue;  
  //Ini adalah mode ADC kita, yaitu DMA
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
  DMA_InitStructure.DMA_BufferSize = 1;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  DMA_Init(DMA2_Stream0, &DMA_InitStructure);
  DMA_Cmd(DMA2_Stream0, ENABLE);
  /* Configure ADC3 Channel2 pin as analog input ******************************/
  // konfigurasi pin yang kita pakai harap dilihat di table channel ADC, sehingga kita bisa memilih
  // pin yang free, yang bisa kita gunakan untuk ADC.

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  /* ADC Common Init **********************************************************/
  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
  ADC_CommonInit(&ADC_CommonInitStructure);
  /* ADC3 Init ****************************************************************/
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfConversion = 1;
  ADC_Init(ADC3, &ADC_InitStructure);
  /* ADC3 regular channel2 configuration *************************************/
  ADC_RegularChannelConfig(ADC3, ADC_Channel_2, 1, ADC_SampleTime_3Cycles);
 /* Enable DMA request after last transfer (Single-ADC mode) */
  ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE);
  /* Enable ADC3 DMA */
  ADC_DMACmd(ADC3, ENABLE);
  /* Enable ADC3 */
  ADC_Cmd(ADC3, ENABLE);
}

Dari Script diatas, bisa dilihat bahwa  saya menggunakan variabel "ADC3ConvertedValue" untuk menyimpan limpahan data dari DMA stream yang berisi data pembacaan memory "ADC3_DR_ADDRESS" yang berisi nilai pembacaan ADC.

Jika ada yang bertanya apakah saya membuat semua ini sendiri, jawabanya "tentu tidak semua". Enaknya CoIDE adalah, kita diberi examplae dari component yang ada CoIDE. Dan sepertinya semuanya bekerja dengan baik. Tapi tentu saja ada beberapa yang perlu disesuaikan dengan keperluan, berhubung setiap project harus disesuaikan dengan kebutuhanya masing masing. Berikut adalah hasil akhir dari dari pembacaan ADC di hyperterminal.



Silahkan lihat video di youtube untuk lebih jelasnya.


Karena kodingannya lumayan panjang, saya tidak menuliskan kodenya disini, karena akan menuh menuhin halaman. Untuk file lengkapnya, silakan download disini.

Sekian terima kasih, kalau ada kritik dan sar, silakan ditulis dibawah ya.

Senin, 26 September 2016

STM32F4 Discovery GPIO dengan menggunakan CoIDE dari CooCox

Hari ini saya iseng iseng membuka kenangan lama dari board STM32F4 Discovery yang sudah lama menghuni plastik kresek koleksi komponen komponen jaman dahulu kala. Celakanya, saya nyari nyari Keil di laptop kok g ada, ternyata sudah saya uninstall dan saya g punya backup installer. Akhirnya ya sudah lah, cari alternatif apa yang ada di hardisk, dan akhirnya saya menemukan CoIDE dari CooCox, dan memang bener bener cocox IDE ini. Saya rasa kok g seribet keil dalam add library dan semacamnya. Ok lah, kita langsung ke pembahasan.

CoIDE adalah IDE keluaran CooCox, yang kita tahu coocox ini yang bikin RTOS, yang bisa digunakan untuk develepo berbagai macam chip mulai dari ARM, Atmel, Energy Micro, Freescale, Holtex, TI, NXP, Nuvoton dsb. Dan yang lebih bagus lagi, software ini free. Benar benar free. Lihat saja screenshot dibawah ini. Untuk mendowload installernya, silakan ke www.coocox.org. 


Ok lah, kita langsung saja mencoba CoIDE. Selesai mengisntall, yang cara mengisntal nya juga biasa saja, kita akan membuat project baru yang sederhana, yaitu GPIO. Berikut step by step cara membuat project baru di CoIDE.
  1. Cari Klik Tab Project, dan klik New Project.
  2. Selanjutanya, kita masuk ke nama project. Disini saya memakai nama "gpio" sebagai nama project, dan tick  use default path.
  3.  Disini, kita diberi pilihan kita akan menggunakan chip, atau board jadi. Disini saya menggunakan STM32F4 discovery. Searusnya saya memilih board, tapi ternyata STM32F4 tidak ada pilihan nya di board. Jadi kita masuk chip saja.
  4. Kemudian pilih chip yang kita gunakan, di STM32F4 Discovery menggunakan STM32F407VG sebagai chip utamanya.
  5. Daaaannnn....ini lah hasilnya. Wellcome to new project. Kelihatan cukup menarik bukan. disitu tersedia component, yang berupa library, yang bisa kita gunakan untuk membuat project. Pada awalnya saya pikir, software ini seperti CodevisionAVR yang akan mengenerate script otomatis untuk kita. Tapi ternyata tidak, walaupun kita diberi pilihan library di situ, kita tetap akan menemukan main.c yang kosong. Tapi lumayan lah, kita tidak perlu menambah kan file file library ke folder project kita dengan cara manual. Untuk projcet GPIO ini, saya hanya menggunakan library yang sama butuhkan. Disini saya menggunakan C Library, M4 CMSIS Core, CMSIS BBOT, RCC, GPIO, dan MISC. Bagusnya software ini, dia akan memberi peringatan ketika kita memerlukan untuk menambah library lain yang kurang, jika kita akan memilih suatu library. semoga ente yang baca bakal paham lah apa maksud ane.
  6. Langsung saja kita ke main.c. Saya akan membuat aplikasi GPIO sederhana yang yang terdiri dari led dan button yang sudah ada di board STM32F4 Discovery.Berikut sedikit penjelas wiring dari bosrd discovery ini.
                 Push button biru terhubung ke      Port A0
                 led green(LD4)                               PD12
                 led orange(LD3)                            PD13
                 led red(LD5)                                  PD14
                 led blue (LD6)                               PD15
 Dan berikut script project gpio saya. Disini saya kayaknya tidak perlu saya jelaskan, lihat saja lah
dibawah.

#include "stm32f4xx.h" //library stm32f4
#include "stm32f4xx_gpio.h"//library gpio
#include "stm32f4xx_rcc.h" //library reset dan clok

GPIO_InitTypeDef  GPIO_InitStructure;
void Delay(__IO uint32_t nCount);
uint8_t d;

int main(void)
{

    /*led di board stm32f4 discovery terhubung ke Port D dengan konfigurasi
         * ----led green(LD4)    PD12
         * ----led orange(LD3)   PD13
         * ----led red(LD5)    PD14
         * ----led blue (LD6)    PD15
         *
         * push button di board stm32f4 discovery
         * ---- push button user warna biru PA0
         * */

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); // enable clock untuk portD
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); // enable clock untuk portA

    /* Configure PD0, PD12, PD13, PD14 and PD15 in output pushpull mode */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    while(1)
    {
        //jika Button ditekan, maka LED biru dan merah akan ON. jika tidak ditekan,
        // LED hijau dan orange    akan menyala.
 
        if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)!=Bit_SET)
        {
            GPIO_SetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_13);
            GPIO_ResetBits(GPIOD, GPIO_Pin_14|GPIO_Pin_15);
        }
        else
        {
            GPIO_ResetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_13);
            GPIO_SetBits(GPIOD, GPIO_Pin_14|GPIO_Pin_15);
        }
        //Delay(0x0FFFFF);
    }
}
void Delay(__IO uint32_t nCount)
{
  while(nCount--)
  {
 }
}


Setelah itu, bisa di compile dan di download. Sebelum kita download file ke chip. ada sedikit yag perlu di
setting. SIlakan klik tab "View"  --->>> Configuration.Ada sedikit perubahan yang saya lakukan. Yaitu di
tab Link, saya akan menggunkan "Use Base C Library". Dan di tab "Debugger", saya menggunakan "STLink" port "SWD" yang merupakan fitur bawaan STM32F4 Discovery. Lebih jelasnya, silakan melihat gambar dibawah ini:


                                                               Tampilan tab "Link"


                                                             Tampilan tab "Debugger"

Hasilnya, monggo cek video berikut. Ketika puh button biru ditekan LED btu dan merah akan menyala. Simple bukan. hehehe...


Cukup lah, g usah banyak banyak. Capek ngetiknya.







BP Fresh Graduated Traineeship Program

Kebetulan hari ini saya melihat postingan di facebook tentang BP yang membuka program program Graduate Traineeship Program 2016 di salah satu both di Bursa Tenaga Kerja Nasional, Jiexpo Kemayoran. Jadi teringat dengan proses rekruitment di BP yang pernah saya jalani di tahun 2014 lalu. Ada baiknya saya curhatin sedikit sambil mendengarkan lagu campursari.


Saya tahu tentang program ini ketika BP membuka booth Bursa karir ITS tahun 2014, yang dimana tahun itu industri perminyakan masih bersinar, tidak seperti sekarang yang memaksa kroco mumet macam saya standby hingga masuk hitungan bulan di rumah. Dulu ketika tahun 2012, ketika awal saya masuk dunia laut melaut, harga minyak dunia memang lagi top top nya, tembus 100 USD per barrel. Industri perminyakan seperti drilling, workover, EPC sampe seismic lagi laris laris nya. Tapi ya sudah lah, ada kala nya manusia ada di atas, kadang juga ada di bawah, manut wae karo seng gawe urip. hehehe

Oke lah, langsung saja saya critakan proses rekruitment nya. Pada waktu itu, ada BP Challenge Program yang diikuit oleh mahasiswa freshgraduate atau dengan maksimal 3 tahun pengalaman dari berbagai jurusan termasuk jurusan saya, Teknik Elektro. Pada Waktu itu, saya sudah mengikuti proses diskusi kelompok di Shangri-La Hotel Kota BNI Jakarta, lumayan lah bisa ketemu mahasiswa mahasiswi hebat hebat dari kampus lain, walaupun akhirnya gagal. Dari 6 challenger (peserta BP Challenge Program), akan diambil 4 orang sebagai Drilling engineer, dan saya termasuk dari 2 orang yang rontok di phase diskusi kelompok. hehehe

Proses pertama, Daftar di BKI ITS.
Pada BKI ITS 2014, saya sudah berkerja dengan pengalaman sekitar 2 tahun di sebuah perusahaan Oil service company di jakarta. Ketika pas ada acara BKI, saya pas dapat jatah libur setelah 4 minggu nongkrong di salah salah satu rig di daerah Madura. Persyaratan pendaftaranya standar lah, seperti ijasah, cv, surat lamaran, sertifikat dan semacamnya. Dan ternyata, tidak banyak peserta yang tahu tentang BP, ada beberapa orang teman saya yang mengira BP itu adalah BP Migas alias Badan Pelaksana Migas, yang sekarang di rubah menjadi SKK Migas. Ternyata saya termasuk segelintir lulusan elektro yang apply ke BP, pendaftar kebanyakan berasal dari Teknik Kimia, Kelautan dan Perkapalan. Setelah mendaftar di booth dan cek document pendukung, peserta hanya diinformasikan bahwa hasil seleksi document akan diumumkan di sore hari. FYI, pada waktu itu pendaftaran hanya 1 hari itu saja, soalnya hari ke 2 BKI akan digunakan BP untuk proses interview. SOre hari sambil cari kopi, saya mampir ke BKI dan melihat pengumuman BP, dan nama saya ada di list yang lolos seleksi document. Yang lolos seleksi document lumayan banyak, ada sekitar 60an, tapi dari jurusan Teknik Elektro hanya ada 6 orang (g paham saya kenapa jurusan elektro kok g banyak yang daftar ke BP).

Proses kedua, Interview pertama user.
Hari kedua, saya dapat jadwal interview pagi jam 10:00. Saya sudah ada di BKI ITS pukul 9:30, sekalian cari kopi 2000an di Mak Ning. hehehe.... Akhirnya giliran saya dipanggil interview oleh recruiter yang notabene beliau Senior Electrical Engineer di BP, dan nama nya saya lupa. Pertanyaan interview standard lah, kayak kegiatan di kampus, kalau sudah kerja apa yang dikerjain, kalau lagi d rumah ngapain dll. Tapi nampaknya bapak Senior Electrical Engineer ini punya ide lain, beliau bilang "Lho mas, sampean kerja di perminyakan toh. Saya pindah aja ya, sampean jangan ke instrument, masuk ke Drilling saja", lhah gw nya bingung, ini gw udah jelas jelas lulusan elektro yang ganteng dan penuh wibawa, kok tiba tiba di pindah ke  Drilling yang setahu saya untuk lulusan Geology sama perminyakan. Tapi manut ah, kayaknya ada baiknya balajar ilmu baru. Akhirnya beliau meminta nomor hp saya dan akan dihubungi lagi untuk interview, yang mungkin akan di laksanakan malam hari di JW Mariot Surabaya. Terus saya pulang lah, mau shopping ke Di*i*are dulu. Setelah duhuran, langsung cabut di Di*i*are buat shopping. Ketika sampe di Menur, tiba tiba HP bunyi, ada panggilan dari nomor tidak dikenal, berikut rekaman percakapan.

Saya : Assalamualaikum .
Caller : Waalaikumsalam, mas, saya pak XXX yang tadi nge-interview sampean tadi. sampean datang 

Sekarang ya di ITS. Sudah ditunggu sama Senior Drilling engineer disini.S
aya :  Lhoh, besok g bisa pak?
Caller : Sekarang mas, cepet ya. Wassalamualaikum.

Langsung coy gw balik ke BKI, sialnya dasi sama pantofel pinjeman udah gw balikin yang yang punya. wkwkwkw. Jadilah saya interview pake celana jeans, kemeja lengan panjang sama sepatu safety. Sampai di Graha ITS, saya langsung manuju ke bapak Senior Electrical Engineer yang kemudian di kenalkan ke Pak A*ung, Senior Drilling Engineer di BP. Setelah selesai dengan permintaan maaf yaang lumayan lama gara gara penampilan gw yang acak acakan, akhirnya mulai masuk ke materi materi pertanyaan interview. Awalnya saya mikir kalau interview lintas jurusan ini bakalan ribet, lha kok ternyata 5 menit selesai. Pertanyaan yang diajukan Pak A*ung sama dengan Bapak Senior Electrical Engineer, pertanyaan standard. hehehe. Setelah selesai interview, saya dizinkan pulang dan akan di SMS jika lolos ke proses selanjutnya. Dan ternyata, sekitar pukul 4 sore, ada sms dari Ibu I*a yang mengabarkan kalau saya lolos untuk Technical Assessment di Jakarta, dan perlu mengisi form perndaftaran di http://www.bp.com/careers/indonesia .

Proses Ketiga, Technical Assessment
Technical Assessment dilakukan di Jakarta, di kantor BP di daerah Cilandak. Ini salah satu test paling konyol yang pernah saya lakukan saudara saudara. Bayangkan, saya yang notabene jurusan elektro, diinterview oleh 2 orang Drilling Engineer, dan materi Technical Assessment nya adalah permasalahan wellhead. 2 orang Drilling Engineer itupun nampak nya shock ketika mereka tahu kalau saya lulusan elektro.  "Sampean yakin sama Pak A*ung di suruh daftar Drilling Engineer mas?", itu salah satu pertanyaan yang mereka lontarkan waktu Technical Assessment.hahaha. Akhirnya basa basi malah berlangsung cukup lama, ada sekitar 30 menit pertama malah jadi acara ngobrol pakai bahasa jawa berhubung interviewer berasal dari Surabaya dan Jogjakarta. Akhirnya, saya dapat selembar kertas yang bergambar wellhead dan x-mass tree yang  ada nilai tertentu di pressure gauge di xmass tree nya. Beberapa pertanyaanya adalah seperti ini:

1. Kalau BHP nya sekian, dengan depth sekian, butuh berat lumpur berapa.
2. Parameter casing design apa.
3. Casing pressure di wellhead seharusnya 1 atm, tapi pada realitanya kok selalu lebih dari 1 atm.

Dan, dengan terbata bata akhirnya bisa menjawab, walaupun banyak dibantu dari mas mas interviewer. Dan yang paling konyol lagi, pada saat itu juga saya dinyatakan lolos ke Assessment Centre di Shangrila Jakarta. Saya akhirnya malah pringas pringis tak kita guyonan, tapi salah satu dari interviewer bilang "Lhah, sampean pengen lanjut Shangrila opo g?". Ternyata gw lolos beneran coy. wkwkwkw... Akhirnya saya penasaran kenapa kok saya di loloskan, salah satu dari mereka menjawab "Kalau sampean misal jurusan Geology atau perminyakan, terus cara sampean jawab saya tadi, sampean langsung saya usir dari sini mas. Tapi berhubung sampean dari jurusan elektro yang g seberapa nyambung sama drilling dan bisa menjawab walaupun pake rumus sederhana, sampean seharusnya gampang belajar jadi Drilling Engineer". Dan apakah anda tahu rumus apa yang gunakan? coba cari lah persamaan gas ideal di wikipedia. hahaha

Proses ke-empat, Assessment Centre di Shangrila Jakarta.
Kalau sudah sampai di bagian ini, semua biaya transportasi ke Jakarta akan ditanggung oleh BP. Ya lumayan lah balik modal. hehehe. Disini, peserta diberi fasilitas penginapan semalam di shangrila, dengan tujuan agar besok nya pukul 7, semua peserta sudah siap untuk test. Seingat saya ada 3 macam test disini. Test Psikology, Communication, sama Group Discussion. Disinilah saya bertemu dengan peserta dari berbagai universitas, dan rata rata mereka heran, kenapa ada lulusan elektro bisa nyasar ke Drilling. Semua test dilaksanakan dalam bahasa Inggris. Menurut saya, inilah test yang benar benar test dari semua tahap test yang saya lalui. Karena interviewer benar benar detail dan kritis terhadap semua jawaban kita. Materi test nya kalau g salah seperti dibawah ini:
  1. Test psikologi, standar lah test nya. Tapi ada tambahannya, ini test psikologi ada essainya lho. hehehe. Essai nya berisi masalah tentang dunia perminyakan. Dulu saya kalau tidak salah dapat soal tentang  kebijakan pipeline, apakah harus melewati daerah konflik walaupun jarak pendek, atau harus memutar untuk menghindari daerah konflik tapi dengan pipeline yang jauh lebih panjang. Essai ini akan di jadikan bahan untuk test ke 2.
  2. Test komunikasi. diawali dengan basa basi yang menurut saya bukan sekedar basa basi karena kemampuan bahasa inggris akan sangat diuji disini. Bagaimana cara kita berbicara untuk hal non-teknis dan bagaimana kita berbicara tentang hal teknis, akan diuji disini. Peserta diberi waktu 15 menit untuk mempresentaikan jawaban dari essai yang diberikan di test 1. Dan FYI, essay tersebut benar benar merepresentasikan kondisi nyata, termasuk estimasi biaya pipeline per meter dan biaya perlatan dan personil dll ada di situ. jadi presentasi itu bukan cuman sekedar cara kita ngomong, tapi benar benar mengacu pada persoaln nyata di dunia perminyakan. Kita diminta untuk mengambil kebijakana yang berdasar pada parameter parameter ekonomi ataupun sosial.
  3. Leaderless Group Discussion. Ini Test yang paling berat menurut ane gan. Bukan soal nya yang berat. Tapi saingan nya bro, mantab mantab. Kita diberikan permasalahan yang membutuhkan pemikiran detail, dan bener, kayaknya permasalahan nya agak susah kalau diselesaikan oleh 1 orang. Waktu leaderless grup discussion ini adalah 30 menit. Kalau ini saya masih ingat permasalahan yang diberikan apa. Begini, Pada suatu sumur ditemukan water cut nya lumayan tinggi, sehingga tidak efisien kalau dikirimkan minyak mentah yang masih raw, bercampur dengan air. Selain itu, dari sumur juga dihasilkan gas yang jumlahnya tidak significant, tapi terlalu besar untuk dibakar di flare boom. Ahhirnya 6 orang pada eyel eyelan, ada yang setuju dibikin injection well, ada yang ide beli gas engine untuk power plan platform, ada yang ide dibakar aja gas nya. hahahah...rame lah.
  4. Management Interview. Gw g sampe test ini bro. heheh
  5. Medical checkup, g sampek sini juga broo. hehehe
Itulah beberapa phase test yang saya lalui di BP Challenge Program tahun 2014. Agak sedikit kecewa dengan hasilnya, tapi sekaligus bangga bisa bertemu dengan peserta peserta lain yang memang hebat hebat. Kayaknya kalau ada program seperti ini lagi gw juga bakalan daftar, kalau umur masih memungkinkan.

Kamis, 22 September 2016

Remote Dekstop Raspberry Pi 3 with xrdp

Remote Dekstop Raspberry kadang dibutuhkan jika pada kondisi kondisi tertentu (baca: g ada monitor) seperti kurangnya fasilitas display seperti monitor ataupun LCD. Lagipula , remote dekstop adalah cara yang paling mudah untuk melindungi system dari tangan tangan jahil yang tidak seberapa paham (baca: orang sok tahu) dengan konfigurasi system raspberry yang anda buat.

Disini, saya akan membagikan cara melakukan remote dekstop raspberry PI dengan menggunakan laptop berbasis OS Window 7 Home Premium. Software yang akan digunakan adalah software xrdp, penjelasan tentang xrdp bisa dilihat disini. Saya tidak akan menggunakan kabel karena baik laptop maupun Raspberry saya terkoneksi dengan access point  yang saya gunakan untuk sharing koneksi Internet. Walaupun kita akan menyingkirkan penggunaan monitor untuk remote dekstop, tapi untuk instalasi xrdp kita tetap membutuhkan fasilitas monitor dengan koneksi HDMI agar kita bisa melihat process dari instalasi.

Ok lah, kita awali pada sisi Raspberry dulu.

Instalasi xrdp pada Raspberry Pi 3.
  1. Pastikan Raspberry anda sudah terintal OS yang compatible dengan xrdp. Disini, saya menggunakan Raspbian Jessie untuk system operasi pada Raspberry saya.
  2. Pastikan Raspberry anda sudah terhubung dengan internet. Untuk lebih mudahnya, konek-kan saja rapberry pada internet hotspot di rumah anda(yang DHCP saja biar cepat).
  3. Pastikan antara Raspberry dan laptop anda ada pada satu jaringan. Laptop saya mempunyai IP 192.168.1.4 dan Raspberry saya mempunyai IP 192.168.1.3 dengan subnet mask 255.255.255.0 (ini DHCP dari access point/router saya).
  4.  Buka terminal, dan type “sudo apt-get install xrdp”   
  5.  Raspberry akan segera mendownload xrdp dari repo. Jika adiminta persetujuan yang dimana saya juga g baca, type “Y” dan pencet tombol enter. Tunggu sampai instalasi selesai. 
  6. Jika sudah selesai, Reboot raspberry.
  7. xrdp akan masuk ke aplikasi startup secara default, sehingga dia running di background ketika Raspberry berjalan. Tapi untuk sekedar cek, buka terminal dan type “xrdp”.
  8. That is, instalasi xrdp sudah selesai di raspberry dan sudah siap digunakan.
Set-up remote dekstop connection di Laptop

  1. Laptop saya menggunakan WIndow 7 (Ori vroooohhh..), dimana tersedia aplikasi remote dekstop. Untuk menjalankan aplikasi ini, ketik “remote” pada search program and file, dan klik aplikasi Remote Dekstop Connection.
  2. Maka akan muncul tampilan seperti di bawah ini. Pada nama Computer, cukup ketikan ip address dari raspberry pi yang kita punya, yaitu 192.168.1.3 untuk laptop saya. Untuk username, kita isikan default username yaitu pi (ini setingan default dari raspberry). Kemudian klik Connect.
  3. Maka aplikasi remote dekstop akan meng-establish koneksi ke raspberry. Jika aplikasi remote dekstop berhasil menemukan ip address Raspberry, maka akan muncul tampilan seperti ini, yang meminta uername dan password.
  4. Isikan username dna password default dari raspberry yaitu pi untuk username, dan raspberry untuk password
  5. Yap, jika semua dilakukan dengan benar, maka kita akan terhubung secara remote ke raspberry. Dan FYI, jika kita melakukan remote dekstop antar PC windows, biasanya PC yang kita remote akan mengunci window. Untuk remote dekstop di Raspberry, hal tersebut tidak berlaku, sehingga Monitor dari raspberry akan tetap menampilan display dari raspberry. Berikut hasil akhir dari remote dekstop ke raspberry.
Cukup sekian tulisan ini, jika ada yang perlu dikoreksi atan ditanyakan, silakan komen dibawah, siapa ahu bisa dipecahkan bersama sama.

    Instalasi Raspbian Jessie pada Raspberry pi model B

    Cara instalasi Operating system Raspberry Jessie pada raspberry sangat mudah dan cepat dengan menggunakan bantuan tool tertentu yang free alias gratis. Kebanyakan orang yang belum pernah menggunakan raspberry akan bertanya tanya sebelumnya, “Bagaimana membuat hardware ini hidup dan menampilkan buah berry di monitor?”. Itu dulu pertanyaan simple yang akan di bahas di potingan ini.

    Saya tidak akan membahas apa itu Raspberry Pi 3 karena saya kira sudah banyak website yang membahasnya. Yang akan saya bahas di postingan ini adalah bagaimana melakukan instalasi OS ke microSD yang tidak semua orang berhasil melakukanya.

    Ok lah, marilah kita persiapan peralatan tempur kita, silakan di cek dibawah ini:
    1.  Rasperry Pi 3 board. Disini saya akan menggunakan model B dengan pertimbangan hanya ini raspberry board yang saya punya.
    2. Power supply 5V DC. Agar lebih mudah, saya menggunakan power supply dengan output 5V DC 1000mAH, dengan microUSB connector (memakai charger S**Y XP**A Z punya saya). Generally speaking, 5V 2000mAH will be perfect.
    3. HDMI to VGA converter. Saya butuh ini karena saya memakai monitor komputer dengan input VGA.
    4. MicroSD memory. Saya memakai microSD 8GB class 6 dari V-Gen, dengan pertimbangan harganya yang cukup murah. Dari manual raspberry, direkomendasikan untuk menggunakan microSD dengan kapasitas minimal 4GB. Check this link out.
    5. MMC to microSD adapter. Kebetulan laptop saya ada slot MMC nya, sehingga saya membutuhkan adapter ini. Silakan beli saja di toko accessories HP, harganya Rp.5000,00 each.
    6. LCD Monitor. Minjem televisi punya tetanggapun boleh.
    7. SDFormatter tool. Tool ini digunakan untuk memformat microSD dengan cepat dan mudah. Kadang dalam instalasi OS raspberry, ada masalah pada copy image OS sehingga membuat microSD corrupt, sehingga dengan tool ini kita memformat ulang microSD dengan cepat.SDFormatter  bisa didownload disini.
    8. Win32DiskImager. Digunakan untuk meng-copy Image OS dari PC ke SDcard. Tool ini sangat mudah digunakan dan juga free. Win32DiskImager bisa didownload disini.
    9. OS Raspbian Jessie. Berhubung ketika saya membuka web Raspberry tersedia Raspbian Jessie, maka kita akan menggunakan Raspbian Jessie untuk OS. File image OS ini sekitar 1.4GB dalam rar file. Jangan lupa untuk meng-extract file rar OS yang sudah didownload. Raspbian Jessie bisa di download disini.
    Itu saja yang dibutuhkan untuk process intalasi OS di Raspberry, selain juga perlu laptop dengan OS windows beserta mouse dan keyboard untuk raspberry. Bagi yang ingin menggunakan os Linux, akan dibahas di lain kesempatan. Penting juga bagi kita untuk memastikan bahwa peralatan bantu seperti HDMI to VGA dan MMC to microSD adapter benar benar bekerja agar tidak mempersulit kita ketika instalasi OS ke raspberry. 

    Langsung saya, setelah selesai men-download tools dan OS yang kita perlukan, maka step by step dari intalasi akan di jelaskan dibawah ini:
    1. Mem-format microSD dengan menggunakan SD formatter. Software ini akan mendeteksi secara otomatis dimana drive microSD akan berada, namun kita harus benar benar memastikan bahwa drive yang dipilih benar benar microSD yang akan kita format, karena software ini akan menghapus semua data di drive yang kita pilih. Pilih Format Option ke “FULL(Erase) FORMAT, FORMAT ADJUSTMENT ON” dengan meng-klik button Option. Kemudian tekan button “Format”.
    2.  Meng-copy image OS Raspbian Jessie ke microSD. Setelah microSD selesai di format, kita akan meng-copi-kan OS Raspbian Jessie ke microSD dengan menggunakan Win32DiskImager. Pilih folder dimana OS anda berada, dan pilih juga drive dimana microSD anda berada, kemudian tekan button “Write”. Proses copy image ini sekitar 10 menit, tergantung laptop dan juga class dari microSD yang dipakai. 
      FYI, saya beberapa kali mengalami masalah fail to copy image setelah proses berjalan sekitar 14% karena pada awalnya saya menggunakan USB to microSD converter, dan itu membuat saya cukup lama berpikir dimana permasalahanya. Jika microSD yang gagal ini digunakan di Raspberry, maka gagal booting, yang diindikasikan dengan LED hijau yang flasing tidak beraturan 3 kali kemudian berhenti.  Akhirnya saya mencoba menggunakan MMC to microSD adapter dan proses copy image berjalan lancar hingga 100%. Jika sudah selesai dengan proses copy image, akan mumpul popup yang melaporkan image is written successfully. Jangan lupa menggunakan  Safely remove hardware ketika akan mencabut microSD dari laptop. 
    3. Edit config file pada microSD yang sudah berisi OS. Ini merupakan proses penting karena jika kita melewatkan proses ini, maka kita tidak akan mendapatkan tampilan apapun di monitor ketika Raspberry sudah di power on, sehingga beberapa orang mengira bahwa raspberry fail to boot alias gagal booting. Kita perlu meng-edit config file dari OS sehingga OS akan memilih untuk masuk ke mode HDMI sebagai display.Masuk ke drive microSD yang sudah dicopy OS, disitu akan ditemukan file config.txt yang sedikit membingungkan untuk dibaca. Scroll ke bawah, hingga bagian ini:
      # uncomment to force a HDMI mode rather than DVI. This can make audio work in
      # DMT (computer monitor) modes
      # hdmi_drive=2
      Uncoment script di atas sehingga menjadi seperti dibawah ini: 
      # uncomment to force a HDMI mode rather than DVI. This can make audio work in
      # DMT (computer monitor) modes
      hdmi_drive=2
      Kemudian tekan save. Pastikan microSD protect switch nya tidak di-ON-kan agar file ini bisa diedit. Jika sudah disave, jangan lupa untuk mengguanakan fasilitas “Safely remove hardware”.
    Jika semua proses berjalan lancar, maka jika Raspberry di power on, akan muncul booting script pada monitor dan LED hijau yang terus berkedip kedip yang menandakan proses instalasi OS berhasil. Jika sudah selesai booting, maka beginilah tampilan dari OS Raspbian Jessie pada board Raspberry pi 3 Model B.