ATMEGA16L Подтягивание не активно - PullRequest
2 голосов
/ 17 марта 2020

Я не хочу получать входы в мой Atmega16L от кнопки. В идеале я могу использовать внутренние подтягивания, поэтому мне не нужно прикреплять их снаружи.

Я свел код до минимума:

void main(void) {

// SFIOR &= ~(1<<PUD);  // Turn off Pull-up disable
DDRD = 0xFF;    // Output PORT D
DDRA = 0x00;    // Input PORT A
PORTA = 0xFF;   // Pull-up on PORT A
_delay_ms(100); 
while (1) 
{
    if (PINA & (1<<PA1))    // Check if PA0 is High
        PORTD |= (1<<PD5);  // Set PD5 to High
    else
        PORTD &= ~(1<<PD5); // Set PD5 to Low
}

return;}

Я бы ожидал, что пин PD5 должен быть высоким, потому что PA1 подтягивается внутренним подтягиванием, установите в строке 6. Но нет, когда я запускаю код, на контакте PD5 низкий уровень, и мне нужно подключить контакт PA1 к 5V, чтобы получить высокий сигнал на PD5.

Короткие вещи Короче говоря, похоже, подтягивание не активно ...

Если попытался работать со SFIOR, но PUD по умолчанию отключен, насколько я знаю .

С уважением, Феликс

РЕДАКТИРОВАТЬ: запрошенные изображения:

The wiring (it's a mess)

1 Ответ

2 голосов
/ 18 марта 2020

На фото у вас AV CC блок питания не подключен (контакт 30, номер 11 на плате). AV CC подает питание на AD C и порт A. Он всегда должен быть подключен к V CC напрямую или через шумовой фильтр, но никогда не должен оставаться включенным.

Разница между V CC и AV CC никогда не должно превышать 0,3 В

Пожалуйста, ознакомьтесь с описанием выводов на странице 5 таблицы

...