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

 
 
> Странное поведение портов!, Мега32 - что может быть???
Sergio66
сообщение May 16 2006, 13:34
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Такая ситуация - Мега32, частота 16М, порт В - подключен LCD (2x16), причем по четырехпроводной схеме. Работают старшие линии РВ(7,6,5,4). При обращении к дисплею, на младшие линии выдаются нули. Обращение к дисплею происходит в основном цикле программы.
Далее, к порту В также подключено устройство, имеющее 4 выходных линии, на которых присутствует поочередно "1" на каждой линии. Состояние, когда все 4 линии "0" исключено. Опрос этих линий происходит по прерыванию (1 раз в 20 мс).
Программа обработки прерывания считывает состояние регистра DDRB, переводит младшие линии порта В на прием, считывает состояние порта В (PINB), возвращает DDRB в исходное состояние, и передает управление основному телу программы.
И все бы ничего, если бы не ситуация - если прерывание возникает в период работы функции вывода данных на дисплей (т.е. когда на младшие линии подаются "0"), то в прерывании считываются именно "0"!!!
После переключения линий порта В на прием, делаю паузу (до 10 мксек), ничего не меняется. Т.о., это не паразитные емкости.
А вот если перед переключением порта на прием, выдать на младшие линии порта "1", то все становится на свои места - данные считываются нормально.
Помогите разобраться в чем дело...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_artem_
сообщение May 19 2006, 11:55
Сообщение #2


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Sergio66, можно ли сделать так :
- прямо в ISR устройства проверить на состояние "все нули" и если да то получить содержимое памяти по адресу SP + 2 (стек), и выдать его на какое то устройство (уарт или чтото в этом вроде)
- откомпилировать программу без оптимизации и получить ассеемблерный листинг вперемешку с C кодом
- и все это выставить здесь (можно лишь кусок программы ) с указанием адреса откуда программа прервалась.


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
Sergio66
сообщение May 19 2006, 12:13
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Цитата(_artem_ @ May 19 2006, 15:55) *
Sergio66, можно ли сделать так :
- прямо в ISR устройства проверить на состояние "все нули" и если да то получить содержимое памяти по адресу SP + 2 (стек), и выдать его на какое то устройство (уарт или чтото в этом вроде)
- откомпилировать программу без оптимизации и получить ассеемблерный листинг вперемешку с C кодом
- и все это выставить здесь (можно лишь кусок программы ) с указанием адреса откуда программа прервалась.


