jartsev 0 25 июля, 2011 Опубликовано 25 июля, 2011 · Жалоба Провел несколько незабываемых дней решая (так и не решив) следующую проблему: Имеется PIC24HJ256GP610T. И имеется вот такой простельник листинг программы: void main() { AD1PCFGL = 0xFFFF; //Отключаем от порта B АЦП AD1PCFGH = 0xFFFF; //Отключаем от порта B АЦП TRISE=0; //настройка E4 на выход TRISB=0b0000000000000011; //B0..B1 настроим как входы while(1) { PORTEbits.RE3=PORTBbits.RB0; PORTEbits.RE4=PORTBbits.RB1; } } К портам B1 и B0 подключен энкодер. На порты E3 и E4 копирую считанное состояние. В режиме Debug всё отлично, а вот в режиме RunTime порт B всегда считывается как ноль и всё тут. Все остальные порты ведут себя нормально. Перекидывал енкодер на остальные ножки порта B - та же история, не видит и всё тут! Смена PORTB на LATB не дало результата. Жду Ваших предложений/предположений. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
volodya_t 0 26 июля, 2011 Опубликовано 26 июля, 2011 · Жалоба Провел несколько незабываемых дней решая (так и не решив) следующую проблему: PORTEbits.RE3=PORTBbits.RB0; PORTEbits.RE4=PORTBbits.RB1; Смена PORTB на LATB не дало результата. Может опечатка - принимающая сторона PORTE , т.е. менять надо было на LATE. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad27 0 26 июля, 2011 Опубликовано 26 июля, 2011 · Жалоба Рекомендую при использовании портов ввода-вывода пользоваться макросами Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shkal 0 26 июля, 2011 Опубликовано 26 июля, 2011 · Жалоба А если состояние порта В сохранить в переменной, а следующей командой присвоить ее порту Е - работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jartsev 0 26 июля, 2011 Опубликовано 26 июля, 2011 · Жалоба А если состояние порта В сохранить в переменной, а следующей командой присвоить ее порту Е - работает? Спасибо за идею, но к сожалению не помогло Может опечатка - принимающая сторона PORTE , т.е. менять надо было на LATE. Да нет, вроде правильно написал. Или я не правильно понимаю что есть LATE? На всякий случай проверил - не помогло Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 26 июля, 2011 Опубликовано 26 июля, 2011 · Жалоба Да нет, вроде правильно написал. Или я не правильно понимаю что есть LATE? LATx - регистр-защёлка для выходов PORTx. Reads from the latch (LATx) read the latch. Writes to the latch, write the latch. Reads from the port (PORTx) read the port pins, while writes to the port pins write the latch. Вы, поминая LATB, перепутали источник и приёмник. Корректнее было бы LATEbits.RE3=PORTBbits.RB0; LATEbits.RE4=PORTBbits.RB1; А источник проблемы, вероятно, живёт в приоритете периферийных функций над стандартным вводом/выводом. A parallel I/O port that shares a pin with a peripheral is generally subservient to the peripheral. ... When a peripheral is enabled and the peripheral is actively driving an associated pin, the use of the pin as a general purpose output pin is disabled. The I/O pin can be read, but the output driver for the parallel port bit is disabled. If a peripheral is enabled, but the peripheral is not actively driving a pin, that pin can be driven by a port. Лень качать ДШ на используемый Вами контроллер, поэтому не скажу, что именно нужно отключать, но нужно отключить все периферийные функции на RE3, RE4. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jartsev 0 26 июля, 2011 Опубликовано 26 июля, 2011 · Жалоба LATx - регистр-защёлка для выходов PORTx. Вы, поминая LATB, перепутали источник и приёмник. Корректнее было бы LATEbits.RE3=PORTBbits.RB0; LATEbits.RE4=PORTBbits.RB1; А источник проблемы, вероятно, живёт в приоритете периферийных функций над стандартным вводом/выводом. Лень качать ДШ на используемый Вами контроллер, поэтому не скажу, что именно нужно отключать, но нужно отключить все периферийные функции на RE3, RE4. На порте E как и на B подключен внутренний АЦП. АЦП отключен. Замена PORTE на LATE так же не помог. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 26 июля, 2011 Опубликовано 26 июля, 2011 · Жалоба На порте E как и на B подключен внутренний АЦП. АЦП отключен. Замена PORTE на LATE так же не помог. Таки скачал ДШ. Чёрным по-аглицки: In devices with two ADC modules, if the corresponding PCFG bit in either AD1PCFGH(L) and AD2PCFGH(L) ... Если Вам АЦП совсем не нужны, то PCFGx bits will have no effect if ADC module is disabled by setting ADxMD bit in the PMDx register. In this case all port pins multiplexed with ANx will be in Digital mode. ЗЫЖ я с PIC24 не работаю (как-то побаловался с каким-то PIC24F), но если нужно будет ДШ на ночь почитать - уэлкам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jartsev 0 27 июля, 2011 Опубликовано 27 июля, 2011 · Жалоба УРРРРРРРРРАААААААААААА, заработало. Отключил второй АЦП, всё стало ок. Правда не понял каким образом AN0 и AN1 относятся ко второму АЦП, но пока не важно. Спасибо огромное xemul ! +1 к рейтингу :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться