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

 
 
 
Reply to this topicStart new topic
> AT91SAM7X256. Проблема с чтением входного сигнала контроллером PIO
Aurochs
сообщение Nov 10 2007, 10:18
Сообщение #1


Ортодокс
***

Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775



Уважаемые специалисты!
Помогите пожалуйста!

Не могу прочитать входной сигнал контроллером PIO.
Прследовательность действий следующая:
1. Подаю тактовую, прописывая 1 в бит 2 регистра PMC_PCER(для контроллера А)
2. Запрещаю работать линии как выход, для чего устанавливаю 1 в соответствующем бите регистра PIO_ODR
3. Разрешаю управление линией контроллером PIO, для чего устанавливаю 1 в соответствующем бите регистра PIO_PER
4. Читаю регистр PIO_PDSR с надеждой получить искомое значение, но там в соответствующем бите все время торчит 1.
Что я не так делаю? help.gif
Попутно хочу заметить, что если запрограммировать линию под работу с переферийным устройством (а конкретно модемом), то этот входной модемный сигнал читается без вопросов.

Заранее благодарен за любую помощь.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 10 2007, 12:48
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Aurochs @ Nov 10 2007, 12:18) *
Что я не так делаю?
Да в этой последовательности на первый взгляд все правильно. Может где-то дальше записанные вами значения затираются? Или вы подаете сигнал на одну ногу, а читаете другую?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Leen
сообщение Nov 10 2007, 12:59
Сообщение #3


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

Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343



пин в самах должен читаться всегда - вне зависимости от того разрешен выход, или нет, перенаправлен вывод на периферию или нет. Можно попробовать сначала обновить мануал с сайта атмела (может, там новые эраты появились), а потом - дергать ногой в режиме выхода и после этого читать (с задержкой на установку уровня) и смотреть вольтметром.
Go to the top of the page
 
+Quote Post
Aurochs
сообщение Nov 10 2007, 18:11
Сообщение #4


Ортодокс
***

Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775



Цитата(Сергей Борщ @ Nov 10 2007, 14:48) *
Да в этой последовательности на первый взгляд все правильно. Может где-то дальше записанные вами значения затираются? Или вы подаете сигнал на одну ногу, а читаете другую?


Да я уже и в отладчике вручную n-ое количество раз пытался это делать, а результат - все тот же...

Цитата(Leen @ Nov 10 2007, 14:59) *
пин в самах должен читаться всегда - вне зависимости от того разрешен выход, или нет, перенаправлен вывод на периферию или нет. Можно попробовать сначала обновить мануал с сайта атмела (может, там новые эраты появились), а потом - дергать ногой в режиме выхода и после этого читать (с задержкой на установку уровня) и смотреть вольтметром.


Когда я разрешаю работу пина на выход, то читается уже не 1, а значение, которое я прописываю.
И когда он задействован как периферийный, то тоже читается нормально. А как только перепрограммирую этот пин как чистый вход, то постояноо читается 1.
Документация тоже свежая и ничего по этому поводу не нашел...
Go to the top of the page
 
+Quote Post
Leen
сообщение Nov 10 2007, 18:21
Сообщение #5


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

Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343



Цитата(Aurochs @ Nov 11 2007, 04:11) *
И когда он задействован как периферийный, то тоже читается нормально. А как только перепрограммирую этот пин как чистый вход, то постояноо читается 1.
А если так и сдклать? Понимаю, что это нехорошо, но все же? Ориентировать его как вход неиспользуемой периферии, да и все...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 10 2007, 18:51
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Aurochs @ Nov 10 2007, 20:11) *
И когда он задействован как периферийный, то тоже читается нормально. А как только перепрограммирую этот пин как чистый вход, то постояно читается 1.
А попадает ли входной сигнал на эту ногу? Может банальный непропай? Была похожая ситуация - когда касаюсь ноги осциллографом она прижимается к дорожке и сигнал виден. Как только отпускаю - контакт пропадает. С тех пор касаюсь щупом ножек в месте их выхода из корпуса.
О какой конкретно ножке идет речь? Наблюдается ли подобная ситуация на других ножках?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
DASM
сообщение Nov 10 2007, 18:54
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Дурацкий совет-вопрос, но на ново компе даташита не открыть - а тактирование перефирии вообще включено ?
Go to the top of the page
 