Все это наверное можно проделать. Но хотелось бы разобраться в чем дело. Вот еще такой эксперимент - все ноги РВ притянул к массе через 5,6 К. Обставил вывод на дисплей запретами прерываний. Теперь прерывание не влезает в процесс работы с дисплеем. Передаю в дисплей только "0", при этом дополнительное устройство работает и на одной из 4 его линий постоянно присутствует "1". Линия РВ4 - общая у дисплея и доп. устр. На нее я выдаю "0". И вот, что интересно, когда в отладчике программа останавливается при чтении из порта РВ4 "0", то AVRSTUDIO мне верно показывает наличие "1" на линии РВ4. Т.е. те сигналы, которые генерит доп. устройство на линии РВ0,1,3 читаются нормально, а вот РВ4, куда я выдал "0", читается как "0", хотя доп. устройство выдало туда "1". А отладчик показывает верно - наличие "1".
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Sergio66   Странное поведение портов!   May 16 2006, 13:34
- - _artem_   Приведенная вами ситуация может быть когда вы чита...   May 16 2006, 13:53
|- - Sergio66   Цитата(_artem_ @ May 16 2006, 17:53) Прив...   May 16 2006, 13:58
|- - WHALE   а читаете через PINB?   May 16 2006, 14:01
|- - Sergio66   Цитата(WHALE @ May 16 2006, 18:01) а чита...   May 16 2006, 14:04
- - _artem_   Единственное не понимаю - устройство у вас которое...   May 16 2006, 14:12
|- - Sergio66   Цитата(_artem_ @ May 16 2006, 18:12) Един...   May 16 2006, 14:25
|- - defunct   Цитата(Sergio66 @ May 16 2006, 17:25) Есл...   May 16 2006, 14:37
||- - Sergio66   Цитата(defunct @ May 16 2006, 18:37) Цита...   May 16 2006, 14:59
||- - defunct   Цитата(Sergio66 @ May 16 2006, 17:59) Есл...   May 16 2006, 15:18
||- - Sergio66   Цитата(defunct @ May 16 2006, 19:18) Цита...   May 16 2006, 15:34
||- - Sergio66   Да, есть один нюанс, я его упустил для упрощения о...   May 16 2006, 15:45
||- - defunct   Цитата(Sergio66 @ May 16 2006, 18:45) Да,...   May 16 2006, 15:59
|- - OlegIvanov   [/quote] Что касается выдачи данных, то для того,...   May 16 2006, 23:06
- - _artem_   навесте пулап резисторы - 1 ком вместо устройства ...   May 16 2006, 14:33
|- - Sergio66   Цитата(_artem_ @ May 16 2006, 18:33) наве...   May 16 2006, 14:44
- - Laksus   Доп. устройство итак подвешено через пулап резисто...   May 16 2006, 18:06
- - WHALE   Насколько я помню протокол,последней операцией зап...   May 16 2006, 18:14
- - _artem_   Я Вас может быть неправильно понял но не могу инте...   May 16 2006, 18:58
|- - defunct   Цитата(_artem_ @ May 16 2006, 21:58) Я Ва...   May 16 2006, 20:05
|- - Sergio66   Цитата(_artem_ @ May 16 2006, 22:58) Я Ва...   May 17 2006, 05:54
- - _artem_   Мне это так не кажется - передача тетрады для порт...   May 16 2006, 21:23
|- - Sergio66   Цитата(_artem_ @ May 17 2006, 01:23) Мне ...   May 17 2006, 06:40
- - _artem_   Можно отрассировать по выходу из обработчика преры...   May 17 2006, 10:06
|- - Sergio66   Цитата(_artem_ @ May 17 2006, 14:06) Можн...   May 17 2006, 10:35
|- - otrog   В общем так: Самый простой выход из ситуации это, ...   May 17 2006, 11:54
|- - Sergio66   Я только что проделал такой эксперимент - я отключ...   May 17 2006, 15:35
|- - defunct   Цитата(Sergio66 @ May 17 2006, 18:35) Я т...   May 17 2006, 15:49
|- - Sergio66   Цитата(defunct @ May 17 2006, 19:49) Цита...   May 19 2006, 09:22
|- - OlegIvanov   Цитата(Sergio66 @ May 19 2006, 12:22) Цит...   May 19 2006, 15:50
|- - Sergio66   [/quote] Вам все толком говорят. Вы же сами выбра...   May 19 2006, 17:26
|- - defunct   Цитата(Sergio66 @ May 19 2006, 20:26) If ...   May 19 2006, 20:16
- - _artem_   Вложенные прерывания разрешены ? Конкретно знаете ...   May 17 2006, 11:27
- - Laksus   После переключения линий порта В на прием, делаю п...   May 17 2006, 16:30
|- - Sergio66   Цитата(_artem_ @ May 19 2006, 15:55) Serg...   May 19 2006, 12:46
|- - Sergio66   Вот такой кусок кода - while (1) { DDRB = 0xf0;...   May 19 2006, 13:20
- - Sergio66   Все чудо в том, что отладчик видит "1" н...   May 19 2006, 12:32
- - _artem_   Может у вас с портом неполадки? Можно будет вывод...   May 19 2006, 13:34
- - _artem_   Sergio66, Можно поменять пин ПБ4 на какой нибудь д...   May 19 2006, 22:48
|- - SasaVitebsk   Применение развязки на резисторах мягко говоря нек...   May 20 2006, 00:05
- - _artem_   атмега 32 может давать до десяти миллиампер на вых...   May 20 2006, 03:45
|- - Sergio66   Цитата(_artem_ @ May 20 2006, 07:45) атме...   May 20 2006, 11:05
- - _artem_   Mozno postavit 1 kOm i poprobovat? Vi tak i ne soo...   May 20 2006, 12:14
|- - Sergio66   Цитата(_artem_ @ May 20 2006, 16:14) Mozn...   May 20 2006, 12:21
|- - SasaVitebsk   Ребята, можно делать всё!!! Можно брит...   May 20 2006, 21:53
- - _artem_   Почему впустую ? Любой мысленный процесс это физку...   May 20 2006, 22:08
- - defunct   Цитата(_artem_ @ May 21 2006, 01:08) Поче...   May 20 2006, 22:24
- - Sergio66   Цитата(defunct @ May 21 2006, 02:24) Цита...   May 21 2006, 07:49
- - CDT   Приветствую, Господа! Делал я штуку, в которо...   Jun 2 2006, 13:15


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

 


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


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