Использование аналоговых пинов как цифровые

Здравствуйте.
Стало пинов не хватать, разобрал все. Добрался до аналоговых.
Да вот беда, с АО я звук цифрую,с А1 одновременно еще и напряжение измеряю. Цифровые все релюхами шлепают и ключами. Нагуглил здесь что якобы можно использовать аналоговые как цифровые, но не могу допетрить будет ли это работать в моем случает. Я то понимаю что АЦП у Атмеги всего один и А0-А5 - это всего лишь переключаемые выводы мультиплексора.
Короче , помогите разобраться можно ли А2-А5 как полноценные цифровые испьзовать. Спасибо заранее.

забыл ссылку вставить

А попробовать не судьба?

там последний абзац надо было прочитать

Ещё одно правило: если вы используете аналоговый порт в качестве цифрового, в настройках необходимо задать функцию PinMode(), а порту присвоить номер соответствующего ему цифрового порта с 14 (для входа A0) по 19 (для входа A5).

чушь, а не правило

можно. и А0 и А1 тоже.
А вот А6 и А7 нельзя - они только аналоговые.

1 лайк

что опять не так то?

1 лайк

Всё. Буквально всё. pinMode написан в неправильном регистре. Использовать эту функцию не обязательно. Номера специальные писать не надо.

1 лайк

ну с первым и последним соглашусь, хотя смысла это не меняет, но как быть с этим?

как отмазываться будешь?

1 лайк

Видимо, товарищ прицепился к тому, что INPUT там по умолчанию при включении питания.

2 лайка

подытожу. Из всего написанного я понял, что аналоговые порты А0-А5 являются в том числе цифровыми и можно обходится с ними как с цифровыми без всяких специальных ухищрений? Правильно?

правильно

1 лайк

да, блинк на А3

void setup() {

  pinMode(A3, OUTPUT);
}

void loop() {
  digitalWrite(A3, HIGH);
  delay(1000);
  digitalWrite(A3, LOW);
  delay(1000);
}
2 лайка

Спасибо всем за участие в обсуждении ,буду пробовать. Но мне кажется ,что так оно и есть, так как тоже немножко “чувствую” тему.

Вот так устроит ?

//если пин будет работать в режиме DI, то ничего не прописываем

//если пин будет работать в режиме DO пишем:
DDRC|=1<<PCx; //где x== номер пина 0...5(А0...А5)
//эквивалентно записи:
pinMode(Ax,OUTPUT);

//Если нужен режим INPUT_PULLUP, то бит регистра DDRC не трогаем, а прописываем PORTC
PORTC|=1<<PCx;



ты за всех отмазываешься?
нет не устроит, без правки DDRC , напрямую или через пинмод, “блинк” на них не получить.

Так ты определись, без чего не обойтись ?
Без функции pinMode или без использования DDRC ?
Изначально ты утверждал, что без функции никак…

Если будешь дальше упираться и юлить я тебе могу и без первого и без второго блинк написать на любом из пинов A0…A5

зачем докапываешься? все все поняли, я знаю и ты не дурак, без записи в определенный регистр, вывод на выход не настроить.
а блинк я те сам без них напишу,
на моргай

void setup() {
  asm volatile
  (
    "ldi R16, 0b00011111 \n"
    "out 0x07, R16 \n"
  );
}

void loop() {
  asm volatile
  (
    "ldi R16, 0b00000000 \n"
    "out 0x08, R16 \n"
  );
  delay(450);
  asm volatile
  (
    "ldi R16, 0b00011111 \n"
    "out 0x08, R16 \n"
  );
  delay(50);
}

Не, я на асме не могу.
Мне и сей хватит для этого

int main(void){    
    int *x;    
    x=0x27;
    *x|=0x01;
    x=0x26;    

while(1){   
    *x|=0x01;
    long i=0;
    while(i<2000000UL)i++;
        }
}

да какая хер разница?

void setup() {
  uint32_t *r = 0x27;
  *(r) = 0b00011111;
}

void loop() {
  uint32_t *r = 0x28;
  *(r) = 0;;
  delay(450);
  *(r) = 0b00011111;
  delay(50);
}

Можно еще вопрос в тему. На А4 и А5 у меня часы висят и lcd. Получается , эти пины отпадают? На них никак DigitalRead не получится?