• Tidak ada hasil yang ditemukan

Aplikasi Learning Board Module Nuvoton NUC140 untuk Pembacaan Sensor Accelerometer MMA7361L dan Pengiriman Data Sensor pada Perangkat Android

N/A
N/A
Protected

Academic year: 2022

Membagikan "Aplikasi Learning Board Module Nuvoton NUC140 untuk Pembacaan Sensor Accelerometer MMA7361L dan Pengiriman Data Sensor pada Perangkat Android"

Copied!
9
0
0

Teks penuh

(1)

 

Aplikasi Learning Board Module Nuvoton NUC140 untuk Pembacaan Sensor Accelerometer MMA7361L dan Pengiriman Data Sensor pada Perangkat Android

Panji Peksi Branjangan, Panca Mudjirahardjo Jurusan Teknik Elektro, Fakultas Teknik, Universitas Brawijaya,

Jl. MT. Haryono 167, Malang – 65145 email : [email protected], [email protected].

Abstract – Dalam laporan praktikum aplikasi mikrokontroler ini, akan dipaparkan aplikasi mikrokontroler NUC140 untuk pembacaan sensor Accelerometer MMA7561L. Sistem yang akan digunakan terdiri dari learning board, sensor, dan sistem komunikasi bluetooth untuk menampilkan grafik pembacaan sensor. Hasil yang didapatkan adalah tampilan ADC pembacaan kemiringan sensor 3 axis serta data logger hasil pembacaan sensor tersebut pada aplikasi android.

Kata kunci: ADC, Accelerometer, Bahasa C, data logger

I. Pendahuluan

Salah satu peran penting bagi mikrokontroler adalah sebagai sarana pembacaan sensor untuk tujuan tertentu. Seperti yang telah diketahui bahwa sensor merupakan perangkat atau alat yang dapat mengubah besaran non elektrik menjadi besaran elektrik. Namun besaran elektrik tersebut tidak berarti apapun apabila tidak diproses menjadi sinyal yang mengandung informasi.

Learning board Nuvoton NUC140 adalah salah satu modul mikrokontroler yang berbasis ARM.

Modul ini selain terdapat chip ARM utama, terdapat pula perangkat tambahan untuk mendukung pengembang aplikasi mikrokontroler untuk merancang prototipe tertentu sehingga memudahkan dalam proses perancangannya.

Perangkat tambahan tersebut antara lain LCD grafik, potensiometer terhubung ADC, LED display berwarna merah, LED RGB, antarmuka serial, dan keypad.

NUC140 series adalah ARM ® Cortex ™- mikrokontroler dengan M0 core didalamnya yang cocok digunakan untuk kontrol industri dan aplikasi yang membutuhkan fungsi komunikasi khusus. Cortex ™-M0 adalah prosesor ARM terbaru dengan kinerja 32-bit dengan biaya yang setara dengan mikrokontroler 8-bit.

NuMicro Seri NUC100 memiliki inti ARM Cortex M0 yang tertanam dengan kecepatan hingga 50 MHz, dilengkapi dengan memori flash untuk program 32K/64K/128Kbyte., SRAM sebesar 4K/8K/16K-byte dan memori flash loader untuk ISP (In System Programming) sebesar 4K-byte.

Selain itu juga dilengkapi dengan berbagai macam

peripheral, seperti GPIO, Timer, Watchdog Timer, RTC, PDMA, UART, SPI/MICROWIRE, I2C, I2S, PWM, LIN, CAN, PS2, USB 2.0 FS Device, ADC 12-bit, komparator analog, Low Voltage Reset dan Brown-out Detector. Gambar 1 menunjukkan diagram blok dari NuMicro NUC130/140 Series.

Gambar 1. Blok Diagram NUC140

NUC140VE3CN, sehingga perlu diperhatikan tegangan input ini maksimal adalah 5.5V (menurut datasheet NUC140).

Pada board terdapat juga catudaya teregulasi 3.3V menggunakan chip LM1117. Tipe chip regulator ini tidak dinyatakan dalam skematik. Tegangan dari Powerjack 3 pin dan konektor USB dilewatkan melalui dioda sehingga aman dari kesalahan polaritas pemasangan, namun tidak melindungi dari kerusakan jika tegangan masuk melebihi 5.5V.

Gambar 2. Layout Learning Board NUC140

