Tuesday 25 August 2015

Cara guna ADC modul di dalam PIC8F4550

Post ini akan membincangkan ciri - ciri ADC modul yang terdapat di dalam PIC8F4550 serta menerangkan langkah - langkah untuk menggunakannya.

1) Teori ADC Modul di dalam PIC18F4550

Sila rujuk Rajah 1 dibawah bagi memudahkan pemahaman terhadap ADC modul.

Rajah 1: Gambarajah blok ADC

Daripada rajah 1, boleh diperhatikan terdapat beberapa parameter yang perlu diberi perhatian, antaranya ialah:
  • Voltage Input yang datang daripada Analog Channel (AN0 - AN12).
  • Reference Voltage iaitu Vref(+) dan Vref(-)
  • Resolution 10bit (0 - 1023)
Ketiga-tiga parameter ini boleh dihubungkan melalui graf dibawah:

Rajah 2: Graf Digital vs Analog

Rajah 2 diatas menunjukkan hubung kait diantara digital dan analog adalah linear. Maka ia boleh diterjemahkan dalam persamaan matematik seperti berikut:

------------------------------- (1)

Justeru, kita boleh mengira hasil ADC (Dout) jika diberi Voltage input (Vin) dengan menggunakan persamaan (1) diatas.

Note: 3V <=Vref <= 5V


Dengan menggunakan PIC18F4550, keluaran daripada ADC modul (Dout) ini akan disimpan di dalam SATU(1) register, iaitu ADRES.

Selain daripada itu, terdapat parameter lain yang mempengaruhi hasil ADC, antaranya ialah:
  • A/D conversion time per bit, Tad. 
Bagi mendapat hasil conversion 10-bit yang lengkap, masa yang diperlukan adalah 12Tad.

Note: Nilai Tad mesti melebihi 1.6us


Nilai Tad boleh dikira berdasarkan pilihan ADCS seperti dibawah:


Berikut adalah contoh kiraan bagi menentukan ADCS yang paling sesuai:

Diberi nilai Fosc = 48MHz

Maka,

Case 1: Fosc/2
48MHz / 2 = 24MHz
Tad = 1/24MHz = 0.0041 us. Pilihan ini tidak sah, kerana kurang dari 1.6us

Case 2: Fosc/4
48MHz / 4 = 12MHz
Tad = 1/12MHz = 0.0083 us. Pilihan ini tidak sah, kerana kurang dari 1.6us

Case 3: Fosc/8
48MHz / 8 = 6MHz
Tad = 1/6MHz = 0.1667 us. Pilihan ini tidak sah, kerana kurang dari 1.6 us

Case 4: Fosc/16
48MHz /16 = 3MHz
Tad = 1/3MHz = 0.333 us. Pilihan ini tidak sah, kerana kurang dari 1.6 us

Case 5: Fosc / 32
48MHz / 32 = 1.5MHz
Tad = 1/1.5MHz = 0.666us. Pilihan ini tidak sah, kerana kurang dari 1.6us

Case 6: Fosc/ 64
48MHz / 64 = 0.75MHz
Tad = 1/0.75MHz = 1.333us. Pilihan ini diterima walaupun kurang dari 1.6us sebab tiada pilihan lain.

Justeru,  convertion time = 12 x 1.333us = 16.996 us


Daripada contoh ini dapati bahawa dengan menggunakan Fosc = 48MHz, tiada ADCS yang sesuai kerana kesemuanya adalah kurang dari 1.6us. Tetapi ADCS yang paling hampir iaitu Fosc/64 boleh digunakan. Walaupun hasil conversion tidak lengkap 100% tetapi masalah ini boleh diatasi dengan membuat purata hasil conversion.

2) Menulis aturcara C18 

Langkah seterusnya adalah menulis aturcara menggunakan C18 untuk manipulasi kandungan register:
  • ADCON0
  • ADCON1
  • ADCON2

Bagi memudahkan, penerangkan seterusnya akan berdasarkan kepada contoh dibawah.

1. Contoh simple ADC program. 


Rajah 3
Penyata Masalah:

Tulis aturcara C18 supaya Pin RA0 pada PIC18F4550 boleh digunakan untuk melakukan proses ADC secara berterusan. Dimana configurasi ADC yang diperlukan adalah seperti berikut:

i) Vref(+) = Vdd (5V)
ii) Vref (-) = Vss (0V)
iii) Resolution = 10 bit
iv) A/D Acquisition Time = 12Tad
v) A/D Conversion Clock = Fosc/64

Penyelesaian:
Rajah 4: aturcara bagi contoh 1.

Untuk mendapat aturcara penuh, Klik Disini

2. Aturcara yang ditunjukkan dalam Rajah 4 boleh di naik taraf supaya lebih flexible. Dimana ia boleh guna untuk mana-mana channel (AN0-AN12).

Untuk mendapat aturcara yang telah di naik taraf, Klik Disini


Penutup:

Diharapkan post yang ringkas ini akan memberi manfaat kepada pembaca. Jika terdapat masalah atau kekeliruan, sila komen di ruang yang disediakan.

Sekian