Blue Spinning Frozen Snowflake Vidi Fitriansyah Hidarlan's Blog: September 2019
WELCOME TO MY BLOG :: Share Tips & Trik Tutorial Gadget dan Tugas Kuliah :: "Indahnya Berbagi"

Sabtu, 28 September 2019

Simulasi Sensor Kecepatan menggunakan Dua Buah Sensor Ultrasonik dengan Tampilan LCD Karakter 16x2

        Assalamu'alaikum Wr. Wb. Di postingan kali ini saya akan memberikan tutorial membuat rangkaian simulasi sensor kecepatan menggunakan dua buah sensor ultrasonik dengan kontroler ATmega 16. Pada simulasi ini sensor ultrasonik pertama (sensor jarak 1) digunakan untuk mendeteksi objek/benda yang melewatinya. Sedangkan sensor ultrasonik kedua (sensor jarak 2) yang diletakan sejauh 1 m dengan sensor jarak 1 dari arah datangnya objek yang melewati sensor jarak 1 menuju sensor jarak 2 dengan arah yang sejajar secara horizontal terhadap kedua sensor tersebut. Sehingga jika sensor jarak 2 sudah mendeteksi adanya objek setelah melewati sensor jarak 1, maka dapat diketahui nilai kecepatannya berdasarkan rumus v = s/t (kecepatan (v), jarak (s), waktu (t)).
        Untuk jarak antara kedua sensornya sebenarnya dapat diatur sesuai kebutuhan namun pada tutorial ini jaraknya sebesar 1 m. Semakin dekat jarak antar kedua sensornya maka kecepatan yang dideteksi semakin cepat, namun untuk kecepatan rata-rata jarak antara kedua sensornya semakin jauh semakin akurat hasilnya.
        Pada simulasi sensor kecepatan ini juga dapat diatur jarak pendeteksian objeknya. Hal tersebut untuk mencegah terdeteksinya suatu objek yang lebih jauh dari jarak objek yang ingin dihitung kecepatannya saat melewati kedua sensor jarak tersebut.
        Dalam tutorial Simulasi Sensor Kecepatan menggunakan Dua Buah Sensor Ultrasonik dengan Tampilan LCD Karakter 16x2 ini menggunakan CV AVR untuk membuat programnya dalam bahasa C dan menggunakan ISIS Proteus untuk perancangan desain rangkaian dan simulasinya. Berikut langkah-langkah pembuatannya.
  1. Buka software CV AVR-nya kemudian klik New file → Project maka akan muncul tampilan pop up window CodeWizard AVR. Atur jenis mikrokontroler dan clock speed-nya di tab "Chip".
  2. Klik tab "Timers" kemudian atur pada Timer0 seperti pada gambar di bawah.
  3. Klik tab menu "Alphanumeric LCD" dan konfigurasikan seperti pada tampilan ini.
  4. Buka tab menu "ADC" untuk mengaktifkan ADC. pengaktifan ADC ini hanya digunakan untuk mengatur jarak maksimal antar sensor jarak 1 dan sensor jarak 2 dengan objek yang di deteksi dan simulasi pendeteksian jarak pada masing-masing kedua sensor jarak tersebut.
  5. Setelah itu klik menu File → Generate Save and Exit, kemudian simpan nama ketiga filenya (disarankan sama semua agar tidak bingung), maka akan tampil seperti ini.
  6. Selanjutnya lengkapi sourcecode programnya seperti berikut.
    1. /*****************************************************
    2. This program was produced by the
    3. CodeWizardAVR V2.05.3 Standard
    4. Automatic Program Generator
    5. © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    6. http://www.hpinfotech.com

    7. Project : Sensor Kecepatan Berbasis Ultrasonik
    8. Version : 1.3
    9. Date    : 19/12/2018
    10. Author  : Vidi Fitriansyah Hidarlan
    11. Company : Personal
    12. Comments: 


    13. Chip type               : ATmega16
    14. Program type            : Application
    15. AVR Core Clock frequency: 8,000000 MHz
    16. Memory model            : Small
    17. External RAM size       : 0
    18. Data Stack size         : 256
    19. *****************************************************/

    20. #include <mega16.h>
    21. #include <stdio.h>
    22. #include <stdlib.h>
    23. #include <delay.h>

    24. // Alphanumeric LCD functions
    25. #include <alcd.h>
    26.     long timer,count,hitung,detik,menit,indeks,waktu,objek_maks,baca_adc,sensor1,sensor2;
    27.     float jarak,kecepatan_mps,kecepatan_kph;
    28.     char data1[16];
    29.     char data2[16];
    30.     char data3[16];
    31.     char data4[16];
    32.     char data5[16];
    33.     char data6[16];
    34.     char data7[16];
    35. // Timer 0 overflow interrupt service routine
    36. interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    37. {
    38. // Reinitialize Timer 0 value
    39. TCNT0=0xB2;
    40. // Place your code here
    41.  timer++;
    42. }

    43. #define ADC_VREF_TYPE 0x00

    44. // Read the AD conversion result
    45. unsigned int read_adc(unsigned char adc_input)
    46. {
    47. ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    48. // Delay needed for the stabilization of the ADC input voltage
    49. delay_us(10);
    50. // Start the AD conversion
    51. ADCSRA|=0x40;
    52. // Wait for the AD conversion to complete
    53. while ((ADCSRA & 0x10)==0);
    54. ADCSRA|=0x10;
    55. return ADCW;
    56. }

    57. // Declare your global variables here
    58. void hitung_waktu()
    59. {
    60. if (timer>99)
    61.     { 
    62.         lcd_clear();
    63.         detik++;
    64.         timer=0;
    65.     }
    66. else if (detik>59)
    67.     {
    68.         menit++;
    69.         detik=0;
    70.     }
    71. }   
    72. void deteksi_sensor()
    73. {
    74.     if ((PINC.6==0)&&(PINC.7==1)&&(indeks==0))
    75.     {
    76.         TIMSK=0x00;
    77.         indeks=3;
    78.         lcd_clear();   
    79.     }
    80.     else if ((PINC.7==0)&&(indeks==3))
    81.     {
    82.         indeks=0;
    83.         TIMSK=0x00;
    84.         timer=0;
    85.         detik=0;
    86.         menit=0;
    87.         baca_adc=read_adc(7);
    88.         objek_maks=baca_adc*3/10;   
    89.     }
    90.     else if (PINC.5==0 && indeks==2)//reset timer
    91.     {   
    92.         indeks=0;//semua data direset
    93.         timer=0;
    94.         detik=0;
    95.         menit=0;   
    96.         lcd_clear();
    97.     }
    98.     else if ((sensor1>objek_maks)&& (sensor2>objek_maks)&&(indeks==0))
    99.     {
    100.         TIMSK=0x00;
    101.         timer=0;
    102.         detik=0;
    103.         menit=0;
    104.         baca_adc=read_adc(7);
    105.         objek_maks=baca_adc*3/10;
    106.     }
    107.     else if ((sensor1<2)&& (sensor2<2)&&(indeks==0))
    108.     {
    109.         TIMSK=0x00;
    110.         timer=0;
    111.         detik=0;
    112.         menit=0;
    113.         baca_adc=read_adc(7);
    114.         objek_maks=baca_adc*3/10;
    115.     }    
    116.     else if (sensor1>=2&&sensor1<=objek_maks&&(indeks==0 || indeks==2))
    117.     {
    118.         indeks=1;
    119.         TIMSK=0x01;//memulai timer
    120.         lcd_clear();
    121.     }
    122.     else if (sensor2>=2&&sensor2<=objek_maks && indeks==1)
    123.     {
    124.         indeks=2;
    125.         TIMSK=0x00;//menstop timer
    126.         lcd_clear();
    127.     }
    128.     else
    129.     {
    130.         PINC.2=PINC.1=PINC.4=1;
    131.     }
    132. }
    133. void ultrasonik1()
    134. {
    135.     hitung = 0;
    136.     PORTC.0 = 1;
    137.     delay_us(10);
    138.     PORTC.0 = 0;
    139.     delay_us(1);
    140.     while (PINC.1 == 0)
    141.     {}
    142.     while (PINC.1 == 1)
    143.     {
    144.         hitung++;     
    145.     }
    146.     sensor1 = hitung*0.0825/2;
    147. }
    148. void ultrasonik2()
    149. {
    150.     hitung = 0;
    151.     PORTC.2 = 1;
    152.     delay_us(10);
    153.     PORTC.2 = 0;
    154.     delay_us(1);
    155.     while (PINC.3 == 0)
    156.     {}
    157.     while (PINC.3 == 1)
    158.     {
    159.         hitung++;     
    160.     }
    161.     sensor2 = hitung*0.0825/2;
    162. }
    163. void kecepatan()
    164. {
    165.     if (TIMSK==0x00)
    166.     {
    167.         jarak=1;
    168.         count=menit*6000+detik*100+timer;
    169.         waktu=count*10;
    170.         kecepatan_mps=jarak*1000/waktu;
    171.         kecepatan_kph=kecepatan_mps*3.6;
    172.   }  
    173. }
    174. void indikator()
    175. {
    176.     if (TIMSK==0x01)
    177.     {
    178.         PORTC.4=1;
    179.         PORTD.7=1;
    180.     }
    181.     else
    182.     {
    183.         PORTC.4=0;
    184.         PORTD.7=0;
    185.     }
    186. }
    187. void tampil_lcd()
    188. {
    189.     if (indeks==0)
    190.     {
    191.         lcd_clear();
    192.         lcd_gotoxy(0,0);
    193.         lcd_putsf("Sensor Kecepatan");//tampilkan waktu di LCD baris pertama
    194.         lcd_gotoxy(0,1);
    195.         lcd_putsf("Objek Maks:   cm");
    196.         ftoa(objek_maks,0,data5);
    197.         lcd_gotoxy(11,1);
    198.         lcd_puts(data5);
    199.         delay_ms(10);
    200.     }           
    201.     else if (indeks==1)
    202.     {
    203.         lcd_gotoxy(0,0);
    204.         sprintf(data1,"Waktu: %d:%d:%d",menit,detik,timer);
    205.         lcd_puts(data1);//tampilkan waktu di LCD baris pertama 
    206.         lcd_gotoxy(0,1); //meletakkan kursor pada x=0 dan y=1
    207.         lcd_putsf("Menghitung...");
    208.     }    
    209.     else if (indeks==2)
    210.     {
    211.         lcd_gotoxy(0,0);
    212.         lcd_putsf("Waktu:        ms");
    213.         ftoa(waktu,0,data4);
    214.         lcd_gotoxy(8,0);
    215.         lcd_puts(data4);
    216.         lcd_gotoxy(0,1);
    217.         lcd_putsf("Kec:    m =    k");
    218.         ftoa(kecepatan_mps,2,data2);//float to array, mengubah tipedata float k tipe data array yg kan ditampilkan di LCD
    219.         lcd_gotoxy(4,1);  
    220.         lcd_puts(data2);
    221.         ftoa(kecepatan_kph,1,data3);//float to array, mengubah tipedata float k tipe data array yg kan ditampilkan di LCD
    222.         lcd_gotoxy(11,1);  
    223.         lcd_puts(data3);
    224.     }
    225.     else if (indeks==3)
    226.     {
    227.         lcd_gotoxy(0,0);
    228.         lcd_putsf("Sensor1:     cm");
    229.         ftoa(sensor1,0,data6);
    230.         lcd_gotoxy(9,0);
    231.         lcd_puts(data6);
    232.         lcd_gotoxy(0,1);
    233.         lcd_putsf("Sensor2:     cm");
    234.         ftoa(sensor2,0,data7);
    235.         lcd_gotoxy(9,1);
    236.         lcd_puts(data7);
    237.         delay_ms(10);
    238.     }  
    239. }
    240. void main(void)
    241. {
    242. // Declare your local variables here

    243. // Input/Output Ports initialization
    244. // Port A initialization
    245. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    246. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    247. PORTA=0x00;
    248. DDRA=0x00;

    249. // Port B initialization
    250. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    251. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    252. PORTB=0x00;
    253. DDRB=0x00;

    254. // Port C initialization
    255. // Func7=In Func6=In Func5=In Func4=Out Func3=In Func2=Out Func1=In Func0=Out 
    256. // State7=P State6=P State5=P State4=0 State3=P State2=0 State1=P State0=0 
    257. PORTC=0xEA;
    258. DDRC=0x15;

    259. // Port D initialization
    260. // Func7=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    261. // State7=0 State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    262. PORTD=0x00;
    263. DDRD=0x80;

    264. // Timer/Counter 0 initialization
    265. // Clock source: System Clock
    266. // Clock value: 7,813 kHz
    267. // Mode: Normal top=0xFF
    268. // OC0 output: Disconnected
    269. TCCR0=0x05;
    270. TCNT0=0xB2;
    271. OCR0=0x00;

    272. // Timer/Counter 1 initialization
    273. // Clock source: System Clock
    274. // Clock value: Timer1 Stopped
    275. // Mode: Normal top=0xFFFF
    276. // OC1A output: Discon.
    277. // OC1B output: Discon.
    278. // Noise Canceler: Off
    279. // Input Capture on Falling Edge
    280. // Timer1 Overflow Interrupt: Off
    281. // Input Capture Interrupt: Off
    282. // Compare A Match Interrupt: Off
    283. // Compare B Match Interrupt: Off
    284. TCCR1A=0x00;
    285. TCCR1B=0x00;
    286. TCNT1H=0x00;
    287. TCNT1L=0x00;
    288. ICR1H=0x00;
    289. ICR1L=0x00;
    290. OCR1AH=0x00;
    291. OCR1AL=0x00;
    292. OCR1BH=0x00;
    293. OCR1BL=0x00;

    294. // Timer/Counter 2 initialization
    295. // Clock source: System Clock
    296. // Clock value: Timer2 Stopped
    297. // Mode: Normal top=0xFF
    298. // OC2 output: Disconnected
    299. ASSR=0x00;
    300. TCCR2=0x00;
    301. TCNT2=0x00;
    302. OCR2=0x00;

    303. // External Interrupt(s) initialization
    304. // INT0: Off
    305. // INT1: Off
    306. // INT2: Off
    307. MCUCR=0x00;
    308. MCUCSR=0x00;

    309. // Timer(s)/Counter(s) Interrupt(s) initialization
    310. TIMSK=0x01;

    311. // USART initialization
    312. // USART disabled
    313. UCSRB=0x00;

    314. // Analog Comparator initialization
    315. // Analog Comparator: Off
    316. // Analog Comparator Input Capture by Timer/Counter 1: Off
    317. ACSR=0x80;
    318. SFIOR=0x00;

    319. // ADC initialization
    320. // ADC Clock frequency: 1000,000 kHz
    321. // ADC Voltage Reference: AREF pin
    322. // ADC Auto Trigger Source: ADC Stopped
    323. ADMUX=ADC_VREF_TYPE & 0xff;
    324. ADCSRA=0x83;

    325. // SPI initialization
    326. // SPI disabled
    327. SPCR=0x00;

    328. // TWI initialization
    329. // TWI disabled
    330. TWCR=0x00;

    331. // Alphanumeric LCD initialization
    332. // Connections are specified in the
    333. // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    334. // RS - PORTD Bit 0
    335. // RD - PORTD Bit 1
    336. // EN - PORTD Bit 2
    337. // D4 - PORTD Bit 3
    338. // D5 - PORTD Bit 4
    339. // D6 - PORTD Bit 5
    340. // D7 - PORTD Bit 6
    341. // Characters/line: 16
    342. lcd_init(16);

    343. // Global enable interrupts
    344. #asm("sei")

    345. while (1)
    346.       {
    347.       // Place your code here
    348.         ultrasonik1();
    349.         ultrasonik2();
    350.         deteksi_sensor();
    351.         hitung_waktu();
    352.         kecepatan();
    353.         indikator();
    354.         tampil_lcd();
    355.       }
    356. }
  7. Untuk rumus timer-nya dapat dihitung dengan menggunakan cara di bawah ini. Pada program ini timer0 diatur counter-nya tiap 0,01 detik atau 100 milidetik, sehingga untuk menghasilkan waktu 1 detik timer diulang-ulang selama 100 kali. Selain itu juga Bit maksimal yang digunakan pada timer0 sebesar 256.
  8. Selanjutnya buat desain rangkaiannya pada Proteus, jika Anda belum memasang atau belum ada library dari sensor ultrasoniknya, maka ikuti langkah 9 sampai dengan 11. Jika Anda sudah pernah atau sudah ada library sensor ultrasoniknya maka lewati saja langkah 9-11.
  9. Unduh terlebih dahulu file library sensor ultrasoniknya di sini kemudian ekstak file-nya.
  10. Buka folder hasil ekstraknya, salin kedua file yang berformat *.IDX dan *.C.
  11. Kemudian tempelkan di direktori berkas default "C:\Program Files (x86)\Labcenter Electronics\Proteus 7 Professional\LIBRARY" jika Windows Anda 64 bit atau "C:\Program Files\Labcenter Electronics\Proteus 7 Professional\LIBRARY" jika Windows Anda 32 bit.
  12. Sesudah itu buka ISIS Proteus-nya kemudian klik "Pick from Libraries".
  13. Pada jendela pop up "Pick Devices" ketik "ultrasonic" pada pencarian kata kunci, jika sudah ditemukan Device "ULTRASONIC SENSOR" maka sudah berhasil terpasang library-nya.
  14. Buat desain rangkaiannya seperti gambar berikut.
  15. Berikut penjelasan fungsi dari masing-masing potensio dan tombol yang digunakan.
  16. Untuk simulasi pendeteksian objek/benda cukup mengatur potensionya sesuai dengan jarak maksimum yang diatur dan dideteksi oleh kedua sensor ultrasonik tersebut.
  17. Untuk memasuki objek yang melewati sensor jarak 2, maka ikuti langkah pada gambar ini.
  18. Untuk menghitung kecepatan objek selanjutnya tekan tombol reset dan kembalikan potensionya kembali pada nilai di atas deteksi sensor jarak yang ditentukan.
  19. Selanjutnya klik ganda pada komponen ATmega16 kemudian atur seperti berikut.
  20. Selain itu juga masukan program "UltrasonicTEP.hex"-nya dari yang satu folder hasil ekstrakan yang sudah di-download tadi dengan cara double click pada masing-masing sensor jaraknya.
  21. Selanjutnya pilih file "UltrasonicTEP.hex"-nya, kemudian klik "Open".
  22. Selesai dehh !!
