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

 
 
 
Reply to this topicStart new topic
> Странное поведение таймера 1 в PIC16F876A, Поведение таймера меняется в зависимости от записи в PORTА
Rostislav
сообщение Apr 1 2011, 10:21
Сообщение #1


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

Группа: Участник
Сообщений: 127
Регистрация: 6-07-08
Из: Москва
Пользователь №: 38 765



Всем привет!

Помогите, пожалуйста, совсем весь извелся! Третий день бьюсь!

Суть проблемы: с закоментированной строкой №423 пик дергает ногой нормально, на выходе RA4 меандр. Как только раскоментирую строку, скважность начинает плясать.

Не пойму, какая здесь связь (таймер 0, порт RA4 и RA3 никак не связаны!), но влияние "на лице"?

Параметры: тактовая 20МГц, WDT выключен, питание стабильное 5В.

Спасибо за помощь!

Сообщение отредактировал Rostislav - Apr 1 2011, 11:32
Эскизы прикрепленных изображений
 Уменьшено до 51%
Прикрепленное изображение
354 x 276 (18.46 килобайт)
 
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Apr 1 2011, 10:47
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(Rostislav @ Apr 1 2011, 14:21) *
Суть проблемы: с закоментированной строкой №423 пик дергает ногой нормально, на выходе RA4 меандр. Как только раскоментирую строку, скважность начинает плясать.

Фрагмент маленький, не очень понятный. Но тем не менее первое, что приходит на ум - а это точно PORTA ? Биты банков стоят правильно ? Ну и второе - битовые манипуляции с "PORT" - они ведь не только с указанным битом работают, а с всем портом, чтение-модификация-запись. А что там на porta.4, если его прочитать ? Если туда выведена "1", это вовсе не означает, что прочитана будет "1"...
Go to the top of the page
 
+Quote Post
Rostislav
сообщение Apr 1 2011, 11:28
Сообщение #3


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

Группа: Участник
Сообщений: 127
Регистрация: 6-07-08
Из: Москва
Пользователь №: 38 765



Цитата(rx3apf @ Apr 1 2011, 14:47) *
Фрагмент маленький, не очень понятный. Но тем не менее первое, что приходит на ум - а это точно PORTA ? Биты банков стоят правильно ? Ну и второе - битовые манипуляции с "PORT" - они ведь не только с указанным битом работают, а с всем портом, чтение-модификация-запись. А что там на porta.4, если его прочитать ? Если туда выведена "1", это вовсе не означает, что прочитана будет "1"...


Маленький, но достаточный, тем более, что программа пока крутится только в этом диапазоне команд. Здесь все просто: по флагу состояния таймера 0 меняю состояние линии RA4 порта A. Биты банков здесь трогать нет необходимости. Ну то, что это PORTA, это точно! Ведь с закоментированной строкой (т.е. при отсутствии изменения состояния линии порта RA3) все нормально! Кстати, в симуляторе изменение состояния линии RA3 НИ СКОЛЬКО не влияет на сигнал на линии RA4! RA4 я не читаю, а ТОЛЬКО записываю.

Забавно, но установка линии порта RA0 в 0 (т.е. если строка №423 будет выглядеть так: bcf PORTA,0) вообще запрещает изменение сигнала на RA4. Что-то я вообще в ступоре! wacko.gif Карау-у-у-л-.....

Сообщение отредактировал Rostislav - Apr 1 2011, 11:33
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Apr 1 2011, 11:29
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(Rostislav @ Apr 1 2011, 15:16) *
RA4 я не читаю, а ТОЛЬКО записываю.

Еще раз - команда bcf/bsf не записывает значение бита в порт ! Она читает весь порт, модифицирует бит и затем записывает все содержимое порта. А поскольку ra.4 вообще OC, то, если там нет внешней подтяжки, то и прочитанное значение будет "0", даже если в PORTA.4 было явно записано "1". И после любой операции с PORTA, даже вроде бы не затрагивающей бит 4, он обнулится.
Go to the top of the page
 
+Quote Post
Rostislav
сообщение Apr 1 2011, 11:48
Сообщение #5


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

Группа: Участник
Сообщений: 127
Регистрация: 6-07-08
Из: Москва
Пользователь №: 38 765



Цитата(rx3apf @ Apr 1 2011, 15:29) *
Еще раз - команда bcf/bsf не записывает значение бита в порт ! Она читает весь порт, модифицирует бит и затем записывает все содержимое порта. А поскольку ra.4 вообще OC, то, если там нет внешней подтяжки, то и прочитанное значение будет "0", даже если в PORTA.4 было явно записано "1". И после любой операции с PORTA, даже вроде бы не затрагивающей бит 4, он обнулится.


Про OPEN DRAIN я знаю, резистор подтяжки есть (1 кОм на +5В). Линия порта подключена к npn транзистору (к его базе, а эмиттер на землю).

Я правильно Вас понимаю, что переход транзистора база-эмиттер шунтирует линию RA4 и в момент изменения состояния любой другой линии с линии RA4 считывается логический 0 (так как напряжение в момент чтения RA4 на линии составляет порядка 0.7В) и тутже записывается в защелку? Если это так, то как выход из положения подключить транзистор к другой линии через токоограничивающий резистор.

Сообщение отредактировал Rostislav - Apr 1 2011, 12:31
Go to the top of the page
 
+Quote Post
O.L.
сообщение Apr 1 2011, 12:41
Сообщение #6


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

Группа: Свой
Сообщений: 96
Регистрация: 10-06-05
Из: Новосибирск
Пользователь №: 5 890



Цитата(Rostislav @ Apr 1 2011, 18:48) *
Если это так, то как выход и положения подключить транзистор к другой линии через токоограничивающий резистор.

Операция READ_MODIFY_WRITE над портом ввода/вывода является причиной "пляски".

Можно решить эту проблему не перекидывая выводы порта.

В начале программы , сразу после инициализации, записываем в сам порт, временный регистр вывода порта и tris нужные значения.
Код
    BANKSEL  PORTA
    movlw    INIT_PORTA
    movwf    cTemp_PORTA
    movwf    PORTA
    BANKSEL  TRISA
    movlw    INIT_TRISA
    movwf    TRISA


В программе всегда организуем вывод через временный регистр порта.
Код
    BANKSEL  PORTA
    bcf      cTemp_GPIO,bLed    ; Led ON!
    movf     cTemp_GPIO,w
    movwf    PORTA

Go to the top of the page
 
+Quote Post
Rostislav
сообщение Apr 1 2011, 13:15
Сообщение #7


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

Группа: Участник
Сообщений: 127
Регистрация: 6-07-08
Из: Москва
Пользователь №: 38 765



Цитата(O.L. @ Apr 1 2011, 16:41) *
Операция READ_MODIFY_WRITE над портом ввода/вывода является причиной "пляски".


Спасибо, кажется, именно в этом и было дело! Всем спасибо, тема закрыта!
Go to the top of the page
 
+Quote Post

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

 


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


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