Saturday, 17 March 2018

RasPi Library GPIO WiringPi (Core Function, Raspberry Pi Specifics dan Timing)

Dengan menggunakan wiringPi yang juga dapat digunakan dengan command line, dengan cara kita meninstall progamnya dahulu sehingga kita bisa menggunakan wiringPi ini dari shell script. untuk menginstalnya bisa dilihat di https://kepython.blogspot.co.id/2018/03/raspberry-pi-install-wiringpi.html .

Untuk RasPi ada function khusus yang bukan merupakan core dari wiringPi, tapi dapat bertindak pada RasPi hardware, dan ada beberapa function yang dapat digunakan bila menggunakan hardware modul.
Function-function tersebut adalah:
  • void digitalWriteByte(int value);
  • pwmSetMode (int mode);
  • pwmSetRange (unsigned int range);
  • pwmSetClock (int divisor) ;
  • piBoardRev (void) ;
  • wpiPinToGpio (int wPiPin) ;
  • physPinToGpio (int physPin) ;
  • setPadDrive (int group, int value) ;


void digitalWriteByte (int value) ;

Function yang menulis (write) 8 bit byte pada 8 gpio pertama, yang merupakan cara cepat untuk menset 8 bit secara langsung dengan nilai tertentu.

pwmSetMode (int mode) ;

Dengan PWM merupakan optional mode, yaitu balance dan mark:space. Mark:space adalah mode tradisional, dan pada default rasPi adalah balance. Kita bisa mengganti mode ini mengan parameter: PWM_MODE_BAL atau PWM_MODE_MS.

pwmSetRange (unsigned int range) ;

Untuk mengatur registrasi PWM, default 1024

pwmSetClock (int divisor) ;

Setting pembagi PWM clock. PWM control tidak bisa digunakan pada Sys mode (untuk lebih lanjut silahkan pelajari Broadcom ARM peripherals manual)

piBoardRev (void) ;

Hasil dari perintah ini adalah informasi tentang revisi board RasPi. Ada beberapa fungsi pin di BCM_GPIO yang berbeda pada revisi yang beda.

wpiPinToGpio (int wPiPin) ;

Mengembalikan (return) nomor pin BCM_GPIO yang diberikan oleh wiringPi.

physPinToGpio (int physPin) ;

Mengembalikan (return) nomor BCM_GPIO pin yang disupply pin fisik pada konektor P1. 

setPadDrive (int group, int value) ;

Untuk mensetting driver pad pada group pin. Ada 3 group pin dan ukuran drive antara 0-7.
JANGAN SENTUH FUNCTION INI, KECUALI KITA TAHU APA YANG SEDANG KITA KERJAKAN. TIDAK UNTUK COBA-COBA TANPA TAHU MAU KEMANA TUJUANNYA.


Core Function

Function-function ini bekerja langsung pada RasPi dan juga GPIO ekternal module seperti GPIO expander dan lain-lain, tapi tidak semua modul disupport dengan semua function.

Core function:


  • void pinMode (int pin, int mode) ;
  • void pullUpDnControl (int pin, int pud) ;
  • void digitalWrite (int pin, int value) ;
  • void pwmWrite (int pin, int value) ;
  • int digitalRead (int pin) ;
  • analogRead (int pin) ;
  • analogWrite (int pin, int value) ;


  • void pinMode (int pin, int mode) ;
    GPIO setting untuk INPUT, OUTPUTM, PWM_OUT atau GPIO_CLOCK.

    PWM_OUTPUT  hanya untuk pin 1 (wiringPi) atau pin 18 (BCM), dan
    GPIO_CLOCK untuk pin 7 (wiringPi) atau pin 4 (BCM).

    Function ini tidak bekerja pada mode Sys, bila kita ingin mengubah pin mode kita harus menggunakan program gpio sebelum menjalankan program.

    void pullUpDnControl (int pin, int pud) ;
    Ini adalah mode pull-up atau pull-down resistor pada pin. Harusnya function ini digunakan untuk input pin. RasPi memiliki fungsi pull-up dan pull-down resistor secara internal.
    Parameter int pud ditulis

    • PUD_OFF, tidak menggunakan fungsi pull-up ataupun pull-down secara internal
    • PUD_DOWN, input tersambung dengan ground menggunakan 50kΩ resistor secara internal
    • PUD_UP, input tersambung dengan vcc 3.3v, juga mengguanakan 50kΩ resistor secara internal
    Function ini tidak memberikan efek ketika kita berada di Sys mode, kita harus masuk ke program gpio terlebih dahulu sebelum program dijalankan.

    void digitalWrite (int pin, int value) ;
    Untuk pin yang telah diset sebagai OUTPUT, kita menset pin on (HIGH, atau 1) dan off (LOW, atau 0). WiringPi akan menset semua angka selain 0 (nol) sebagai HIGH. Hanya 0 (nol) yang diartikan sebagai LOW.

    void pwmWrite (int pin, int value) ;
    Setting pin registrasi PWM. RasPi memiliki hanya 1 (satu, sejauh ini sampai RasPi3) pin pada board-nya yaitu pin BCM_GPIO 18. yang bernilai dari 0 - 1024.

    Juga tidak berkerja pada Sys mode. 

    int digitalRead (int pin) ;
    Function ini membaca (return) value dari pin input. Hasilnya adalah HIGH (1) atau LOW(0), tergantung dari level logic pin tersebut.

    analogRead (int pin) ;
    Pembacaan pin input pada input pin analog. Kita harus menambahkan register analog modul untuk menggunakan function ini pada device seperti Gertboard, quick2Wire analog board, dan sebagainya.

    analogWrite (int pin, int value) ;
    Pemberian signal untuk analog output. Kita harus menambahkan register analog modul untuk menggunakan function ini pada device seperti Gertboard, quick2Wire analog board, dan sebagainya.


    Timing

    Ada beberapa function timing yang dapat kita gunakan:

    • unsigned int millis (void)
    • unsigned int micros (void)
    • void delay (unsigned int howLong)
    • void delayMicroseconds (unsigned int howLong)

    unsigned int millis (void)
    Function ini memberikan return yang menunjukan waktu dengan unit millidetik dengan 32 bit sehingga kita memiliki waktu 49 hari.

    unsigned int micros (void)
    Function ini sama seperti millis,tapi return yang menunjukan waktu dengan unit mikrodetik dengan 32 bit sehingga kita memiliki waktu 71 menit.

    void delay (unsigned int howLong)
    Function ini menyebabkan program akan berhenti dengan unit waktu millidetik. Dengan Linux multitasking waktu tidak seakurat yang kita inginkan, akan terlambat. Maksimum delay menggunakan unsigned 32 bit integer, 49 hari delay yang bisa kita gunakan.

    void delayMicroseconds (unsigned int howLong)
    Function ini sama seperti delay,tapi menyebabkan program akan berhenti dengan unit waktu mikradetik. Dengan Linux multitasking waktu tidak seakurat yang kita inginkan, akan terlambat. Maksimum delay menggunakan unsigned 32 bit integer, 71 menit delay yang bisa kita gunakan.


    Penundaan di bawah 100 mikrodetik menggunakan loop yang terus menerus menggunakan waktu sistem, Penundaan lebih dari 100 mikrodetik dapat dilakukan dengan menggunakan fungsi nanosleep sistem (Anda mungkin perlu mempertimbangkan implikasi penundaan yang sangat singkat terhadap keseluruhan kinerja sistem , terutama jika menggunakan thread.

    No comments:

    Post a Comment