Sensor yang digunakan dalam praktikum aplikasi mikrokontroler ini adalah sensor Accelerometer – merupakan sensor pendeteksi kemiringan terhadap sudut tegak lurus gravitasi bumi. Sedangkan tipe sensor yang digunakan adalah MMA7361L produksi Freescale Semiconductor. MMA7361L adalah sensor accelerometer yang memiliki struktur

(2)

  dasar berupa micromachine dan bekerja dengan sifat kapasitif. Sensor tersebut dapat mendeteksi gravitasi dengan dua mode sensitivitas yaitu 1,5g dan 6g. sensor tersebut juga memiliki mode sleep sehingga dapat digunakan untuk aplikasi yang berbasis mobile dan menggunakan battery sebagai power supply-nya.

Gambar 3. Sensor Accelerometer MMA7361L

Fitur lain yang terdapat pada MMA7361L yaitu memiliki arus konsumsi 400µA pada saat aktif dan 3µA pada saat mode sleep. Tegangan operasi yaitu pada 2,2-3,6 volt. Sensitivitas 800mV/g pada mode 1,5g. Dapat mendeteksi jatuh bebas 0g.

Gambar 4. Blok diagram fungsional MMA7361L

Dalam blok diagram tersebut, sensor MMA7361L memiliki keluaran yang telah difilter sehingga meminimalisir noise yang timbul.

II. Metode

Dalam praktikum ini, pertama yang dilakukan adalah perancangan sistem melalui blok diagram sebagai berikut:

Gambar 5. Blok Diagram Sistem

Dari blok diagram yang sederhana tersebut, dapat diamati bahwa terdapat beberapa hubungan antara mikrokontroler dengan sensor dan output. Dari input sensor terdapat tiga output yaitu x-axis, y- axis, z-axis. Untuk NUC140, peripheral yang diaktifkan yaitu GPIO output yang terhubung dengan LED, ADC menggunakan 3 kanal untuk masing-masing axis, LCD graphic untuk menampilkan pembacaan nilai sensor, dan UART untuk mengirim data ke device data logger (dalam hal ini menggunakan smartphone android oppo seri neo-5).

Software untuk editor dan compiler menggunakan Coocox CoIde dengan tampilan awal sebagai seperti dalam gambar 6.

Gambar 6. Tampilan awal software Editor dan Compiler

Software tersebut bersifat open source dan memiliki beberapa contoh driver atau library untuk aplikasi tertentu. 

Untuk program utama dalam praktikum ini adalah menggunakan struktur interrupt ADC. Sehingga tampilan akan di-update sesaat setelah mikrokontroler selesai mencuplik data dari ADC.

Hal tersebut dilakukan untuk menghindari terjadinya program stuck atau hang.

Flowchart sederhana dari program utama praktikum tersebut adalah sebagai berikut.

Gambar 7. Flowchart Program Eksperimen

Dari flowchart program dalam gambar 7, dapat diamati bahwa GPIO LED berfungsi sebagai indikator yang menunjukkan proses pembacaan sensor dan tampilan nilai sensor. Apabila telah berhasil, maka LED akan padam. Selama LED menyala, maka program akan berurutan menjalankan pembacaan ADC dari PORTA4, PORTA5 dan PORTA6.

Data hasil pembacaan akan diproses dalam program dan ditampilkan pada LCD dengan format per baris yaitu:

(3)

  Baris 1 - “Nuvoton NUC140”

Baris 2 - “Sensor MMA7361L”

Baris 3 - “x= y= z=”

Baris 4 - nilai masing-masing sensor

Masing-masing data tersebut selanjutnya dikirim melalui UART dengan fomat sebagai berikut:

“x’datax’ y’datay’ z’dataz’ ”

Sehingga apabila misal terdapat data x=1011, y=2746, z=3009, maka UART akan mengirim data dengan format:

“x1011 y2746 z3009”.

Nilai ADC yang dibaca menggunakan resolusi 12 bit, dimana nilai minimum 0 dan maksimum 4095.

Namun dalam pembacaan sensor, dibutuhkan kalibrasi kembali dari 0g, -1g dan 1g. Sehingga dalam kalibrasi akan dilakukan perhitungan nilai maksimum dan minimum sebagai 1g dan -1g, serta pembagian untuk memperoleh nilai 0g.

Untuk setting UART channel 0 menggunakan parameter sebagai berikut:

- Baud Rate 9600 - Data 8 bit - 1 stop bit - No parity - FIFO 1 byte

