Задача: Использование модуля компаратора
Исходный материал: PIC16f628a, proteus
Для начала заглянем в даташит и обратим внимание на регистр CMCON.
C2OUT: Выходной бит компаратора 2
Если C2INV = 0:
1 = C2 VIN+ > C2 VIN-
0 = C2 VIN+ < C2 VINWhen
C2INV = 1:
1 = C2 VIN+ < C2 VIN-
0 = C2 VIN+ > C2 VINbit
C1OUT: Выходной бит компаратора 1
Если C1INV = 0:
1 = C1 VIN+ > C1 VIN-
0 = C1 VIN+ < C1 VINWhen
C1INV = 1:
1 = C1 VIN+ < C1 VIN-
0 = C1 VIN+ > C1 VINbit
C2INV: Инверсия выходного бита компаратора 2
1 = C2 инверсия
0 = C2 нет инверсии
C1INV: Инверсия выходного бита компаратора 1
1 = C1 инверсия
0 = C1 нет инверсии
CIS: Выбор входного пина компаратора в некоторых режимах
Если CM<2:0>: = 001
Tогда:
1 = C1 VIN- подключен к RA3
0 = C1 VIN- подключен к RA0
Если CM<2:0> = 010
Тогда:
1 = C1 VIN- подключен к RA3
C2 VIN- подключен к RA2
0 = C1 VIN- подключен к RA0
C2 VIN- подключен к RA1
CM<2:0>: Выбор режимов компаратора
Режимы на рисунке ниже:
Для этого эксперимента нам достаточно одного компаратора, поэтому выставим значение CM = 101
Полный код проекта:
#include <htc.h> #define _XTAL_FREQ 4000000 #define LED RB0 __CONFIG(WDTDIS & UNPROTECT & MCLREN & LVPDIS & HS); void main(void) { CMCON = 0b10000101; TRISA = 0xFF; TRISB = 0x00; PORTB = 0; for (;;) { LED = C2OUT;} }
На RA1 подано опорное напряжение 2 вольта, а на RA2 синусоида с размахом 5 вольт. Результат работы:
Исходники здесь
Ого, как круто!))
Тест номер 3
и 4
тестовый ответ
тест2
подскажите пожалуйста как подключить к такому компаратору два аккумулятора и сравить их напряжение. На входы RA0 и RA1 к примеру.
Так вы сами и написали ответ в вопросе – подключайтесь на указанные входы и настраивайте себе хоть прерывания, хоть напряжение по выходу контролируйте.
Главное, чтобы напряжение на входах были больше минимально допустимого (см. даташит).