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

Помогите с программированием PICа

Добавлено: Сб сен 05, 2009 17:46:08
OOzzzz
Помогите начинающему разобраться с программированием пика.
написал прогу , при вкл. питания светодиод моргает с частотой около 0,5 с. при нажатии кнопы он должен начать моргать с частотой примерно 1 сек(почему примерно я циклы не подгонял точно), так вот вроде работает , нажимаю кнопу светодиод моргает медленнее , но один цикл , а потом начинает моргать с частотой 0,5 сек. И не могу найти где баг.
Самое интересное что в мп лабе все работает нормально.в

Re: Помогите с программированием PICа

Добавлено: Сб сен 05, 2009 18:52:58
uldemir
Программу стереть и написать заново. Или по крайней мере строчки

Код: Выделить всё

                BTFSS           PORTB,0         ;проверка замыкания кнопы
                GOTO            PP1             ;если замкнуто то переход в подпрограмму
вытащить из внутреннего цикла за пределы внешнего - это раз.
Второе, PP1 - это у тебя не подпрограмма. Или сделай подпрограмму, или
посмотри куда в конце ее ведет переход. Пока что получается, что этот кусок у тебя ничего не делает, поскольку после перехода на START твои значения снова затираются начальными значениями.
Это то что бросилось в глаза сразу. Внимательнее проводи отладку и со временем такие глупости делать не будешь.

Добавлено: Сб сен 05, 2009 20:15:27
dalay-lama
Как-то странно... Исходя из схемы кнопка к программе не имеет ни какого отношения. TRISA сброшен, т.е. все порты RA работают на выход. На кой тогда нужна кнопка на RA0? Зачем RB0 настроен на вход? Зачем Вы перечисляете регистры STATUS, TRIS, PORT, F... и т.д? Достаточно подключить в проект стандартный Header Files. Сделал набросок программки. При включении свд мигает каждые 0,5 сек. При нажатии и удержании кнопки свд мигает каждые 1 сек. При отпускании снова 0,5 сек. На Вашей схеме свд мигать не будет. Подключен неправильно. Остальное пробуйте сами.

Добавлено: Сб сен 05, 2009 23:22:16
OOzzzz
В схеме опечатка, там опрос кнопки происходит по RB0,
Почему указаны не используемые регистры ? потому что этот кусок я писал для другой проги.
И в тз я написал что смена частоты моргания должна сменяться при нажатии и отпускании кнопки.А не держать ее постоянно.
За первый пост спс, сейчас перепрошью и проверю.

Добавлено: Сб сен 05, 2009 23:41:30
dalay-lama
OOzzzz писал(а):В схеме опечатка, там опрос кнопки происходит по RB0.
В таком случае нет необходимости в установке доп. резистора 10 ком с RB0 на +Uпит. В программе подключите подтягивающие резисторы!
OOzzzz писал(а):Почему указаны не используемые регистры ? потому что этот кусок я писал для другой проги.
А причём здесь другая прога? Я написал о том, что дополнительное описание регистров м/к таких как STATUS, TRISх, PORTх, F... и т.д мартышкин труд. Все они есть в файле xxxxxx.inc. Достаточно его подключить в проект.
OOzzzz писал(а):в тз я написал что смена частоты моргания должна сменяться при нажатии и отпускании кнопки.А не держать ее постоянно.
Я не слепой. Видел. Поработайте немного своими мозгами. Если уж будет совсем непонятно, тогда все вопросы сюда...
Ещё раз: светодиод на схеме нарисован неверно.

Добавлено: Сб сен 05, 2009 23:43:50
OOzzzz
Вот исправил ошибки и опечатки в схеме, перепрошил и результат тот же.
При нажатии проходит один цикл и опять моргает с частотой 0,5 сек.
А в мп лабе нормально :(

Добавлено: Сб сен 05, 2009 23:55:49
OOzzzz
Согласен со светодиодом. но это не правильно нарисовал, а так он работает. Изменил схему.

Добавлено: Вс сен 06, 2009 07:56:10
uldemir
OOzzzz писал(а):Согласен со светодиодом. но это не правильно нарисовал, а так он работает. Изменил схему.
Гораздо логичнее теперь программа выглядит.
По поводу ТЗ: а так и задумано, чтобы кнопка опрашивалась ТОЛЬКО во время светящегося светодиода?

Добавлено: Вс сен 06, 2009 08:52:24
urry
да какое там, прости господи, техзадание.. лабораторная работа, наверное. Обработки кнопок так таковой нет, ну, мигать что-то будет..
преподу хватит.
Чуть поправил, а то прямо код глаза режет

Добавлено: Вс сен 06, 2009 09:31:25
uldemir
urry писал(а):Чуть поправил, а то прямо код глаза режет
Не совсем. Человек старательно опрос кнопки сует внутрь циклов паузы. Наверное, есть желание фиксировать факт срабатывания кнопки максимально оперативно. Хотя тогда не понятно, почему опрос размещен не внутри первого цикла, а во втором?
Если бы мне нужно было бы сделать такую хохму, я бы сделал исключительно на прерываниях. Мне лениво считать такты в циклах, а так сделал прерывание раз в 250мкс и наступит счастье. Если не нужно строго пол-секунды можно и с ватчдогом извратиться ;-)

