Использование PortB в качестве приемника, не работает
Из идей здесь я пытаюсь использовать PB0-3 в качестве стоков для светодиодной матрицы, и контакты просто не будут тонуть.
Мой тестовый код:
void setup() {
//bitClear(SPCR, 6);
pinMode(PD5, OUTPUT);
pinMode(PB0, OUTPUT);
pinMode(PB1, OUTPUT);
pinMode(PB2, OUTPUT);
pinMode(PB3, OUTPUT);
digitalWrite(PB0, LOW);
digitalWrite(PB1, LOW);
digitalWrite(PB2, LOW);
digitalWrite(PB3, LOW);
}
// функция цикла запускается снова и снова навсегда
void loop() {
digitalWrite(PD5, HIGH);
delay(1000);
digitalWrite(PD5, LOW);
delay(1000);
}
(Используя стандартный Blink в качестве отправной точки для тестов)
Мой контроллер представляет собой ATMega328P, запрограммированный с помощью USBaspLoader на моей собственной печатной плате.
Если я подключу физический контакт, который должен быть соединен с проводом, к земле, светодиод начнет мигать, поэтому кажется, что "отправляющая" часть работает, а "принимающая" - нет. Как видите, я попытался вручную отключить порт SPI, но безуспешно. Пробовал разные контроллеры, среди них старый добрый ATMega8-16, вроде ничего не работает. Я даже макетировал тестовую схему, но не повезло, PortB не тонет.
@BastetFurry, 👍0
Обсуждение1 ответ
Лучший ответ:
PB3
и т. д. не относятся к контактам Arduino. Вместо этого они ссылаются на биты во внутренних регистрах.
Чтобы использовать digitalWrite()
и т. д., вы должны использовать выводы Arduino, а не номера битов внутреннего регистра.
Сопоставление контактов и портов/битов определяется выбранной платой, и если вы хотите найти ее, вам следует изучить файл pins_arduino.h
для выбранной платы.
Спасибо, подумал я, потому что компилятор не жаловался, что они определены как таковые. Есть ли способ посмотреть промежуточный код?, @BastetFurry
Вы имеете в виду ассемблерный код? Я думаю, вы можете дизассемблировать файл elf с помощью avr-objdump -S
, но это, вероятно, вам не поможет. Обычно PBx
определяется как x
(PB3
определяется как 3
) и предназначен для использования как PORTB |= (1 << PB3)
., @Majenko
- Что делать с плавающими контактами Arduino?
- Какое назначение контактного конденсатора ввода-вывода на микроконтроллере AVR?
- Barebones AVR — подключение вывода RESET к Vcc
- ATMega328 работает, но не выводит ни на какие контакты
- Почему я читаю только нули из PORTB?
- Физическое прохождение через пин для доступа к другому
- NodeMCU - Vin контакт как выход 5V?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Почему вы используете что-то вроде
PB3
сdigitalWrite()
и т. д.?, @Majenko