Hasil Simulasinya dapat dilihat pada video di bawah ini.

Selamat mencoba, dan semoga bermanfaat.

    Rabu, 25 September 2019

    Mengatasi Windows 10 Cortana Search Box Tidak Berfungsi

            Assalamu'alaikum Wr. Wb. Pada kesempatan kali ini saya akan membagikan cara untuk mengatasi masalah Cortana Search Box di Windows 10 yang error atau tidak berfungsi (tidak bisa menampilkan hasil pencarian aplikasi ataupun web). Mungkin Anda pernah mengalaminya dan mulai kinap saat tidak bisa mencari aplikasi yang terpasang di Windows 10 Anda karena sebelumnya belum pernah ada kejadian error seperti ini.
    Tampilan Cortana Search Box Windows 10 yang error

            Okee langsung saja ke permasalahan yang akan kita selesaikan, ada beberapa cara yang dapat dilakukan untuk mengatasi error pada Cortana Search Box di Windows 10. Namun di sini hanya akan membahas dua cara saja.
    • Cara 1 : Mematikan Cortana pada proses latar belakang
    1. Buka "Task Manager" dengan cara seperti pada screenshot di bawah.
    2. Klik Tab "Processes" kemudian pada menu "Background processes" scroll ke bawah cari nama Cortana. Selanjutnya klik "End Process" di pojok kanan bawah.
    3. Setelah itu Cortana Search Box akan hilang sesaat dan me-restart kembali. Biasanya Cortana Search Box sudah langsung bisa digunakan kembali. Jika tidak maka gunakan cara 2.
    • Cara 2 : Mendaftarkan Ulang Cortana dengan Windows Powershell.
    1. Buka Task Manager, caranya sama seperti cara 1 pada langkah 1.
    2. Setelah terbuka jendela Task Manager, klik menu File pada kemudian pilih Run new task.
    3. Pada jendela pop up "Create new task", ketik "powershell" pada kotak "Open:", centang Create this task with Admin, kemudian klik "OK" atau tekan Enter.
    4. Masukkan perintah yang diberi huruf tebal ini pada jendela Windows Powershell "Get-AppXPackage -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}".
    5. Restart PC/Laptop Anda untuk memastikan apakah sudah berfungsi kembali.
    6. Selesai.
    Terima kasih telah berkunjung ke blog saya. Semoga bermanfaat.

    Selasa, 24 September 2019

    Cara Flashing Xiaomi Redmi 4 Prime (markw) dengan MiFlash

            Assalamu'alaikum Wr. Wb. pada postingan kali ini saya akan membagikan tutorial cara flashing ponsel Xiaomi Redmi 4 Prime menggunakan MiFlash 2017. Tutorial ini saya buat karena banyak sekali ROM distributor atau sering kita kenal sebagai "ROM abal-abal" yang sudah terpasang di HP Redmi 4 Prime ini sejak pertama kali dibeli. ROM distributor ini sering kali banyak "bugs" yang kerap muncul setelah beberapa lama pemakaian seperti seringnya restart dan mati sendiri padahal baterai masih banyak, pengaturan aplikasi yang kadang berubah sendiri, bahkan bisa sampai bootloop walaupun HP tersebut tidak dioprek/di-root/UBL/pasang TWRP dan cusrom. Ciri-ciri firmware distributor dari HP Xiaomi ditandai dengan adanya 4 titik pada angka di versi MIUInya sedangkan pada versi global stable-nya hanya terdapat 3 titik.
    ROM distributor ditandai adanya 4 titik pada nomor versi MIUI
            Sebelum menuju langkah-langkah flashing pada ponsel Redmi 4 Prime ini ada beberapa syarat yang akan saya sampaikan :
    • Disarankan Hp yang dalam keadaan error, bootloop, brick, atau posisi ROM distributor. Kalo Hp masih normal-normal aja tidak perlu diflash.
    • Disarankan berpengalaman dalam flashing Hp jenis lainnya, karena langkah-langkahnya hampir sama.
    • Jika Hp masih baru beli dan masih garansi dan mengalami error seperti bootloop, dibawa saja dulu  ke service center-nya.
    • Tidak lupa akun MI, kalo lupa bawa saja ke service center Xiaomi terdekat dengan membawa dusbok dan nota pembeliannya.
    • Baterai Hp Redmi 4 Prime yang ingin diflash disarankan di atas 30%.
    • Disarankan juga untuk masuk ke grup facebook Redmi 4 Prime untuk membaca referensi tentang Redmi 4 Prime.
    • Disarankan flashing menggunakan Windows versi 64 bit.
    • DWYOR.
            Jika syarat-syarat di atas sudah terpenuhi selanjutnya ke langkah-langkah flashing Redmi 4 Prime.
    1. Siapkan PC/Laptop, jika menggunakan PC disarankan terdapat UPS yang baik agar ketika pemadaman listrik saat proses flashing masih bisa digunakan selama beberapa menit hingga proses flashing selesai. Jika menggunakan Laptop disarankan baterai terisi penuh.
    2. Download driver ADB-nya terlebih dahulu di sini.
    3. Download driver Qualcomm-nya di sini.
    4. Download XiaoMiFlash-nya di sini.
    5. Download Firmware Redmi 4 Prime (MIUI 8.2) di sini.
    6. Sebelum memasang semua bahannya pastikan Anda sudah mengaktifkan Test Mode pada windows Anda dan melakukan Disable Driver Signature Enforcement agar instalasi driver dan semua proses flashing-nya berjalan dengan baik. Untuk mengaktifkan Test Mode dapat mengunjungi postingan ini dan untuk Disable Driver Signature Enforcement dapat mengunjungi postingan di link ini.
    7. Setelah didownload kemudian install semua bahannya.
    8. Setelah di-install semuanya, matikan Smartphone Redmi 4 Prime Anda, kemudian hubungkan ke port USB PC/Laptop kalian dengan menggunakan kabel data maka windows akan memasang drivernya secara otomatis. Tunggu instalasi drivernya sampai selesai.
    9. Untuk mengecek apakah drivernya sudah terpasang dengan benar maka buka Device Manager dengan klik kanan pada ikon My Computer/This-PC kemudian pilih "Manage".
    10. Atau dengan cara buka "Windows Explorer", kemudian klik kanan pada "This PC" dilanjutkan dengan memilih "Manage" seperti pada langkah 8.
    11. Setelah terbuka jendela "Computer Management", klik "Device Manager".
    12. Kemudian klik "View" → "Show Hidden Devices".
    13. Setelah itu pilih dan buka "Android Phone", jika tidak ada atau ada tetapi terdapat tanda pentung maka driver belum terpasang dengan benar. Jika sudah ada maka akan seperti pada gambar di bawah. Gambar di bawah mungkin sedikit berbeda dengan tampilan pada PC Anda, dikarenakan pada Laptop saya sudah pernah dihubungkan ke berbagai jenis HP.
    14. Jika tampilannya seperti di bawah ini, maka driver ADB Anda belum terpasang.
    15. Jika driver belum terpasang, maka harus dilakukan pemasangan secara manual dengan menggunakan bahannya di sini. Kemudian klik kanan pada nama PC Anda dan pilih "Add Legacy Hardware". Jika sudah terpasang maka skip saja ke langkah 23, kalo belom terpasang ya mana mungkin 2 ribu per giga hangati tubuhku dalam kedinginan, ehh maksudnya mana mungkin bisa lanjut ke langkah berikutnya hehe.. .
    16. Selanjutnya klik "Next" pada jendela pop up "Add Hardware".
    17. Sesudah itu pilih yang bawah dan klik Next seperti pada screenshot di bawah.
    18. Setealh itu pilih Android Phone atau "Show All Devices" jika tidak ada dan klik Next.
    19. Selanjutnya klik "Have Disk..." seperti yang ditunjukkan pada gambar.
    20. Pada jendela "Install From Disk" pilih "Browse" untuk memilih file lokasi driver yang sudah Anda download (driver manual installer pada langkah 15 yang sudah diekstrak).
    21. Pada jendela "Locate file" pilih letak file driver tadi kemudian pilih file berformat (.inf).
    22. Setelah itu pilih "Manufacture" dan "Model"nya kemudian klik "Next".
    23. Sesudah driver-nya terpasang dan berfungsi dengan baik dapat melanjutkan ke langkah berikut. Ekstrak file firmware yang sudah di-download sebelumnya.
    24. Setelah diekstrak buka folder firmware-nya.
    25. Anda akan menemukan file yang tidak berformat, kemudian klik kanan pada file tersebut dan pilih "Open with" pada menu pop up.
    26. Setelah muncul pop up Windows hilangkan centang → pilih "WinRAR Archiver" klik "OK".
    27. Ketika sudah terbuka WinRAR-nya maka klik "Extraxt To".
    28. Kemudian pilih tempat file yang akan diekstrak sesuai keinginan.
    29. Selanjutnya tekan dan tahan tombol power + vol up pada HP Redmi 4 Prime Anda sampai muncul ke menu recovery (berbahasa China), kemudian tap fastboot. Atau bisa juga langsung masuk ke mode fastboot ketika Hp anda sudah dimatikan dengan menekan tombol power+vol-.
    30. Buka aplikasi XiaoMiFlash 2017 yang sudah di-install sebelumnya.
    31. Setelah terbuka aplikasinya, klik Browse untuk memilih lokasi folder firmware-nya.
    32. Pada jendela pop up "Browse For Folder" cari lokasi dan pilih folder firmware yang sudah diesktrak sebelumnya kemudian klik "OK".
    33. Kemudian pilih "clean all" untuk memformat semua data, setelahnya klik "Refresh" untuk mendeteksi port yang sudah ditancapkan ke HP Redmi 4 Prime Anda. Jika ada notifikasi "Installing Driver" maka tunggu saja sampai selesai kemudian klik "Refresh" kembali. Jika sudah muncul "id device"nya lanjutkan dengan klik "Flash".
    34. Tampilan proses flashing-nya seperti berikut, tunggu hingga selesai sekitar 5-10 menit.
    35. Jika proses flashing-nya susah selesai maka akan tampil "result" success berwarna hijau. Jika gagal (berwarna merah) maka lakukan dari awal, hal itu biasanya disebabkan kabel data yang kendor atau tidak cocok (disarankan pakai kabel data yang ori).
    36. Setelah itu HP Redmi 4 Prime akan booting dengan sendirinya, dan tunggu hingga ke menu bahasa. Pada awal booting setelah diflash memang cukup lama sekitar 10 menit.
    37. Selesai, Smartphone Redmi 4 Prime Anda Ashiaappp digunakan.
    Notes :
    • Untuk cara flashing tipe Hp Xiaomi lainnya sama dengan cara di atas, yang membedakan hanya file firmware-nya saja yang tiap tipe Hp tidaklah sama.
    • Kumpulan firmware Xiaomi lainnya bisa dicari di http://en.miui.com/a-234.html.
    Terima kasih sudah berkunjung ;)
    Atas