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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
xapgkopster
Родился
Сообщения: 4
Зарегистрирован: Сб апр 07, 2012 21:12:02

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

Сообщение xapgkopster »

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

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

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

микроконтроллер PIC16F876A
Что выдает отладчик и как по идее должно подаваться питание на матрицу:
СпойлерИзображение
Реклама
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

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

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

Сообщение xapgkopster »

А у меня запись и происходит целиком в порт (строки 135-340):


Сорцы ASM
Сорцы в виде картинки (~600 kb)
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

приложите в виде асм файла, нечитабельно абсолютно.
Реклама
Эиком - электронные компоненты и радиодетали
xapgkopster
Родился
Сообщения: 4
Зарегистрирован: Сб апр 07, 2012 21:12:02

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

Сообщение xapgkopster »

                                            
Вложения
main.asm
(5.77 КБ) 247 скачиваний
Реклама
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

ну а дерганье B4 в прерывании по таймеру ? Кстати, оно тоже неправильно написано - контекст сохраняется по другому, не проводится анализ на источник прерывания.
И дальше - нет необходимости героически помнить в каком банке что находится и в этих макросах переключения банков,
когда есть директива BANKSEL.
http://www.pic24.ru/doku.php/osa/articl ... formatting есть пример правильно написанной программы.
Подкорректируйте.
Реклама
xapgkopster
Родился
Сообщения: 4
Зарегистрирован: Сб апр 07, 2012 21:12:02

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

Сообщение xapgkopster »

Я начинающий, поэтому код кривоват (:
А не проводится анализ на источник прерывания, потому что он у меня один - TMR0

За мануалы спасибо, буду изучать как оформлять программы, может тогда ошибку и обнаружу
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

Спасибо не мне, а tester - у.
Я 100 лет уже на асме не пишу. но код глаза режет конкретно. Начать нужно с его полной переделки.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»