void adcOFF(void) { // TX
  ADMUX  = 0b00000011;            // REFS1 REFS0 ADLAR - MUX3 MUX2 MUX1 MUX0             =ADC3   //analogReference(INTERNAL);
  ADCSRA = 0b00000000;            // ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0
  ADCSRB = 0b01000000;            // - ACME+ - - - ADTS2 ADTS1 ADTS0
  ACSR   = 0b01000111;            // ACD ACBG+ ACO ACI ACIE ACIC+ ACIS1+ ACIS0+
  noInterrupts();
  TCCR1A = 0b00000000;            // COM1A1 COM1A0 COM1B1 COM1B0 - - PWM11 PWM10
  TCCR1B = 0b11000001;            // ICNC1+ ICES1+ - - CTC1 CS12 CS11 CS10+              =CK/1
  TCCR1C = 0b00000000;            // FOC1A FOC1B - - - - - -
  ICR1 = 0;
  TIMSK1 = 0b00100001;            // - - ICIE1+ - - OCIE1B OCIE1A TOIE1+
  TIFR1  = 0b00000110;            // - - ICF1 - - OCF1B+ OCF1A+ TOV1
  interrupts();
}

void adcON(void) { // RX
  ADMUX  = 0b00000000;            // REFS1 REFS0? ADLAR - MUX3 MUX2 MUX1 MUX0
  ADCSRA = 0b10000111;            // ADEN+ ADSC ADATE ADIF ADIE ADPS2+ ADPS1+ ADPS0+    =CLK/128
  ADCSRB = 0b00000000;            // - ACME+ - - - ADTS2 ADTS1 ADTS0
  ACSR   = 0b00010000;            // ACD ACBG ACO? ACI+ ACIE ACIC ACIS1 ACIS0
  noInterrupts();
  TCCR1A = 0b00000001;            // COM1A1 COM1A0 COM1B1 COM1B0 - - PWM11 PWM10+
  TCCR1B = 0b00000011;            // ICNC1 ICES1 - - CTC1 CS12 CS11+ CS10+              =CK/64
  TCCR1C = 0b00000000;            // FOC1A FOC1B - - - - - -
  TIMSK1 = 0b00000000;            // - - ICIE1 - - OCIE1B OCIE1A TOIE1
  TIFR1  = 0b00100111;            // - - ICF1+ - - OCF1B+ OCF1A+ TOV1+
  ICR1   = 0;
  // disable external interrupts
  PCICR  = 0;
  PCMSK0 = 0;
  PCMSK1 = 0;
  PCMSK2 = 0;
  delay(1);
  interrupts();
}


Регистр ADMUX:
7
6
5
4
3
2
1
0
REFS1
REFS0
ADLAR
-
MUX3
MUX2
MUX1
MUX0

Биты REFS1 (7) и REFS0 (6) устанавливают какой источник опорного напряжения будет выбран:
Бит ADLAR (5) регистра ADMUX позволяет выравнивать результат преобразования по левому краю при записи в него 1.
Биты MUX3 - MUX0 (3 - 0) - управляют мультиплексором:

Регистр ADCSRA:
7
6
5
4
3
2
1
0
ADEN
ADSC
ADATE
ADIF
ADIE
ADPS2
ADPS1
ADPS0

Бит ADEN (7) регистра ADCSRA включает или выключает АЦП (1-включен).
Бит ADSC (6) регистра ADCSRA запускает преобразование если в него записать 1 (для многоразового режима запуск первого преобразования).
Бит ADATE (5) регистра ADCSRA позволяет запускать преобразование по прерыванию от переферийных устройств микроконтроллера если установить в 1.
Бит ADIF (4) регистра ADCSRA - флаг прерывания от АЦП.
Бит ADIE (3) регистра ADCSRA - разрешает прерывания от АЦП если установлен в 1.
Биты ADPS2 - ADPS0 (2 - 0) регистра ADCSRA выбирают режим работы предделителя тактовой частоты:

Регистр ADCSRB:
7
6
5
4
3
2
1
0
-
ACME
-
-
-
ADTS2
ADTS1
ADTS0

Бит ACME (6) регистра ADCSRB позволяет использовать мультиплексор АЦП в качестве входов аналогового компаратора при установке 1 ( при этом АЦП должен быть выключен).
Биты ADTS2 - ADTS0 (2 - 0) регистра ADCSRB выбирают источник сигнала по которому будет начинаться преобразование АЦП:

Регистр ACSR:
7
6
5
4
3
2
1
0
ACD
ACBG
ACO
ACI
ACIE
ACIC
ACIS1
ACIS0

Бит ACD (7) регистра ACSR выключает питание аналогового компаратора если установлен в 1.
Бит ACBG (6) регистра ACSR подключение к положительному входу компаратора ИОН 1.1 В при установке 1.
Бит ACO (5) регистра ACSR является выходом компаратора, в него записывается результат сравнения:

  • 0 - если AIN0<AIN1
  • 1 - если AIN0>AIN1
