реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Не работает порт на вход в режиме RunTime :(, PIC24H
jartsev
сообщение Jul 25 2011, 21:48
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 578
Регистрация: 7-03-09
Из: Новосибирск
Пользователь №: 45 805



Провел несколько незабываемых дней решая (так и не решив) следующую проблему:
Имеется 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 не дало результата.

Жду Ваших предложений/предположений.


--------------------
Go to the top of the page
 
+Quote Post
volodya
сообщение Jul 26 2011, 04:49
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 194
Регистрация: 14-02-07
Из: УКРАИНА
Пользователь №: 25 344



Цитата(Ярцев А.В. @ Jul 26 2011, 00:48) *
Провел несколько незабываемых дней решая (так и не решив) следующую проблему:

PORTEbits.RE3=PORTBbits.RB0;
PORTEbits.RE4=PORTBbits.RB1;


Смена PORTB на LATB не дало результата.


Может опечатка - принимающая сторона PORTE , т.е. менять надо было на LATE.


--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть"
"Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
Go to the top of the page
 
+Quote Post
Vlad27
сообщение Jul 26 2011, 06:59
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 95
Регистрация: 31-07-05
Из: Полоцк Беларусь
Пользователь №: 7 227



Рекомендую при использовании портов ввода-вывода пользоваться макросами
Go to the top of the page
 
+Quote Post
shkal
сообщение Jul 26 2011, 08:10
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 281
Регистрация: 29-04-08
Из: Москва
Пользователь №: 37 149



А если состояние порта В сохранить в переменной, а следующей командой присвоить ее порту Е - работает?
Go to the top of the page
 
+Quote Post
jartsev
сообщение Jul 26 2011, 12:56
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 578
Регистрация: 7-03-09
Из: Новосибирск
Пользователь №: 45 805



Цитата(shkal @ Jul 26 2011, 11:10) *
А если состояние порта В сохранить в переменной, а следующей командой присвоить ее порту Е - работает?


Спасибо за идею, но к сожалению не помогло

Цитата(volodya @ Jul 26 2011, 07:49) *
Может опечатка - принимающая сторона PORTE , т.е. менять надо было на LATE.


Да нет, вроде правильно написал. Или я не правильно понимаю что есть LATE?
На всякий случай проверил - не помогло


--------------------
Go to the top of the page
 
+Quote Post
xemul
сообщение Jul 26 2011, 13:30
Сообщение #6



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(jartsev @ Jul 26 2011, 16:56) *
Да нет, вроде правильно написал. Или я не правильно понимаю что есть 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.
Go to the top of the page
 
+Quote Post
jartsev
сообщение Jul 26 2011, 18:14
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 578
Регистрация: 7-03-09
Из: Новосибирск
Пользователь №: 45 805



Цитата(xemul @ Jul 26 2011, 17:30) *
LATx - регистр-защёлка для выходов PORTx.

Вы, поминая LATB, перепутали источник и приёмник.
Корректнее было бы
Код
LATEbits.RE3=PORTBbits.RB0;
LATEbits.RE4=PORTBbits.RB1;

А источник проблемы, вероятно, живёт в приоритете периферийных функций над стандартным вводом/выводом.

Лень качать ДШ на используемый Вами контроллер, поэтому не скажу, что именно нужно отключать, но нужно отключить все периферийные функции на RE3, RE4.


На порте E как и на B подключен внутренний АЦП. АЦП отключен. Замена PORTE на LATE так же не помог.


--------------------
Go to the top of the page
 
+Quote Post
xemul
сообщение Jul 26 2011, 19:22
Сообщение #8



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(jartsev @ Jul 26 2011, 22:14) *
На порте 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), но если нужно будет ДШ на ночь почитать - уэлкам.
Go to the top of the page
 
+Quote Post
jartsev
сообщение Jul 27 2011, 15:45
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 578
Регистрация: 7-03-09
Из: Новосибирск
Пользователь №: 45 805



УРРРРРРРРРАААААААААААА, заработало. Отключил второй АЦП, всё стало ок. Правда не понял каким образом AN0 и AN1 относятся ко второму АЦП, но пока не важно. Спасибо огромное xemul ! +1 к рейтингу sm.gif


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01451 секунд с 7
ELECTRONIX ©2004-2016