Пятый день уже не могу понять, как работает аналоговый компаратор в Attiny 13A... По порядку:
1. Собираем на макетной плате схему - см. вложение.
2. В мастер-построителе программ Code vision AVR конфигурирую порт 2 как выходной с нулевым исходным состоянием, все остальные порты - на вход, но у pb0 и pb1 подтяжку не включаю, у остальных (неиспользуемых) - включаю. Также на вкладке "компаратор" включаю этот компаратор, соответствующей галочкой подключаю ИОН к выводу 5. Неясными остаются назначения галочек "Negative input multiplexer" и "Disable digital input buffers" (1 и 2) - их не трогаю. Галочку "Analog comparator interrupt" также оставляю выключенной, посколько пока еще не до прерываний.
3. Дополняю заготовку программы соответствующим циклом if - else, который отслеживает состояние бита ACO и соответствующим образом изменяет состояние порта 2, к которому подключен контрольный светодиод.
#include <tiny13a.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=Out Func1=In Func0=In
// State5=P State4=P State3=P State2=0 State1=T State0=T
PORTB=0x38;
DDRB=0x04;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;
// Analog Comparator initialization
// Analog Comparator: On
// The Analog Comparator's positive input is
// connected to the Bandgap Voltage Reference
ACSR=0x40;
ADCSRB=0x00;
// Digital input buffer on AIN0: Off
// Digital input buffer on AIN1: Off
DIDR0=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
while (1)
{if (ACO==1) {PORTB.2=1;}
else {PORTB.2=0};
};
}
4. Дальше как обычно - прошиваю МК и устанавливаю его в макетную плату, подаю напряжение. И ничего не происходит - при любом положении движка подстроечного резистора светодиод гореть не желает. На 5 выводе МК напряжение 0,5В, неизменно (хотя, как я понимаю, должно быть 1,2В - мы же подключили к нему ИОН), на 6 выводе напряжение, как и положено, изменяется в зависимости от угла поворота движка.
Также проводил опыт - отключал ИОН от 5 вывода и подавал на него 3В с резистивного делителя - компаратор по прежнему работать не хочет.
Что я делаю не так? Заранее спасибо за ответы.
- Вложения
-
- post-2266-0-05465000-1562851614_thumb.jpg
- (8.42 КБ) 493 скачивания