Бит ACI (4) регистра ACSR флаг поступления прерывания от компаратора (1 - если сгенерировано прерывание).
Бит ACIE (3) регистра ACSR разрешает прерывание от компаратора, если установлен в 1.
Бит ACIS (2) регистра ACSR подключает компаратор к схеме захвата таймера/счетчика T1 если установлен в 1.
Биты ACIS1 (1) и ACIS0 (0) регистра ACSR устанавливают условие, при котором возникает прерывание:

счетчик T1 (16 бит)

Характеристики таймера/счетчика T1 (16 бит):
  • Два независимых выхода по совпадению
  • Таймер сброса при совпадении
  • Один вход захвата
  • Блок шумоподавления входа захвата
  • Изменяемый период ШИМ сигнала
  • Фазовый корректор ШИМ сигнала
  • Изменяемый период ШИМ сигнала
  • Тактовый генератор
  • Три независимых источника прерывания
Регистры таймера/счетчика T1:
  • TCNT1 - счетный регистр таймера/счетчика T1 (16 бит)
  • OCR1A - регистр сравнения A (16 бит)
  • OCR1B - регистр сравнения B (16 бит)
  • + TIMSK1 - регистр маски прерываний для таймера/счетчика T1
  • + TIFR1 - регистр флагов прерываний для таймера/счетчика T1
  • + TCCR1A - регистр управления A
  • + TCCR1B - регистр управления B
  • + TCCR1C - регистр управления C
  • + ICR1 - регистр захвата (16 бит)
Источником тактового сигнала для таймера/счетчика T1 может быть как тактовый сигнал используемый для всего микроконтроллера с использованием предделителя, так и сигнал, поступающий на вход T1 (11 ножка). Если не выбрано ни одного источника тактового сигнала, то таймер/счетчик останавливается.

Регистр TCCR1A:
7
6
5
4
3
2
1
0
COM1A1
COM1A0
COM1B1
COM1B0
-
-
WGM11
WGM10
Режим работы таймера/счетчика T1 устанавливается регистрами TCCR1A и TCCR1B 
Биты COM1A1 (7) и COM1A0 (6) влияют на то, какой сигнал появится на выводе OC1A (15 ножка) при совпадении с A (совпадение значения счетного регистра TCNT1 со значением регистра сравнения OCR1A):

    1. Обычный режим
  • 00 - вывод OC1A не функционирует
  • 01 - изменение состояния вывода OC1A на противоположное при совпадении с A
  • 10 - сброс вывода OC1A в 0 при совпадении с A
  • 11 - установка вывода OC1A в 1 при совпадении с A
    2. Режим ШИМ
  • 00 - вывод OC1A не функционирует
  • 01 - если биты WGM13 - WGM10 установлены в (0000 - 1101), вывод OC1A не функционирует
  • 01 - если битыWGM13 - WGM10 установлены в 1110 или 1111, изменение состояния вывода OC0A на противоположное при совпадении с A
  • 10 - сброс вывода OC1A в 0 при совпадении с A, установка  вывода OC1A в 1 если регистр TCNT1 принимает значение 0x00 (неинверсный режим)
  • 11 - установка вывода OC1A в 1 при совпадении с A, установка  вывода OC1A в 0 если регистр TCNT1 принимает значение 0x00  (инверсный режим)
    3. Режим коррекции фазы ШИМ
  • 00 - вывод OC1A не функционирует
  • 01 - если биты WGM13 - WGM10 установлены в (0000 - 1100, 1010, 1100 - 1111), вывод OC1A не функционирует
  • 01 - если битыWGM13 - WGM10 установлены в 1101 или 1011, изменение состояния вывода OC1A на противоположное при совпадении с A
  • 10 - сброс вывода OC1A в 0 при совпадении с A во время увеличения значения счетчика, установка  вывода OC1A в 1  при совпадении с A во время уменьшения значения счетчика
  • 11 - установка вывода OC1A в 1 при совпадении с A во время увеличения значения счетчика, сброс  вывода OC1A в 0  при совпадении с A во время уменьшения значения счетчика
Биты COM1B1 (5) и COM1B0 (4) влияют на то, какой сигнал появится на выводе OC0B (12 ножка) при совпадении с B (совпадение значения счетного регистра TCNT1 со значением регистра сравнения OCR1B):

    1. Обычный режим
  • 00 - вывод OC1B не функционирует
  • 01 - изменение состояния вывода OC1B на противоположное при совпадении с B
  • 10 - сброс вывода OC1B в 0 при совпадении с B
  • 11 - установка вывода OC1B в 1 при совпадении с B
    2. Режим ШИМ
  • 00 - вывод OC1B не функционирует
  • 01 - вывод OC1B не функционирует
  • 10 - сброс вывода OC1B в 0 при совпадении с B, установка  вывода OC1B в 1 если регистр TCNT1 принимает значение 0x00 (неинверсный режим)
  • 11 - установка вывода OC1B в 1 при совпадении с B, установка  вывода OC1B в 0 если регистр TCNT1 принимает значение 0x00  (инверсный режим)
    3. Режим коррекции фазы ШИМ
  • 00 - вывод OC1B не функционирует
  • 01 - вывод OC1B не функционирует
  • 10 - сброс вывода OC1B в 0 при совпадении с B во время увеличения значения счетчика, установка  вывода OC1B в 1  при совпадении с B во время уменьшения значения счетчика
  • 11 - установка вывода OC1B в 1 при совпадении с B во время увеличения значения счетчика, сброс  вывода OC1B в 0  при совпадении с B во время уменьшения значения счетчика
