Обе строки должны указывать на один и тот же порт. Но работает только вторая. На первую не ругается, но и вывода на указанный пин нет… В чем тут дело? С портом D - все нормально…
ТС, если ты куда-либо выведешь значение PB2 - оно будет равно 2. Более того, PD2 = 2, PC2 = 2 и тд.
Эти макросы нужны для доступа к выводу внутри порта, например:
DDRB = 0xFF; // Порт B "на выход"
PORTB = 0x00; // На всех выводах логический ноль
PORTB |= (1 << PB2); // Установить на втором выводе порта B (PB2) логическую единицу
Если использовать ядро MiniCore, то для прямого доступа там используются макросы PIN_PXY.
Где X - буква порта, Y - номер вывода. Например