8 комментариев

  1. Дмитрий говорит:

    Прокомментируйте, пожалуйста, еще один момент.

    ADMUX = 0x22; // опорное напряжение — VCC, левое ориентирование данных, выбран вход ADC2 (на нём висит перем. резистор)

    0х22 в десятичном формате это 0b100010. 6 цифр. Регистр- ADMUX- 8 бит. Используются только 4 бита. Как так получается?
    Или ,может быть, заполнить 7,4,3 и 2 биты нулями?

    я так понимаю.
    0b100010 это 7 бит- пустой,его нет.
    1- REFSO, используем VCC
    0- ADLAR
    4- нет
    3- нет
    2- нет
    1 конфиг ноги, понятно
    0 конфиг ноги, понятно.

    можно ли писать вместо неиспользуемого бита- 0 для сохранения 8 битного регистра?

    я просто не понимаю, откуда берется 6цифр?
    если написать просто 0b0110 — по числу используемых регистров- компилируется, но не работает.
    Объясните, пожалуйста, этот момент.
    Заранее спасибо.

    • OSBoy говорит:

      Значит так.
      0x22=0b100010. Старшие два нулевых бита тут просто пропущены, а вообще, в нашем случае будет так: 0x22=0b00100010. Соответственно, Ваше 0b0110 тут не прокатит, потому что 0b0110=0b00000110. Как видите, это совсем не то же самое, что 0b00100010.
      Чтобы было нагляднее, лучше открыть даташит на тини13 (стр.98, пункт 14.12.1) и мы увидим, что биты у нас нумеруются с 0 (младший, справа) до 7 (старший, слева). То есть у нас получается:
      — бит 0 = 0 — MUX0
      — бит 1 = 1 — MUX1
      — бит 2 = 0 — не используется
      — бит 3 = 0 — не используется
      — бит 4 = 0 — не используется
      — бит 5 = 1 — ADLAR
      — бит 6 = 0 — REFS0
      — бит 7 = 0 — не используется

      Там же, ниже, читаем: биты 2-4,7 — доступны только для чтения и всегда = 0, так что при записи значения регистра, можете смело забивать их нулями (так будет нагляднее), хотя они в любом случае останутся равными 0, даже если попытаться записать в них единицы.

  2. Дмитрий говорит:

    спасибо огромное! Хотелось бы видеть еще больше статей по программированию AT13. в частности, интересует обработка сигналов с аналогового входа .

  3. Дмитрий говорит:

    Здравствуйте. Огромное спасибо за интересный материал. очень помогает.

    Объясните, пожалуйста, один момент. Например,

    TCCR0A = 0xB1 В1 в двоичном формате -это 0b10110001
    Из даташита я понял, как выставляются 1и 0 по необходимым задействованным битам регистров.
    Мне кажется , проще и нагляднее сразу писать в двоичном виде, в шестнадцатеричном. Или это все конфигурируется заранее и на выходе получается 16-ричное число?
    Объясните, пожалуйста.

    • OSBoy говорит:

      Здравствуйте. Вы всё верно поняли. Действительно, в двоичном виде запись получается нагляднее. А по факту можно писать хоть в двоичном (0b10110001), хоть в шестнадцатиричном (0xB1), и даже в десятичном (177) — как кому удобнее в конкретном случае. Компилятор примет любой вариант, лишь бы синтаксис в коде был соблюдён.

      • Дмитрий говорит:

        спасибо. и все-таки- (0xB1) -это результат какого-то конфигуратора или мы сначала пишем конфигурацию в двоичном коде а потом переводим в шестнадцатиричный?

        еще один вопрос.
        OCR0A=(ADCH 245) ? 255: ADCH;

        тут применен тернарный оператор. Можно как-то подробнее расписать эту строчку. все-таки тернарный оператор для новичка- сложновато.

        • OSBoy говорит:

          В данном случае 0xB1 — это не результат какого-то конфигуратора, а просто запись значения регистра в 16-ричным исчеслении, Конфигурируем мы в уме, устанавливая нужные значения битов (в двоичном виде), а потом полученное значение пишем в коде в том виде, в каком нам удобно.
          Что касается тернарного оператора — тут всё просто: в данной строчке мы указываем, что если ADCH больше 245 (значение в скобках истинно), то OCR0A = 255 (значение до двоеточия); в противном случае — OCR0A=ADCH (значение после двоеточия). То есть в общем виде синтаксис такой:
          ПЕРЕМ=(условие) ? если_условие_истинно : если_условие_ложь;
          По сути, такая запись эквивалентна следующей, просто более компактна:
          if (ADCH > 245) OCR0A=255; else OCR0A=ADCH;

Оставить комментарий