Добавлено: Вс сен 06, 2009 21:39:45
OOzzzz
да какое там, прости господи, техзадание.. лабораторная работа, наверное. Обработки кнопок так таковой нет, ну, мигать что-то будет..
преподу хватит.

Это не лабораторная, я уже давно отучился. Просто раньше схемы паял на дискретных элементах, но это сейчас уже прошлый век, вот решил разбираться с рicами.

По поводу ТЗ: а так и задумано, чтобы кнопка опрашивалась ТОЛЬКО во время светящегося светодиода? нет так не задумано но я видел этот баг

На прерываниях пробовал, то же самое у меня получается :cry:
Скачал архив сейчас буду разбирать

Добавлено: Вс сен 06, 2009 23:18:29
OOzzzz
да какое там, прости господи, техзадание.. лабораторная работа, наверное. Обработки кнопок так таковой нет, ну, мигать что-то будет..
преподу хватит.
Чуть поправил, а то прямо код глаза режет
скачал. прошил результат тот же

Добавлено: Пн сен 07, 2009 03:24:38
nicolia
Последняя прога вроде должна работать как надо.
Если судить по предпоследней то задержка моргания 05 сек загружается
один раз В НАЧАЛЕ программы и больше никоим чудом не трогается. При первом нажатии на кнопу загружается 1 сек и больше ничего. Из сего следует что пик у вас сбрасывается либо вы прошиваете пик одной и тойже прогой.
сброс МК (если это не РОR) можно отловить если ввести ещё одну переменную (типа RCOUNT), на старте делать ей incf и выводить младший бит её на ещё один светодиод

Добавлено: Пн сен 07, 2009 09:57:00
urry
Может, проще сбросить собаку в процедуре временной задержки ?
Но, если это не лабораторная, то все сделано не так.
Процедура опроса кнопок - это отдельная задача, которая должна корректировать дребезг кнопки. Для этого она вызывается миллисекунд через 10 и при опросе модифицируется счетчик антидребезга - решение о том, что кнопка нажата или отжата, принимается по тому, сколько этот счетчик насчитал.
Временные задержки такой длительности - только через таймер! Иначе у Вас не останется времени ни на что другое.

Добавлено: Вт сен 08, 2009 10:02:53
OOzzzz
nicolia писал :
[/quote]Из сего следует что пик у вас сбрасывается либо вы прошиваете пик одной и тойже прогой.
сброс МК (если это не РОR) можно отловить если ввести ещё одну переменную (типа RCOUNT), на старте делать ей incf и выводить младший бит её на ещё один светодиод
Скорее всего сбрасывается, но почему, и как это отловить , можно поподробнее. На счет того что я не прошиваю, специально зашил другую прогу , там все работает, зашиваю эту . не работает, вернее работает но не правильно

Добавлено: Вт сен 08, 2009 17:33:01
urry
поскольку я не хочу быть голословным, то - как бы я сделал - присоединяю.
Единственное - на асме меня теперь под пистолетом программить не заставишь
- писал на хайтеке. Компилятор ожно скачать на моем ресурсе
- да простят меня модераторы за ссылку http://www.remexpert.com/ipb/ipb.html?a ... owfile=153
нужно после регистрации запостить пару сообщений - хоть в курилку, такое...

Добавлено: Чт сен 10, 2009 22:25:36
OOzzzz
urry ваш вариант прошил, работает почти стабильно , бывают глюки если удержать кнопку :)) , но я так и не понял чего моя прога не работает как нужно :cry:

Добавлено: Чт сен 10, 2009 23:02:13
OOzzzz
urry еще в твоей проге не выставлены биты конфигурации,я поставил cp-off, pwrte-on,wdte-off, xt.

Добавлено: Пт сен 11, 2009 09:24:15
urry
OOzzzz писал(а):но я так и не понял чего моя прога не работает как нужно :cry:
Перепишите алгоритм с учетом замечаний - не хотите на си, пишите на асме, но наверное, Вам нужно в раздел "для начинающих" ?

Добавлено: Сб сен 19, 2009 18:34:21
OOzzzz
Долго не писал инет был в отключке.
Вот переписал прогу, но результат такой же. проходит два такта и начинает моргать с частотой о,5 сек. Если держать кнопу то моргает с частотой 1 сек.
Файл асм прилагаю, где баги прячутся ?