ioРассмотрим примеры настройки портов в CodeVision AVR
Например DDRB=0x02; данная запись означает что вторая ножка порта В настроена как выход, но откуда взялось это число????

Для начала переведем данную запись в более понятный нам вид:
приставка 0х означает что число записано в шестнадцатеричной системе исчисления, чтобы легко понять его суть нужно перевести его в двоичную систему. Поможет нам в этом калькулятор Windows из набора стандартных программ, сразу переводим его в режим программист.

Переключаем его в режим шестнадцатеричной системы (галочка HEX), и вводим наше число 0х02 просто как 2.

теперь не нажимаем никаких равно и пр. просто переключаемся в двоичную систему счисления (галочка Bin)

Получили число 10. Что же оно значит? У нашей ATmega8 имеется 8 ножек на порту В (обведены на картинке)

так вот если представить число 10 как 00000010, то это будет означать что только вторая ножка настроена как выход, остальные как вход.

PORTB.7 PORTB.6 PORTB.5 PORTB.4 PORTB.3 PORTB.2 PORTB.1 PORTB.0
0 0 0 0 0 0 1 0

Тут нужно отметить, что если вместо
DDRB=0x02;
запишем
DDRB=0b00000010;
то оно тоже будет работать, т.е. это равнозначные записи одного и того же числа, в разных системах счисления.

С DDRB разобрались 1-выход, 0-вход, а что же означает
PORTB=0x01;
тут принцип тот же самый, но:
если нога сконфигурирована как выход и значение PORTB будет равно единице на этой же ноге, то ножка после прошивки будет включена по умолчанию (т.е. на ней будет напряжение), если 0, то ножка будет выключена. В первом уроке мы могли бы заменить запись PORTB.0=1; записью PORTB=0x01; и получили тот же самый результат.

На самом деле, правильным решением включения/выключения ножки с точки зрения языка Си, являются следующие конструкции:

PORTD |= (1<<3); //включить ножку 3 порта D
PORTD |= (1<<2)|(1<<5)|(1<<6); //включить ножки 2, 5, 6 порта D
PORTD &= ~(1<<2); //выключить ножку 2
PORTD &= (~((1<<0)|(1<<2)|(1<<4))); //выключить ножки 0, 2, 4

Если нога сконфигурирована как вход и значение PORTB будет равно единице на этой же ноге, то к ножке будет подключен подтягивающий резистор, для устранения помех. Если вам внутренний резистор не нужен то просто установите 0 на этой ножке.

Надеюсь все понятно, если что пишите, задавайте вопросы.

9 комментариев: Настройки портов ввода-вывода CodeVision AVR

  • Вы ту недавно обмолвились товарищ Админ) Как правильно надо порты определять) думаю здесь не будет лишним упомянуть такую настройку портов как :

    PORTD |= (1<<3);установит "1" (сигнал высокого уровня) на выводе PD3
    PORTD &= ~(1<<4);установит "0" (сигнал низкого уровня) на выводе PD4.
    и аналогично им регистров).

  • Добавил

  • В статьях, предназначенных для новичков очень важно
    объяснить а не запутать!
    DDRB=0b00000010; — двоичная запись
    DDRB=0x02; — шестнадцатеричная запись
    Или:
    DDRB=(1<<1); запись логической единицы в некоторый разряд
    с обнулением остальных разрядов.
    См. Прокопенко В.С. Программирование микроконтроллеров Atmel
    на языке С, 2012г.

  • Стас, новачок как и я такими записями сразу все равно будет путаница и т.д. Просто надо читать, читать, практиковать, читать и тогда проходя времья все будет познаватся.

  • Здравствуйте! У меня ест скетч для ардуино. Событие с кнопкой такой, нажал кнопку- на определенный ноге появится импульс с длительности 200 мсек, отпустил кнопку опят на том же выходе появится такой же импульс. просьба такой как можно инициализировать ножки на атмега8 и организовать такое событие на атмеге? И ешё было бы хорошо все это делать на пик16ф628А которые мне очень доступны по цене и в наличии.
    Заране спасибо!

  • Уважаемый админ. Подскажите можно ли сконфигурировать ногу что бы на нее выходило -5в? У меня на одном устройстве задействована динамическая индикация. Но все ноги подключены на порты. Вода-вывода. Ни одной на минус. Как так? 😯

  • ножки мк выдают либо 0, либо VCC

  • Тогда подскажите подалуйста как эта штуковина работает. Просто я хочу написать код для задействования индикатора посредством той платы. Ранее это был таймер на atmega8a-au. А мне охота сделать термометр. Платка подходящая и кнопки на месте…
    Подключение выводов четырехразрядного семисегментного индикатора сейчас такова:
    Сегмент a pd1
    Сегмент b pd4
    Сегмент c pb0
    Сегмент d pd6
    Сегмент e pd5
    Сегмент f pd0
    Сегмент g pb1
    Сегмент h точка pd7
    1 разряд pd2
    2 разряд pc5
    3 разряд pc4
    4 разряд pb2
    я бы фотку приложил да кнопки такой тут нету…

  • на семисегментниках у вас либо общий плюс, либо общая земля. http://avr-start.ru/?p=435

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика