Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

непонятное зависание PIC16F84A

Пт ноя 11, 2016 18:29:45

Добрый день прошу помочь разобраться с проблемой, может кто-нибудь сталкивался с подобным... Собрал намоточный станок, на двух шаговиках, рулит всем PIC16F84A все работает, но через некоторое время(всегда разное) тухнет индикация и периодически(зависимость тоже не выявил) виснет работа моторов на произвольное время, потом опять начинает работать(виснет всегда после срабатывания прерывания счетчика витков) Все "глюки" хаотичны могут проявиться за цикл намотки, а могут и нет( не могу понять из-за чего они возникают, сменил три микросхемы, и пробовал менять дисплеи не помогает(((
Описание:
контролер выдает сигналы на дисплей по трем пинам(4 восьмерки, китайская сборка 4-bit led didgital tube module) и на двигатели с драйверами(в другом станке они отлично работали)
на валу стоит прерыватель и через оптопару делает прерывание по ноге INT(RB0) в прерывании считаются витки и направление укладки провода.
параметры намотки вводятся через самодельную клавиатуру(порты опрашиваются без прерываний), WDT отключен, SLIP не использую.
ну в кратце вроде-бы все, при вводе параметров все работает отлично, глюки возникают только в процессе намотки.
P.S. код большой, если надо выложу, писал в MPLab на ассемблере, заливал через К-150.

Re: непонятное зависание PIC16F84A

Пт ноя 11, 2016 19:29:30

Для того чтобы вам помочь необходима: схема(хоть начерченная на клочке бумаги) и ваш ассемблерный код. Чем больше вы представите информации тем больше народу откликнется, здесь форум радиолюбителей а не экстрасенсов :)

Re: непонятное зависание PIC16F84A

Пт ноя 11, 2016 20:22:31

Пробую шаманить,перед уходом в прерывания,условия выполнены STATUS и W сохранили?

Re: непонятное зависание PIC16F84A

Пт ноя 11, 2016 20:56:04

W и STATUS перед использованием обнуляю, прикрепляю код, схема простая питание через LM7805 и кондер на 10мкф с общего импульсника на 24 вольта все порты на прямую,кварц на 4 мГц и кондеры к нему на 15пф,(была мысль, что частота на пределе, пробовал заливать на 20мГц микруху, не помогло(() на RA4 подтягивающий резистор на 100кОм к +5, на RB0 оптопара подтягивает минус при прерывании "луча" клавиатура к портам RB4-RB7 через диоды(формирую двоичный код, чтобы все кнопки влезли) к RB2 подтягивающий резистор 47кОм к +5 и выключатель на минус(выключатель паузы) RA0-RA2 на дисплей, RA3- шаг первого двигателя(к драйверу) RA4-шаг второго двигателя(к драйверу) RB3- направление вращения второго двигателя(к драйверу) и переключатель на минус с подтяжкой на +5 к драйверу (меняет вращение намотки) я ее даже не рисовал, печатку нарисовал и так собрал. RB1 планировалось на концевик нулевого положения или на натяжку проволки, но пока не задействован и не подключен.
P.S. код замороченый и коментов мало, если что-то непонятно, могу пояснить..
Вначале грешил на наводки, поменял блок питания на более мощный и заземлил весь станок и минус питания, не помогло(((
P.S.1 Насчет статуса и аккума это идея, если прерывание сработает где он использовался, тогда могут быть глюки... согласен, спасибо, об этом не подумал, исправлю.
Вложения
ind_new.asm
последняя версия, до этого помоему старую скинул по ошибке...
(24.07 KiB) Скачиваний: 275
ind.asm
код намоточного станка
(23.49 KiB) Скачиваний: 252

Re: непонятное зависание PIC16F84A

Пт ноя 11, 2016 21:28:50

Сохраните аккумулятор и регистр Status:
org 0x004
movwf w_temp
swapf STATUS,W
banksel PORTA
movwf s_temp



int_out
swapf s_temp,W
movfw STATUS
movfw w_temp
retfie

Re: непонятное зависание PIC16F84A

Пт ноя 11, 2016 21:32:40

какие-то страшные команды, а так можно?
org 0x04
movwf w1
movf STATUS,0
movwf st

....
....
....
movf st,0
movwf STATUS
movf w1,0
RETFIE

завтра попробую залить.

Re: непонятное зависание PIC16F84A

Пт ноя 11, 2016 21:46:34

Команда SWAP не изменяет флаги регистра STATUS. Плюс - данный код есть напутствие производителя из англоязычного datasheet...
Можно, но когда немного понимаешь английский проще "говорить"
move (переместить) W (w) в регистр F
или
move регистр F в аккумулятор W

Re: непонятное зависание PIC16F84A

Пт ноя 11, 2016 21:55:05

MOVWF, BCF, BSF тоже не меняют, а вот MOVF меняет при нулевом результате.... а SWAPF меняет местами биты, со SWAPF согласен, а что за команда banksel, чтото у меня нету ее описания((( ?

Re: непонятное зависание PIC16F84A

Пт ноя 11, 2016 21:57:58

Это макрос выбора нулевого банка. Он был мне нужен в данном прерывании. Просто "влез" при копировании. Просто выкиньте эту строчку из своего кода.

Re: непонятное зависание PIC16F84A

Пт ноя 11, 2016 22:12:07

ок, спасибо))

Добавлено after 10 minutes 56 seconds:
тогда по логике, у вас в коде есть небольшая неточность

org 0x004
movwf w_temp
swapf STATUS,W
banksel PORTA
movwf s_temp



int_out
swapf s_temp,W
movfw STATUS
movfw w_temp - после выполнения этой команды, при w_temp=0 изменится флаг Z в STATUS, тут помоему тоже через swapf надо
делать, как-то так:

org 0x04 ;обработка прерываний
bcf INTCON,7 ;запрет прерываний

movwf w1
swapf STATUS,0
movwf st
...
...
swapf st,0
movwf STATUS
swapf w1,1
swapf w1,0
retfie


или я ошибаюсь?

Re: непонятное зависание PIC16F84A

Пт ноя 11, 2016 22:30:11

Точно! Моя ошибка и недосмотр. Сейчас пересмотрел доку и увидел.

Re: непонятное зависание PIC16F84A

Пт ноя 11, 2016 22:32:01

:) ну тогда все логично, должно сработать) завтра залью, проверю и сообщу о результате.
Всем спасибо за поддержку.

Re: непонятное зависание PIC16F84A

Сб ноя 12, 2016 06:01:26

При входе в прерывание не нужно его запрещать, это и так делается самим контроллером. И при выходе не нужно разрешать, т.к. именно это и делает команда retfie.
Сохранение статуса и аккумулятора расписано в ДШ на МК на странице 32.

Re: непонятное зависание PIC16F84A

Сб ноя 12, 2016 10:11:38

спасибо за совет, где-то я читал, что лучше сделать( У меня это только вторая программа для пика, поэтому не судите строго.. Залил, все отлично работает спасибо доктору и шаману))) Еще вопрос немного не в тему: какое значение будет у переменной x,
при х=0 и команде
decf x,1

и какое при х=255 и
incf x,1

и измениться ли при этом флаги в статусе?
нигде не могу найти полного описания при таких случаях((

Re: непонятное зависание PIC16F84A

Сб ноя 12, 2016 11:39:53

В описание команд есть колонка, в которой указано на какие флаги влияет та или иная команда. Конкретно эти две команды INCF и DECF, влияют только на флаг Z (флаг нулевого результат) регистра STATUS.
INCF X (255), то произойдет переполнения данного регистра и его содержимое станет равным нулю, что приведет к поднятию флага Z = 1, так как результат операции стал равным нулю.
DECF X (1), приведет к тому же самому, а именно флаг Z = 1, так как в результате уменьшения, значения регистра X стало равным нулю.
Последний раз редактировалось Core-X Сб ноя 12, 2016 13:07:29, всего редактировалось 1 раз.

Re: непонятное зависание PIC16F84A

Сб ноя 12, 2016 11:54:50

спасибо, непонятно только при decf x(0) х-будет равным 0 или изменится на 255 ?

Re: непонятное зависание PIC16F84A

Сб ноя 12, 2016 12:06:58

Да, при DECF X (0) = результат операции будет равен 255

Re: непонятное зависание PIC16F84A

Сб ноя 12, 2016 12:10:21

вот теперь все понятно, большое спасибо.

Re: непонятное зависание PIC16F84A

Сб ноя 12, 2016 12:49:08

prizrack* писал(а):спасибо за совет, где-то я читал, что лучше сделать

Либо неправильно прочли, либо советчик был не из тех, кого стоит слушать.

Что касается вопросов про флаги, все это, как уже было сказано, имеется в документации на контроллер. Это и в таблице команд, и в подробном описании по каждой команде. Всегда лучше сперва читать официальную документацию, а потом уже слушать или не слушать чьи-то советы.

Re: непонятное зависание PIC16F84A

Сб ноя 12, 2016 12:58:35

Всегда лучше сперва читать официальную документацию
Правильно! Даже если не знаешь английского, лучше читать оригинал, пусть и с помощью переводчика. Я начинал учить PIC по "Карабельникову", перешел на "переведенные" datasheet... А в итоге очень понравилось читать оригиналы на Atmel, STM и тот же PIC.
Ответить