Я использую PIC32MX250F128B для проекта по управлению несколькими цифровыми выходами; Мне нужно управлять цифровым выходом около 13-14 контактов. (используя приведенный ниже код).
Работают следующие контакты: RA0, RA1, RB0, RB1, RB2, RB3, RB10, RB11, RB13, RB14, RB15.
Эти контакты не имеют: RA2, RA3, RA4, RB4, RB5, RB7, RB8, RB9
Под «не работает» я подразумеваю, что выходного напряжения вообще нет, а просто отключенное состояние (тогда как «рабочие» контакты успешно переключаются с высокого на низкий). Моя теория о том, почему выводы не работают, заключается в том, что для выводов требуется дополнительный выбор периферийного регистра, чтобы настроить их для работы в качестве общих выводов ввода-вывода. Я не уверен, что это правильно, но гугление и тестирование не дали никаких результатов, а техническое описание не очень помогло.
void main() {
mPORTBClearBits(BIT_4 | BIT_5 | BIT_7 | BIT_8 | BIT_9);
mPORTBSetPinsDigitalOut(BIT_4 | BIT_5 | BIT_7 | BIT_8 | BIT_9);
mPORTAClearBits(BIT_2 | BIT_3 | BIT_4);
mPORTASetPinsDigitalOut(BIT_2 | BIT_3 | BIT_4);
while(1) {
mPORTBToggleBits(BIT_4 | BIT_5 | BIT_7 | BIT_8 | BIT_9);
mPORTAToggleBits(BIT_2 | BIT_3 | BIT_4);
}
}
Мои биты конфигурации установлены на стандартные значения (при необходимости я могу опубликовать весь файл main.c. РЕДАКТИРОВАТЬ: см. ниже). Почему это подмножество контактов доставляет мне столько хлопот?
РЕДАКТИРОВАТЬ: вот мои биты конфигурации
#pragma config FNOSC = FRCDIV // Oscillator Selection Bits (Fast RC Osc w/Div-by-N (FRCDIV))
#pragma config FSOSCEN = ON // Secondary Oscillator Enable (Enabled)
#pragma config IESO = ON // Internal/External Switch Over (Enabled)
#pragma config POSCMOD = HS // Primary Oscillator Configuration (HS osc mode)
#pragma config OSCIOFNC = ON // CLKO Output Signal Active on the OSCO Pin (Enabled)
#pragma config FPBDIV = DIV_1 // Peripheral Clock Divisor (Pb_Clk is Sys_Clk/1)
#pragma config FCKSM = CSDCMD // Clock Switching and Monitor Selection (Clock Switch Disable, FSCM Disabled)
#pragma config WDTPS = PS1048576 // Watchdog Timer Postscaler (1:1048576)
#pragma config WINDIS = OFF // Watchdog Timer Window Enable (Watchdog Timer is in Non-Window Mode)
#pragma config FWDTEN = ON // Watchdog Timer Enable (WDT Enabled)
#pragma config FWDTWINSZ = WINSZ_25 // Watchdog Timer Window Size (Window Size is 25%)
// DEVCFG0
#pragma config JTAGEN = ON // JTAG Enable (JTAG Port Enabled)
#pragma config ICESEL = ICS_PGx1 // ICE/ICD Comm Channel Select (Communicate on PGEC1/PGED1)
#pragma config PWP = OFF // Program Flash Write Protect (Disable)
#pragma config BWP = OFF // Boot Flash Write Protect bit (Protection Disabled)
#pragma config CP = OFF
Я подозреваю, что это ваши биты конфигурации, единственное, что вы не опубликовали.
На все эти контакты влияют биты конфигурации.
Редактировать: теперь у нас есть ваши биты конфигурации, я могу это подтвердить:
Все те, которые включены или не отключены специально, будут переопределять любые другие функции на этих контактах.
См. таблицы на стр. 60 и 61 в PDF-файле, на который вы ссылаетесь, для всех регистров, которые могут повлиять на порт A или порт B, и убедитесь, что все они верны (всего около 20 регистров). Например, для ПОРТБ:
Джей Браун