Страница 1 из 1

Программа контроллера выполняется корректно через раз

Добавлено: Сб апр 07, 2012 21:13:42
xapgkopster
Здравствуйте. Возникла проблема.
Моя схемка состоит в том, что есть матрица светодиодов 4х4, подключенная через транзисторы (чтобы не сжечь ноги контроллера).
Соответственно ось Х подключена к выводам RA0-RA3, ось Y подключена к выводам RB0-RB3.
Программный код выглядит примерно так (только у меня на ассемблере):
Изображение

В отладчике значения PORTA, PORTB переключаются как надо, но вот в настоящей схеме работает через раз. Когда работает неправильно, зажигаются рандомные светодиоды, иногда одновременно, также начинает подаваться напряжение на те порты, к которым подключены другие, нематричные светодиоды, но по программному коду, на них высокий логический уровень не подается.

Подскажите, пожалуйста, может кто сталкивался с такой проблемой

микроконтроллер PIC16F876A
Что выдает отладчик и как по идее должно подаваться питание на матрицу:
СпойлерИзображение

Re: Программа контроллера выполняется корректно через раз

Добавлено: Сб апр 07, 2012 21:53:32
urry
наверное, это проблема с RWM
не пишите непосредственно в порт, меняйте биты в промежуточном регистре, а уже его выдавайте целиком в порт.
http://www.microchip.su/showthread.php? ... hlight=rmw
Проблема исправлена в семействах 18 и выше добавлением регистра LAT, а также в 16f1xxx

Re: Программа контроллера выполняется корректно через раз

Добавлено: Сб апр 07, 2012 22:06:29
xapgkopster
А у меня запись и происходит целиком в порт (строки 135-340):


Сорцы ASM
Сорцы в виде картинки (~600 kb)

Re: Программа контроллера выполняется корректно через раз

Добавлено: Сб апр 07, 2012 22:11:24
urry
приложите в виде асм файла, нечитабельно абсолютно.

Re: Программа контроллера выполняется корректно через раз

Добавлено: Сб апр 07, 2012 22:16:17
xapgkopster
                                            

Re: Программа контроллера выполняется корректно через раз

Добавлено: Сб апр 07, 2012 22:35:29
urry
ну а дерганье B4 в прерывании по таймеру ? Кстати, оно тоже неправильно написано - контекст сохраняется по другому, не проводится анализ на источник прерывания.
И дальше - нет необходимости героически помнить в каком банке что находится и в этих макросах переключения банков,
когда есть директива BANKSEL.
http://www.pic24.ru/doku.php/osa/articl ... formatting есть пример правильно написанной программы.
Подкорректируйте.

Re: Программа контроллера выполняется корректно через раз

Добавлено: Сб апр 07, 2012 22:48:26
xapgkopster
Я начинающий, поэтому код кривоват (:
А не проводится анализ на источник прерывания, потому что он у меня один - TMR0

За мануалы спасибо, буду изучать как оформлять программы, может тогда ошибку и обнаружу

Re: Программа контроллера выполняется корректно через раз

Добавлено: Сб апр 07, 2012 22:55:00
urry
Спасибо не мне, а tester - у.
Я 100 лет уже на асме не пишу. но код глаза режет конкретно. Начать нужно с его полной переделки.