Data UART akan dikirim dan dihubungkan melalui modul bluetooth. Pada Android menggunakan aplikasi “Arduino Centrale Free” untuk menyimpan data pembacaan sensor. Selanjutnya data yang telah disimpan dapat digunakan sebagai data sekunder untuk aplikasi lainnya.

Pada program editor CoIde digunakan tiga driver utama yaitu driver GPIO, driver LCD dan driver UART. Pada project yang dibuat, nama ketiga file driver tersebut adalah DrvGPIO.h DrvADC.h dan DrvUART.h.

III. Hasil Eksperimen

Pembacaan ADC sensor MMA7361L dalam eksperimen ini adalah sebagai berikut:

Tabel 1. Hasil pembacaan sensor

Data (int) x-axis y-axis z-axis

Max (1g) 3014 3106 2694

Min (-1g) 996 1078 745

Dalam experimen NUC140 ini terdapat dua hasil utama yaitu tampilan pembacaan sensor pada LCD dan tampilan data logger pada android.

Pada LCD Learning Board, tampilan hasil pembacaan sensor adalah sebagai berikut:

Gambar 8. Tampilan LCD Graphic

Tampilan LCD pada Gambar 8 menunjukkan pembacaan sensor x=1292, y=1867 dan z=1086.

Apabila dihitung dari besaran gravitasi maka dapat dihitung nilai sensor sebagai berikut:

Dari hasil perhitungan tersebut maka dapat dihitung pula pembacaan y dan z axis dengan metode serupa.

Untuk data logger, tampilan pada android adalah sebagai berikut:

Gambar 9. Tampilan data logger pada android

IV. Kesimpulan

Dari hasil eksperimen terdapat beberapa kesimpulan antara lain sebagai berikut:

1. Setiap peripheral NUC140 / ARM M0 harus diinisialisasi terlebih dahulu sebelum digunakan 2. Driver dan library diperlukan untuk

mempermudah perancangan program NUC140 3. ADC pada NUC140 memiliki resolusi default

12 bit

4. Nilai pembacaan ADC dapat disimpan dalam jumlah besar dengan memanfaatkan datalogger eksternal

V. Saran

Beberapa saran dari hasil eksperimen pembacaan sensor accelerometer menggunakan learning board Nuvoton NUC140 ini adalah sebagai berikut:

1. Pemahaman tiap fungsi dalam library diperlukan untuk mempermudah pemrograman

(4)

  2. Penggunaan shield board seperti arduino

diperlukan untuk menghindari pengkabelan yang rumit

3. Arsitektur learning board perlu dipahami terlebih dahulu untuk mempermudah perancangan sistem

VI. Daftar Pustaka

Nuvoton Nu_LB-002 Rev 2.0, 2010, User’s Manual

NuMicro™ NUC130/NUC140, 2011, Technical Reference Manual

Putra, A.E. dan Antony, C.A, 2012, Petunjuk Praktikum Nuvoton NUC140 ARM Cortex M0, AAERG – ELINS, UGM

Datasheet Freescale Semiconductor Technical Data © Freescale Semiconductor, Inc., 2008. All rights reserved. MMA7361 ±1.5g, ±6g Three Axis Low-g Micromachined Accelerometer

Michelle Clifford and Leticia Gomez, 2005, Measuring Tilt with Low-g Accelerometers

(5)

  Lampiran 1. Listing Program Utama

#include "stdio.h"

#include "DrvADC.h"

#include "DrvSYS.h"

#include "DrvGPIO.h"

#include "DrvUART.h"

#include "LCD_Driver.h"

#define xmin 996

#define xmax 3014

#define ymin 1078

#define ymax 3106

#define zmin 745

#define zmax 2694

uint8_t read_buf[17];

uint8_t i;

uint8_t j;

int len;

int cont;

int pointer[15];

long ucByte1 = 0;

uint8_t gu8AdcIntFlag;

uint16_t u16ConversionData[3];

char temp[20];