Регистр TCCR1B:
7
6
5
4
3
2
1
0
ICNC1
ICES1
-
WGM13
WGM12
CS12
CS11
CS10

Биты WGM13 (4) , WGM12 (3) регистра TCCR1B и биты WGM11 (1) , WGM10 (0) регистра TCCR1A устанавливают режим работы таймера/счетчика T1:
  • 0000 - обычный режим
  • 0001 - коррекция фазы PWM, 8-бит
  • 0010 - коррекция фазы PWM, 9-бит
  • 0011 - коррекция фазы PWM, 10-бит
  • 0100 - режим счета импульсов (OCR1A) (сброс при совпадении)
  • 0101 - PWM, 8-бит
  • 0110 - PWM, 9-бит
  • 0111 - PWM, 10-бит
  • 1000 - коррекция фазы и частоты PWM (ICR1)
  • 1001 - коррекция фазы и частоты PWM (OCR1A)
  • 1010 - коррекция фазы PWM (ICR1)
  • 1011 - коррекция фазы и частоты PWM (OCR1A)
  • 1100 - режим счета импульсов (ICR1) (сброс при совпадении)
  • 1101 - резерв
  • 1110 - PWM (ICR1)
  • 1111 - PWM (OCR1A)
Бит ICNC1 (7) регистра TCCR1B управляет схемой подавления помех блока захвата (0 - выключена / 1 - включена).
Бит ICES1 (6) регистра TCCR1B выбирает активный фронт регистра захвата (0 - по спадающему фронту сигнала / 1 - по нарастающему фронту сигнала).
Биты CS12 (2), CS11 (1), CS10 (0) регистра TCCR1B устанавливают режим тактирования и предделителя тактовой частоты таймера/счетчика T1:
  • 000 - таймер/счетчик T1 остановлен
  • 001 - тактовый генератор CLK
  • 010 - CLK/8
  • 011 - CLK/64
  • 100 - CLK/256
  • 101 - CLK/1024
  • 110 - внешний источник на выводе T1 (11 ножка) по спаду сигнала
  • 111 - внешний источник на выводе T1 (11 ножка) по возрастанию сигнала
Регистр TCCR1C:
7
6
5
4
3
2
1
0
FOC1A
FOC1B
-
-
-
-
-
-

Биты FOC1A (7) и FOC1B (6) регистра TCCR1С принудительно устанавливают значение на выводах OC1A и OC1B.

Регистр TIMSK1:
7
6
5
4
3
2
1
0
-
-
ICIE1
-
-
OCIE1B
OCIE1A
TOIE1

Управление прерываниями от таймера осуществляется в регистре TIMSK1.
Бит ICIE1 (5) разрешает прерывание по захвату, биты OCIE1B (2) и OCIE1A (1) разрешают прерывания при совпадении с A и B, бит TOIE1 (0) разрешает прерывание по переполнению при установке 1. Если в эти биты записать 0, прерывания от таймера/счетчика будут запрещены.

Также есть регистр флагов прерываний TIFR1, который показывает какое прерывание поступило от таймера/счетчика T0.

Регистр TIFR1:
7
6
5
4
3
2
1
0
-
-
ICF1
-
-
OCF1B
OCF1A
TOV1

Биты ICF1 (5), OCF1B (2), OCF1A (1) и TOV1 (0) устанавливаются в 1 в зависимости от того, какое прерывание поступило - захват, совпадение с A, B или переполнение.



Регистр PCICR — определяет какую группу входов использовать в качестве источника прерывания:

76543210
PCIE2

PCINT[23:16],

PCIE1

PCINT[14:8]

PCIE0

PCINT[7:0]


Регистр PCMSK2:
7
6
5
4
3
2
1
0
PCINT23
PCINT22
PCINT21
PCINT20
PCINT19
PCINT18
PCINT17
PCINT16

Регистр PCMSK1:
7
6
5
4
3
2
1
0
-
PCINT14
PCINT13
PCINT12
PCINT11
PCINT10
PCINT9
PCINT8

Регистр PCMSK2:
7
6
5
4
3
2
1
0
PCINT7
PCINT6
PCINT5
PCINT4
PCINT3
PCINT2
PCINT1
PCINT0

Для включения необходимого входа, соответствующий бит в регистре-маске должен быть установлен в 1.