+Quote Post
Aurochs
сообщение Nov 10 2007, 19:15
Сообщение #8


Ортодокс
***

Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775



Цитата(Leen @ Nov 10 2007, 20:21) *
А если так и сдклать? Понимаю, что это нехорошо, но все же? Ориентировать его как вход неиспользуемой периферии, да и все...


Вряд ли это приемлемо. К сожалению входных сигналов в проекте будет далеко не один и, как я понимаю для таких целей можно будет задействовать только входные периферийные линии.
Да и должен же быть способ решить эту проблему без жертв и разрушений... laughing.gif

Цитата(Сергей Борщ @ Nov 10 2007, 20:51) *
А попадает ли входной сигнал на эту ногу? Может банальный непропай? Была похожая ситуация - когда касаюсь ноги осциллографом она прижимается к дорожке и сигнал виден. Как только отпускаю - контакт пропадает. С тех пор касаюсь щупом ножек в месте их выхода из корпуса.
О какой конкретно ножке идет речь? Наблюдается ли подобная ситуация на других ножках?


Я же говорю, что когда перепрограммирую линию как периферийную, то линия читается нормально.

Цитата(DASM @ Nov 10 2007, 20:54) *
Дурацкий совет-вопрос, но на ново компе даташита не открыть - а тактирование перефирии вообще включено ?


Да вроде как включено. Может еще чего надо включить?
Go to the top of the page
 
+Quote Post
DASM
сообщение Nov 10 2007, 19:36
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Ну не знаю тогда.. может чего из серии глупых ошибок ? Например PCER |= 2 а не PCER |= (1 << 2) ?
Go to the top of the page
 
+Quote Post
Leen
сообщение Nov 11 2007, 00:54
Сообщение #10


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

Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343



Вот-вот.. Давно кому-нибудь пора произнести коронную фразу: код в студию!
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Nov 11 2007, 13:42
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



А на такую строку в errata обращали внимание???

41.2.4.3 PIO: Drive Low NRST, PA0-PA30 and PB0-PB26
When NRST or PA0 - PA30 or PB0 - PB26 are set as digital inputs with pull-up enabled, driving
the I/O with an output impedance higher than 500 ohms may not drive the I/O to a logical zero.
Problem Fix/Workaround
Output impedance must be lower than 500 ohms.
Go to the top of the page
 
+Quote Post
Aurochs
сообщение Nov 11 2007, 17:00
Сообщение #12


Ортодокс
***

Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775



Цитата(DmitryM @ Nov 11 2007, 15:42) *
А на такую строку в errata обращали внимание???

41.2.4.3 PIO: Drive Low NRST, PA0-PA30 and PB0-PB26
When NRST or PA0 - PA30 or PB0 - PB26 are set as digital inputs with pull-up enabled, driving
the I/O with an output impedance higher than 500 ohms may not drive the I/O to a logical zero.
Problem Fix/Workaround
Output impedance must be lower than 500 ohms.


Большое спасибо! a14.gif Несколько раз просматривал errata, но, как по закону подлости, этот абзац не заметил. Похоже, что именно в этом и кроется причина.
Я вообще-то программист и еще новичок в ARM, и полагал, что я просто неправильно программировал контроллер PIO. Буду разбираться с разработчиком платы.
Когда разберемся - обязательно доложу.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 11 2007, 21:06
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Aurochs @ Nov 11 2007, 19:00) *
Буду разбираться с разработчиком платы.
Попробуйте для начала просто выключить Pull-up. А я ведь предлагал убедиться, что сигнал таки доходит wink.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Aurochs
сообщение Nov 15 2007, 09:20
Сообщение #14


Ортодокс
***

Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775



Цитата(Сергей Борщ @ Nov 11 2007, 23:06) *
Попробуйте для начала просто выключить Pull-up. А я ведь предлагал убедиться, что сигнал таки доходит wink.gif


К сожалению, простое отключение режима pull-up не помогает.
Но проблема полностью решена изменением номиналов нагрузочных резисторов.

Спасибо всем участникам обсуждения!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 20:28
Рейтинг@Mail.ru


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