Selasa, 01 Maret 2016

Mengenal Fasilitas Analog Comparator pada Microcontroller ATMega328

          UC ATMega328 diperlengkapi dengan Pembanding Analog (Analog Comparator). Pin AIN0 (PORTD6) berfungsi sebagai masukan tak membalik (non inverting input) dan pin AIN1 (PORTD7) berfungsi sebagai masukan membalik (inverting input). Selain PORTD7, pin ADC (ADC0 s/d ADC5) dapat difungsikan sebagai masukan membalik. Jika tegangan yang diterapkan pada pin AIN0 lebih besar dari tegangan pada pin AIN1 (masukan membalik) maka ACO (Analog Comparator Output) akan menjadi set (berlogika satu).
Memfungsikan ADC sebagai masukan membalik (inverting input) analog comparator maka ADC harus dinonaktifkan (switch off). Menonaktifkan ADC dengan menset bit ACME (Analog Comparator Multiplexer Enable) yang terdapat pada register ADCSRB dan menclearkan bit ADEN (ADC Enable) yang terdapat pada register ADCSRA. Pemilihan pin ADC sebagai inverting input ditentukan oleh combinasi bit ACME, bit ADEN dan bit MUX0 s/d bit MUX2 diperlihatkan tabel 1.
Tabel 1. Pemilihan non inverting input
 

Register Register Analog Comparator



Bit 6 – ACME: Analog Comparator Multiplexer Enable
Ketika bit ACME diset dan ADC dinonaktifkan (bit ADEN, yg terdapat pd register ADCSRA, diclearkan) maka ADC0 s/d ADC5 berfungsi sebagai inverting input dari analog comparator. Jika bit ACME dalam keadaan clear maka yang bertindak sebagai inverting input adalah pin AIN1.



Bit 7 – ACD: Analog Comparator Disable
Untuk alasan penghematan daya, maka analog comparator harus dinonaktifkan (switch off) dengan cara menset bit ACD. Begitu juga bit ACIE harus diclearkan agar tidak terjadi interrupt ketika terjadi perubahan logika pada bit.
Bit 6 – ACBG: Analog Comparator Bandgap Select
Jika bit ini diset, maka AIN0 tidak lagi berfungsi sebagai non inverting input dari comparator. Non inverting input diambil alih oleh tegangan referensi.
Bit 5 – ACO: Analog Comparator Output
Hasil perbandingan masukan membalik dan masukan tak membalik dari analog comparator dapat dilihat pada bit ini.
Bit 4 – ACI: Analog Comparator Interrupt Flag
Bit ini diset secara hardware ketika kejadian output comparator mentrigger mode interrupt yang ditentukan oleh bit ACIS1 dan bit ACIS0. Interrupt routine dari analog comparator akan dijalankan jika bit ACIE dan global interrupt, yang terdapat pada register SREG, keduanya dalam keadaan set. ACI akan diclearkan secara hardware ketika vektor interrupt dilaksanakan.
Bit 3 – ACIE: Analog Comparator Interrupt Enable
Untuk mengaktifkan interrupt pada analog comparator maka bit ACIE dan bit-I (global interrupt) harus dalam keadaan set.
Bit 2 – ACIC: Analog Comparator Input Capture Enable
Jika bit ini diset, maka input capture function pada Timer/counter1 dapat ditrigger oleh analog comparator. Agar Analog Comparator dapat mentrigger interrupt Timer/Counter1 input Capture, maka bit ICIE1 pada register TIMSK1 harus diset.
Bits 1, 0 – ACIS1, ACIS0: Analog Comparator Interrupt Mode Select
kedua bit ini menetukan jenis trigger untuk interrupt analog comparator. Tabel 2 memperlihatkan setting dari kedua bit ini. Ketika pengubahan kedua bit ini, Analog Comparator Interrupt harus di disable dengan menclearkan bit ACIE. Jika tidak diclearkan bit ACIE maka interrupt akan terjadi pada saat bit bit ini berubah.
Tabel 2. Setting dari bit ACIS1 dan ACIS0



Bit 1, 0 – AIN1D, AIN0D: AIN1, AIN0 Digital Input Disable
Jika hanya tegangan analog diterapkan pada kaki AIN0 dan kaki AIN1 atau digital input tidak diperlukan pada kedua pin tersebut, maka bit tersebut harus di set agar mengurangi komsumsi daya. Jadi jika bit ini ( AIN1D dan AIN0D) di set maka digital input menjadi disable.

Contoh.
// Program mempergunakan Analog comparator
// Mempergunakan UC ATMega328
// Tegangan analog diterapkan pada kaki AIN0 dan kaki AIN1

#include <avr/io.h>
#include <avr/interrupt.h>


int main(void)
{
// Mempergunakan pin AIN1 sebagai inverting input analog comparator.
// Pemilihan AIN1 sebagai inverting input
ADCSRB &= ~(1<<ACME); // Hanya penegasan, default bit ACME = 0
// mendisablekan digital input (PORTD6 dan PORTD7) 
DIDR1 |= (1<<AIN0D) | (1<<AIN1D);
//Menaktifkan analog comparator.
ACSR &= ~(1<<ACD); // Default value ACD=0
DDRB |= (1<<DDB4); // PB4 sebagai output
PORTB &= ~(1<<PORTB4); //PB4 low
while(1)
{
if(bit_is_set(ACSR, ACO))
{
// tegangan analog pada pin AIN0 > pin AIN1
PORTB &= ~(1<<PORTB4);
}
else
{
//tegangan analog pada pin AIN0 < pin AIN1
PORTB |= (1<<PORTB4);
}
}
}

Tidak ada komentar:

Posting Komentar