void AdcIntCallback(uint32_t u32UserData) {

DrvGPIO_ClrBit(E_GPC,12);

u16ConversionData[0] = DrvADC_GetConversionData(6);

u16ConversionData[1] = DrvADC_GetConversionData(5);

u16ConversionData[2] = DrvADC_GetConversionData(4);

sprintf(temp,"%4d %4d %4d", u16ConversionData[0], u16ConversionData[1], u16ConversionData[2]);

clr_all_panel();

print_lcd(0, " NUC 140 ");

print_lcd(1, "Sensor MMA7361L");

print_lcd(2,"x= y= z=");

print_lcd(3, " ");

print_lcd(3, temp);

sprintf(temp,"x=%4d y=%4d z=%4d

\n",u16ConversionData[0],u16ConversionData[1],u16Conversio nData[2]);

DrvUART_Write (UART_PORT0,temp, sizeof(temp));

DrvGPIO_SetBit(E_GPC,12);

DrvSYS_Delay(1000000);

//tunda selama 1000ms }

int main(void) {

UNLOCKREG();DrvSYS_SetOscCtrl(E_SYS_XTL12M,1);

DrvSYS_Delay(5000);

DrvSYS_SelectHCLKSource(0);

DrvSYS_Open(48000000);

LOCKREG();

DrvSYS_SetClockDivider(E_SYS_HCLK_DIV,0);

Initial_panel(); //inisial LCD

clr_all_panel(); //hilangkan semua karakter di LCD DrvGPIO_Open(E_GPA,6,E_IO_INPUT);

DrvGPIO_Open(E_GPA,5,E_IO_INPUT);

DrvGPIO_Open(E_GPA,4,E_IO_INPUT);

DrvGPIO_Open(E_GPC,12,E_IO_OUTPUT);

DrvGPIO_Open(E_GPD,14,E_IO_OUTPUT);

//mengatur PortD.14 sebagai OUTPUT

DrvGPIO_ClrBit(E_GPD,14); //mengeluarkan logika LOW pada PortD.14 untuk menyalakan LED Backlight untuk LCD

STR_UART_T sParam;

DrvGPIO_InitFunction(E_FUNC_UART0);

sParam.u32BaudRate = 9600;

sParam.u8cDataBits = DRVUART_DATABITS_8;

sParam.u8cStopBits = DRVUART_STOPBITS_1;

sParam.u8cParity =

DRVUART_PARITY_NONE;

sParam.u8cRxTriggerLevel = DRVUART_FIFO_1BYTES;

if(DrvUART_Open(UART_PORT0,&sParam) !=

E_SUCCESS);

DrvADC_Open(ADC_SINGLE_END,

ADC_CONTINUOUS_OP, 0x70, EXTERNAL_12MHZ, 5);

//Single-End, Contiuous Cycle Scan, kanal 7, 12Mhz, pembagi 5 //clock ADC = 12MHz/(5+1) = 6MHz

DrvADC_StartConvert(); //konversi ADC dimulai

DrvADC_EnableADCInt(AdcIntCallback, 0);//aktifkan interrupt ADC, dan ADC_IRQHandler diarahkan ke AdcIntCallback

DrvSYS_Delay(500000);

while(1) {

} }

(6)

 

Lampiran 2. Bagian library terpakai dalam eksperimen DrvADC.c

void DrvADC_Open(E_ADC_INPUT_MODE InputMode, E_ADC_OPERATION_MODE OpMode, uint8_t

u8ChannelSelBitwise, E_ADC_CLK_SRC ClockSrc, uint8_t u8AdcDivisor)

{

/* reset ADC */

SYS->IPRSTC2.ADC_RST = 1;

SYS->IPRSTC2.ADC_RST = 0;

/* ADC clock source */

SYSCLK->CLKSEL1.ADC_S = ClockSrc;

/* Set ADC divisor */

SYSCLK->CLKDIV.ADC_N = u8AdcDivisor;

/* ADC engine clock enable */

SYSCLK->APBCLK.ADC_EN = 1;

/* ADC enable */

ADC->ADCR.ADEN = 1;

if( InputMode == ADC_SINGLE_END )

ADC->ADCR.DIFFEN = 0; /* single end input */

else

ADC->ADCR.DIFFEN = 1; /* differential input */

if( OpMode == ADC_SINGLE_OP )

ADC->ADCR.ADMD = 0; /* single mode */

else if( OpMode == ADC_SINGLE_CYCLE_OP )

ADC->ADCR.ADMD = 2; /* single-cycle scan mode */

else

ADC->ADCR.ADMD = 3; /* continuous scan mode */

ADC->ADCHER.CHEN = u8ChannelSelBitwise;

}

void DrvADC_EnableADCInt(DRVADC_ADC_CALLBACK Callback, uint32_t u32UserData)

{

g_ptADCCallBack = Callback;

g_pu32UserData[0] = u32UserData;

_DRVADC_CLEAR_ADC_INT_FLAG(); /* clear the A/D interrupt flag for safe */

ADC->ADCR.ADIE = 1;

NVIC_SetPriority(ADC_IRQn, (1<<__NVIC_PRIO_BITS) - 2);

NVIC_EnableIRQ(ADC_IRQn);

}

void DrvADC_StartConvert(void) {

/* clear the A/D conversion interrupt flag (ADF) */

/* "ADC->ADSR.ADF = 1;" is not recommended. It may clear CMPF0 and CMPF1 */

outpw(ADC_ADSR, (inpw(ADC_ADSR)&(~0x7))|0x1);

ADC->ADCR.ADST = 1;

}

int32_t DrvADC_GetConversionData(uint8_t u8ChannelNum)

{

if(ADC->ADCR.DIFFEN==0) /* Single-end input mode

*/

{

return ((int32_t)(ADC->ADDR[u8ChannelNum].RSLT &

0xFFF));

}

else /* Differential input mode */

{

if(ADC->ADCR.DMOF==0) /* unsigned format */

return (ADC->ADDR[u8ChannelNum].RSLT);

else /* 2's complement */

{

uint16_t u16AdcData = ADC-

>ADDR[u8ChannelNum].RSLT;

if( u16AdcData&0x8000 )

return (0xFFFF0000|u16AdcData);

else

return (int32_t)u16AdcData;

} } }

(7)

 

DrvUART.c

int32_t DrvUART_Open(E_UART_PORT u32Port, STR_UART_T *sParam)

{

UART_T * tUART;

if ((u32Port != UART_PORT0) &&

(u32Port != UART_PORT1) &&

(u32Port != UART_PORT2))

{

return

E_DRVUART_ERR_PORT_INVALID;

}

if ((sParam->u8cParity != DRVUART_PARITY_NONE) &&

(sParam->u8cParity != DRVUART_PARITY_EVEN) &&

(sParam->u8cParity != DRVUART_PARITY_ODD) &&

(sParam->u8cParity != DRVUART_PARITY_MARK) &&

(sParam->u8cParity != DRVUART_PARITY_SPACE)) {

return

E_DRVUART_ERR_PARITY_INVALID;

}

else if ((sParam->u8cDataBits != DRVUART_DATABITS_5)

&&

(sParam->u8cDataBits != DRVUART_DATABITS_6)

&&

(sParam->u8cDataBits != DRVUART_DATABITS_7)

&&

(sParam->u8cDataBits != DRVUART_DATABITS_8)) {

return

E_DRVUART_ERR_DATA_BITS_INVALID;

}

else if ((sParam->u8cStopBits != DRVUART_STOPBITS_1)

&&

(sParam->u8cStopBits != DRVUART_STOPBITS_2)

&&

(sParam->u8cStopBits != DRVUART_STOPBITS_1_5) )

{

return

E_DRVUART_ERR_STOP_BITS_INVALID;

}

else if ((sParam->u8cRxTriggerLevel !=

DRVUART_FIFO_1BYTES) &&

(sParam->u8cRxTriggerLevel !=

DRVUART_FIFO_4BYTES) &&

(sParam->u8cRxTriggerLevel !=

DRVUART_FIFO_8BYTES) &&

(sParam->u8cRxTriggerLevel !=

DRVUART_FIFO_14BYTES)&&

(sParam->u8cRxTriggerLevel !=

DRVUART_FIFO_30BYTES)&&

(sParam->u8cRxTriggerLevel !=

DRVUART_FIFO_46BYTES)&&

(sParam->u8cRxTriggerLevel !=

DRVUART_FIFO_62BYTES)) {

return

E_DRVUART_ERR_TRIGGERLEVEL_INVALID;

}

if(u32Port == UART_PORT0) {

/* Reset IP */

SYS->IPRSTC2.UART0_RST = 1;

SYS->IPRSTC2.UART0_RST = 0;

/* Enable UART clock */

SYSCLK->APBCLK.UART0_EN = 1;

}

else if(u32Port == UART_PORT1) {

/* Reset IP */

SYS->IPRSTC2.UART1_RST = 1;

SYS->IPRSTC2.UART1_RST = 0;

/* Enable UART clock */

SYSCLK->APBCLK.UART1_EN = 1;

} else {

/* Reset IP */

SYS->IPRSTC2.UART2_RST = 1;

SYS->IPRSTC2.UART2_RST = 0;

/* Enable UART clock */

SYSCLK->APBCLK.UART2_EN = 1;

}

tUART = (UART_T *)((uint32_t)UART0 + u32Port);

/* Tx FIFO Reset & Rx FIFO Reset & FIFO Mode Enable */

tUART->FCR.TFR =1;

tUART->FCR.RFR =1;

/* Set Rx Trigger Level */

tUART->FCR.RFITL = sParam-

>u8cRxTriggerLevel;

/* Set Parity & Data bits & Stop bits */

tUART->LCR.SPE =((sParam-

>u8cParity)&0x4)?1:0;

tUART->LCR.EPE =((sParam-

>u8cParity)&0x2)?1:0;

tUART->LCR.PBE =((sParam-

>u8cParity)&0x1)?1:0;

tUART->LCR.WLS =sParam->u8cDataBits;

tUART->LCR.NSB =sParam->u8cStopBits;

/* Set Time-Out */

tUART->TOR.TOIC =sParam->u8TimeOut;

/* Check Clock Source */

if(SYSCLK->PWRCON.XTL12M_EN) SYSCLK->CLKSEL1.UART_S = 0;

else {

if(SYSCLK->PLLCON.PD==0) SYSCLK->CLKSEL1.UART_S = 1;

else

if(SYSCLK->PWRCON.OSC22M_EN) SYSCLK->CLKSEL1.UART_S = 3;

else

return E_DRVUART_ERR_OPEN;

}

/* Set BaudRate */

BaudRateCalculator(GetUartClk(), sParam->u32BaudRate, u32Port);

return E_SUCCESS;

}

(8)

 

int32_t DrvUART_Write(E_UART_PORT u32Port,uint8_t *pu8TxBuf, uint32_t u32WriteBytes) {

uint32_t u32Count, u32delayno;

UART_T * tUART;

tUART = (UART_T *)((uint32_t)UART0 + u32Port);

for (u32Count=0; u32Count<u32WriteBytes; u32Count++) {

u32delayno = 0;

while (tUART->FSR.TE_FLAG !=1) /* Wait Tx empty and Time-out manner */

{

u32delayno++;

if ( u32delayno >= 0x40000000 ) return E_DRVUART_ERR_TIMEOUT;

}

tUART->DATA = pu8TxBuf[u32Count];

/* Send UART Data from buffer */

}

return E_SUCCESS;

}

(9)

 

Lampiran 3. Dokumentasi Eksperimen

Fig1. Rangkaian Eksperimen

Fig 2. Pengujian data serial melalui USB 2 TTL

Fig 3. Koneksi PIN perangkat ke modul NUC140

Fig 4. Sensor Accelerometer dan konektornya

Fig 5. Modul Bluetooth sebagai antarmuka ke Android

Fig 6. Tampilan LCD nilai sensor accelerometer

Fig 7. Screenshoot Arduino Centrale Free data logger

Gambar

Gambar 1. Blok Diagram NUC140
Gambar 3. Sensor Accelerometer MMA7361L
Fig 2. Pengujian data serial melalui USB 2 TTL

Referensi

Dokumen terkait

Jurnal yang kedua ditulis oleh Sutanto (2010) memberikan informasi bahwa SIMPUS adalah program sistem informasi kesehatan daerah yang memberikan informasi tentang

Pada indikator merumuskan masalah sebelum diterapkan model pembelajaran inkuiri terbimbing, siswa mendapatkan nilai pretest pada kategori tidak terampil, kurang terampil,

tempat kerja yang aman, bersih dan sehat Sebagian besar Rumah Sakit kurang menggalang kemitraan untuk meningkatkan upaya pelayanan yang bersifat Preventif dan Promotif Isu

Kemiringan talud (1:m) ditentukan berdasarkan hasil perhitungan debit rencana dengan periode ulang 25 tahun. Kemiringan talud berdasarkan debit rencana sebesar 29,13 m 3

Sementara industri rokok menikmati margin yang besar, masyarakat miskin perokok dan keluarganya justru menanggung beban penderitaan akibat konsumsi tembakau yang menyebabkan

Dengan diberikannya hak tanggungan dihadapan seorang PPAT oleh para pihak-pihak yang memperjanjikannya, hanya baru dalam taraf memenuhi syarat- syarat spesialitas, yaitu

Berdasarkan hasil dan pembahasan penelitian ini memeroleh hasil penelitian yang menjelaskan tentang penerapan kaidah fi qih dalam transaksi jual beli sukuk di PT Bank

Abstrak : Tujuan penelitian ini adalah memahami pengaruh efek dari permainan kartu dan kecerdasan linguistik terhadap keterampilan membaca permulaan. Permainan yang