Заголовок сообщения: Помогите с программированием PICа
Добавлено: Сб сен 05, 2009 17:46:08
Открыл глаза
Зарегистрирован: Сб сен 05, 2009 16:21:14 Сообщений: 57 Откуда: Украина
Рейтинг сообщения:0
Помогите начинающему разобраться с программированием пика.
написал прогу , при вкл. питания светодиод моргает с частотой около 0,5 с. при нажатии кнопы он должен начать моргать с частотой примерно 1 сек(почему примерно я циклы не подгонял точно), так вот вроде работает , нажимаю кнопу светодиод моргает медленнее , но один цикл , а потом начинает моргать с частотой 0,5 сек. И не могу найти где баг.
Самое интересное что в мп лабе все работает нормально.в
Программу стереть и написать заново. Или по крайней мере строчки
Код:
BTFSS PORTB,0 ;проверка замыкания кнопы GOTO PP1 ;если замкнуто то переход в подпрограмму
вытащить из внутреннего цикла за пределы внешнего - это раз.
Второе, PP1 - это у тебя не подпрограмма. Или сделай подпрограмму, или
посмотри куда в конце ее ведет переход. Пока что получается, что этот кусок у тебя ничего не делает, поскольку после перехода на START твои значения снова затираются начальными значениями.
Это то что бросилось в глаза сразу. Внимательнее проводи отладку и со временем такие глупости делать не будешь.
Как-то странно... Исходя из схемы кнопка к программе не имеет ни какого отношения. TRISA сброшен, т.е. все порты RA работают на выход. На кой тогда нужна кнопка на RA0? Зачем RB0 настроен на вход? Зачем Вы перечисляете регистры STATUS, TRIS, PORT, F... и т.д? Достаточно подключить в проект стандартный Header Files. Сделал набросок программки. При включении свд мигает каждые 0,5 сек. При нажатии и удержании кнопки свд мигает каждые 1 сек. При отпускании снова 0,5 сек. На Вашей схеме свд мигать не будет. Подключен неправильно. Остальное пробуйте сами.
Зарегистрирован: Сб сен 05, 2009 16:21:14 Сообщений: 57 Откуда: Украина
Рейтинг сообщения:0
В схеме опечатка, там опрос кнопки происходит по RB0,
Почему указаны не используемые регистры ? потому что этот кусок я писал для другой проги.
И в тз я написал что смена частоты моргания должна сменяться при нажатии и отпускании кнопки.А не держать ее постоянно.
За первый пост спс, сейчас перепрошью и проверю.
В схеме опечатка, там опрос кнопки происходит по RB0.
В таком случае нет необходимости в установке доп. резистора 10 ком с RB0 на +Uпит. В программе подключите подтягивающие резисторы!
OOzzzz писал(а):
Почему указаны не используемые регистры ? потому что этот кусок я писал для другой проги.
А причём здесь другая прога? Я написал о том, что дополнительное описание регистров м/к таких как STATUS, TRISх, PORTх, F... и т.д мартышкин труд. Все они есть в файле xxxxxx.inc. Достаточно его подключить в проект.
OOzzzz писал(а):
в тз я написал что смена частоты моргания должна сменяться при нажатии и отпускании кнопки.А не держать ее постоянно.
Я не слепой. Видел. Поработайте немного своими мозгами. Если уж будет совсем непонятно, тогда все вопросы сюда...
Ещё раз: светодиод на схеме нарисован неверно.
_________________ Важнейшая задача цивилизации - научить человека мыслить. /Т. Эдисон/
Зарегистрирован: Сб сен 05, 2009 16:21:14 Сообщений: 57 Откуда: Украина
Рейтинг сообщения:0
Вот исправил ошибки и опечатки в схеме, перепрошил и результат тот же.
При нажатии проходит один цикл и опять моргает с частотой 0,5 сек.
А в мп лабе нормально
да какое там, прости господи, техзадание.. лабораторная работа, наверное. Обработки кнопок так таковой нет, ну, мигать что-то будет..
преподу хватит.
Чуть поправил, а то прямо код глаза режет
Не совсем. Человек старательно опрос кнопки сует внутрь циклов паузы. Наверное, есть желание фиксировать факт срабатывания кнопки максимально оперативно. Хотя тогда не понятно, почему опрос размещен не внутри первого цикла, а во втором?
Если бы мне нужно было бы сделать такую хохму, я бы сделал исключительно на прерываниях. Мне лениво считать такты в циклах, а так сделал прерывание раз в 250мкс и наступит счастье. Если не нужно строго пол-секунды можно и с ватчдогом извратиться ;-)
Зарегистрирован: Сб сен 05, 2009 16:21:14 Сообщений: 57 Откуда: Украина
Рейтинг сообщения:0
да какое там, прости господи, техзадание.. лабораторная работа, наверное. Обработки кнопок так таковой нет, ну, мигать что-то будет..
преподу хватит.
Это не лабораторная, я уже давно отучился. Просто раньше схемы паял на дискретных элементах, но это сейчас уже прошлый век, вот решил разбираться с рicами.
По поводу ТЗ: а так и задумано, чтобы кнопка опрашивалась ТОЛЬКО во время светящегося светодиода? нет так не задумано но я видел этот баг
На прерываниях пробовал, то же самое у меня получается Скачал архив сейчас буду разбирать
Зарегистрирован: Сб сен 05, 2009 16:21:14 Сообщений: 57 Откуда: Украина
Рейтинг сообщения:0
Цитата:
да какое там, прости господи, техзадание.. лабораторная работа, наверное. Обработки кнопок так таковой нет, ну, мигать что-то будет.. преподу хватит. Чуть поправил, а то прямо код глаза режет
Зарегистрирован: Пн сен 07, 2009 02:21:07 Сообщений: 10 Откуда: Украина
Рейтинг сообщения:0
Последняя прога вроде должна работать как надо.
Если судить по предпоследней то задержка моргания 05 сек загружается
один раз В НАЧАЛЕ программы и больше никоим чудом не трогается. При первом нажатии на кнопу загружается 1 сек и больше ничего. Из сего следует что пик у вас сбрасывается либо вы прошиваете пик одной и тойже прогой.
сброс МК (если это не РОR) можно отловить если ввести ещё одну переменную (типа RCOUNT), на старте делать ей incf и выводить младший бит её на ещё один светодиод
Может, проще сбросить собаку в процедуре временной задержки ?
Но, если это не лабораторная, то все сделано не так.
Процедура опроса кнопок - это отдельная задача, которая должна корректировать дребезг кнопки. Для этого она вызывается миллисекунд через 10 и при опросе модифицируется счетчик антидребезга - решение о том, что кнопка нажата или отжата, принимается по тому, сколько этот счетчик насчитал.
Временные задержки такой длительности - только через таймер! Иначе у Вас не останется времени ни на что другое.
Зарегистрирован: Сб сен 05, 2009 16:21:14 Сообщений: 57 Откуда: Украина
Рейтинг сообщения:0
nicolia писал :
[/quote]Из сего следует что пик у вас сбрасывается либо вы прошиваете пик одной и тойже прогой.
сброс МК (если это не РОR) можно отловить если ввести ещё одну переменную (типа RCOUNT), на старте делать ей incf и выводить младший бит её на ещё один светодиод
Цитата:
Скорее всего сбрасывается, но почему, и как это отловить , можно поподробнее. На счет того что я не прошиваю, специально зашил другую прогу , там все работает, зашиваю эту . не работает, вернее работает но не правильно
поскольку я не хочу быть голословным, то - как бы я сделал - присоединяю.
Единственное - на асме меня теперь под пистолетом программить не заставишь
- писал на хайтеке. Компилятор ожно скачать на моем ресурсе
- да простят меня модераторы за ссылку http://www.remexpert.com/ipb/ipb.html?a ... owfile=153 нужно после регистрации запостить пару сообщений - хоть в курилку, такое...
Зарегистрирован: Сб сен 05, 2009 16:21:14 Сообщений: 57 Откуда: Украина
Рейтинг сообщения:0
Долго не писал инет был в отключке.
Вот переписал прогу, но результат такой же. проходит два такта и начинает моргать с частотой о,5 сек. Если держать кнопу то моргает с частотой 1 сек.
Файл асм прилагаю, где баги прячутся ?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения