Здравствуйте всем! Помогите пожалуйста определить почему моя программа по переключению восьми светодиодов не работает как задумано! Вообщем в программе зажигается светодиод, потом подпрограмма задержки (изначально одна секунда), после идёт опрос кнопки (вывод 10 - RB4), потом светодиод тухнет, затем то же самое происходит со следующим светодиодом и так далее. Проблема в том, что при каждом опросе кнопки, микроконтроллер думает, что она нажата, хотя я даже провода к выводу RB4 и к "-" не припаивал. Мультиметром проверял : сопротивление большое (если верить то 12 МгОм) между RB4 и "-". Может я подпрограмму опроса кнопки не так сделал? (даже и незнаю)! (Хочу добавить) Сделал печатную плату под бегушку, но в торапях вытравил дорожки не той стороной ( можно сказать забыл инверсию сделать) ! Пришлось поступить нехорошо и вывернуть ножки Пика (Pic16F84A) наизнанку. Не знаю почему, но три вывода (при проверке) не работали ( может я их до этого как-то сжёг - тут я не проверял) Задумано так, что при нажатии кнопки, запустится подпрограмма, которая уменьшит содержимое аккумулятора на 1, что в свою очередь уменьшит время переключения светодиодов! Подпрограмма опроса кнопки:
Пост N: 36
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг:
0
Отправлено: 04.05.10 17:44. Заголовок: Ewgen пишет: А вмес..
Ewgen пишет:
цитата:
А вместо видео-чёрный экран.
Странно! У меня всё показывает! Снимал мобильным телефоном! При запуске через винамп выскакивает значок (где часы ) Divx Messenger Settings! Может быть какой-нибудь кодек не установлен? На крайний случай вечером постараюсь цифровым фотоаппаратом снять!
Щас скопировал программу в окошко для ответа, минут 20 расставлял пробелы, нажал предосмотр, и бац всё опять слилось - все пробелы исчезли! Думаю лучше через БЛОКНОТ показать вам программу! http://slil.ru/29081331
Щас скопировал программу в окошко для ответа, минут 20 расставлял пробелы, нажал предосмотр
Дык кнопочку моноширный шрифт надо использовать... Первый пост у меня отображается нормально в области программы... Оформлен так как надо с использованием именно этой кнопки...
Пост N: 38
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг:
0
Отправлено: 04.05.10 21:13. Заголовок: Алексей пишет: Ну и..
Алексей пишет:
цитата:
Ну и будет думать что нажата при определенном уровне на порту... Какой логический уровень на порту В 4???
Замерил напряжение! 4.98! Но откуда оно там взялось? Это большой вопрос! Может попробовать использовать RB3!
Алексей пишет:
цитата:
Дык кнопочку моноширный шрифт надо использовать...
У вас, похоже дело, расширенное меню, а у меня урезанное. ( Я ещё не купил вторую часть самоучителя). Сейчас только что залил видео с цифрового фотоаппарата - только чего-то много получилось 30 Мб. Смазываний уже нет! http://slil.ru/29081564
Отправлено: 04.05.10 22:47. Заголовок: У Вас включены подтя..
У Вас включены подтягивающие резисторы на вход PORTB. Они подтягивают + поэтому и 5В. А кнопку надо замыкать на корпус, тогда вход и будет реагировать. Кстати грамотно и безопасно, если так. А то кто нибудь сядет сразу на все кнопки, погорим если плюс подавать.
Пост N: 39
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг:
0
Отправлено: 05.05.10 06:11. Заголовок: Ewgen пишет: Так Вы..
Ewgen пишет:
цитата:
Так Вы всю программу выложите.Как Вы порт В инициализировали?
Я же написал выше: Kimm пишет:
цитата:
Думаю лучше через БЛОКНОТ показать вам программу! http://slil.ru/29081331
MAZ пишет:
цитата:
У Вас включены подтягивающие резисторы на вход PORTB. Они подтягивают + поэтому и 5В.
Спасибо! Не знал, что от потенциал ножек пика (Порта Б) зависит от подтягивающих резисторов! Сегодня вечером постараюсь посадить RB4 на "-". Должно сработать!!!
Пост N: 40
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг:
0
Отправлено: 05.05.10 06:14. Заголовок: И можно ещё один воп..
И можно ещё один вопрос: При подаче питания на бегушку, бывает что вспыхивают несколько светодиодов, то есть получается что порты произвольным образом открываются! По идее так не должно быть! Почему так происходит?
Отправлено: 05.05.10 07:35. Заголовок: Надо как можно быстр..
Надо как можно быстрей сделать инициализацию контроллера и сбросить порты. Ничего мигать не будет. При включении порты работают на вход (по умолчанию) Kimm пишет:
цитата:
Не знал, что от потенциал ножек пика (Порта Б) зависит от подтягивающих резисторов! Сегодня вечером постараюсь посадить RB4 на "-"
Только через кнопку на землю . Опрашивать, 0 нажата, а не плюс. Резисторы не отключать.
Пост N: 43
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг:
0
Отправлено: 08.05.10 13:19. Заголовок: MAZ пишет: С малень..
MAZ пишет:
цитата:
С маленькой, но победой!
Спасибо! Щас только возник ещё вопрос! Так-то бегушка работает чётко, единственно что во время отпуска кнопки, бывает что бегушка останавливается (зависает)! То есть, светодиод, который горел последним , так и горит, пока не снимешь питание. Не знаете, случайно, почему так происходит?
Щас только возник ещё вопрос! Так-то бегушка работает чётко, единственно что во время отпуска кнопки, бывает что бегушка останавливается (зависает)!
Скорее всего это дребезг контактов кнопки. Надо принять антидребезговые меры (задержки). 50-150 мс при нажатии кнопки и 50-150 мс при ее отпускании. И только после этого дальнейшее исполнение программы.
Пост N: 198
Зарегистрирован: 03.12.09
Откуда: Украина, Киев
Рейтинг:
0
Отправлено: 10.05.10 01:03. Заголовок: MAZ пишет: Зачем за..
MAZ пишет:
цитата:
Зачем задержка после отпускания кнопки. В разомкнутом состоянии дребезга не бывает.
В разомкнутом состоянии дребезга действительно не бывает, а вот в момент размыкания (когда уменьшается сила давления на кнопку) очень даже бывает. Особенно, если кнопка старая и/или имеет загрязненные или окисленные контакты. С переходными процессами всегда надо бороться, я так думаю.
Пост N: 45
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг:
0
Отправлено: 10.05.10 07:19. Заголовок: Да тут поторопился н..
Да тут поторопился немного! Я так понял у меня ошибка в том, что рабочая точка войдя в подпрограмму опроса кнопки (при нажатой кнопки) ,уменьшает содержимое аккумулятора на 1, и возвращается обратно в программу, вне зависимости от того нажата кнопка или нет.А когда исполняется основная программа и происходит отпускание кнопки, получается зависание! Так вот надо запретить рабочей точки уходить из подпрограммы опроса кнопки, когда кнопка нажата!
Пост N: 46
Зарегистрирован: 11.03.10
Откуда: РФ, Волжск
Рейтинг:
0
Отправлено: 10.05.10 10:15. Заголовок: Вот исправил! Поскол..
Вот исправил! Поскольку у меня уже есть подпрограмма задержки, я её и использовал. В результате получилось более-менее прилично: (с пробелами) : http://slil.ru/29106133. Скрытый текст
; Подпрограмма опроса кнопки! Y1 btfsc portb,4 ; Спрашиваем RB4 Return ; если 1 - возвращаемся movwf B3 ; если 0 - сохраняем прежнее значение аккумулятора ; Формирование задержки 34 мс. movlw .10 ; записать в аккумулятор константу .10 call X1 ; условный переход в подпрограмму X1 movf B3,0 ; возвращаем прежнее значение аккумулятора ; проверка нажатия кнопки btfsc portb,4 ; Опрос кнопки. Return ; если 1 возвращаемся movf B3,0 ; если 0 - возвращаем прежнее значение аккумулятора decf B3,0 ; Вычесть из аккумулятора W константу .1 ; ситуация w = 0 - нежелательна! Исключаем её через Z. bcf status,2 ; сброс флага Z. addlw .0 ; сложить константу .0 c w. btfss status,2 ; опрос флага Z. goto T ; если Z = 0 movlw .23 ; если Z = 1, в w записываем .23 ; Окончательный опрос кнопки. T btfsc portb,4 ; Опрашиваем RB4. goto M ; Если не нажата - то задержка и возврат в программу. goto M1 ; Если нажата - то задержка и снова опрос кнопки. M movwf B3 ; сохраняем прежнее значение w. movlw .15 ; записать в w = .15 (задержка 150 мс). call X1 ; условный переход в подпрограмму Х1. movf B3,0 ; возвращаем прежнее значение w. Return ; возвращаемся. M1 movwf B3 ; сохраняем прежнее значение w. movlw .15 ; записать в w = .15 (задержка 150 мс). call X1 ; условный переход в подпрограмму Х1. movf B3,0 ; возвращаем прежнее значение w. goto T ; безусловный переход в подпрограмму T. end ; Директива конца программы. (Всегда последняя снизу).
Спасибо всем, что помогли мне разобраться с этой программкой!
Пост N: 199
Зарегистрирован: 03.12.09
Откуда: Украина, Киев
Рейтинг:
0
Отправлено: 10.05.10 23:42. Заголовок: MAZ пишет: Из опыта..
MAZ пишет:
цитата:
Из опыта, такого не встречал. Если давление уменьшилось, то это какие наносекунды.
Посмотрел на свой указательный палец и подумал, что задержка в наносекунды - это сильное преувеличение точнее преуменьшение. Все таки, желательно подавать команду на дальнейшую работу после того, как кнопка окончательно "успокоилась". Эту идею на нашем форуме мне подал КЕА в моей первой теме "Устройство управления (УУ) на PIC16F84A. Программные сбои."
Отправлено: 11.05.10 07:31. Заголовок: Посмотрел на средний..
Посмотрел на средний палец И подумал, глюки при замыкании были, при маленькой задержке. При размыкании никогда. Возможно при высокой тактовой частоте это и актуально от 20МГц и выше. Но при 4МГц, это точно, лишнее.
Пост N: 7
Зарегистрирован: 24.01.11
Откуда: Россия, Тулун
Рейтинг:
0
Отправлено: 31.01.11 19:21. Заголовок: В одной книжке я прч..
В одной книжке я прчитал, что дребезг контактов возникает как при замыкании кнопки, так и при ее размыкании. А чем отличается замыкание кнопки от ее размыкания? Мне кажется, что ничем. (Может проверить стоит осциллографом?).
Отправлено: 31.01.11 20:12. Заголовок: Переходные процессы ..
Переходные процессы практически одинаковые. Но в большинстве случаев достаточно точно знать что-то одно, нажата (проверить), не нажата ( не проверять).
Пост N: 8
Зарегистрирован: 24.01.11
Откуда: Россия, Тулун
Рейтинг:
0
Отправлено: 04.02.11 18:10. Заголовок: А как точно узнать: ..
А как точно узнать: нажата кнопка или нет? Так как я только начал изучать микроконтроллеры, то я кнопку (кнопки) опрашиваю постоянно (например, каждые 50 мс) и смотрю была она нажата или нет, после этого принимаю решение куда идти "рабочей точке" дальше.
Пост N: 2137
Зарегистрирован: 14.01.07
Откуда: Россия, Лиски
Рейтинг:
1
Фото:
Отправлено: 04.02.11 18:20. Заголовок: Всё правильно. Так в..
Всё правильно. Так все и делают. Опрашивают постоянно. Можно ещё работать по прерываниям. Это относится к кнопкам "навешанным" на PORTB. При нажатии кнопки, происходит прерывание.
Пост N: 504
Зарегистрирован: 26.12.06
Откуда: Украина, Одесса
Рейтинг:
0
Отправлено: 04.02.11 20:06. Заголовок: Можно в п\п прер..
Можно в п\п прерываний (по другому событию) опрашивать кнопку, и фиксировать нажатие с помощью поднятия "флага". Когда нажатие отрабатывается, "флаг" сбрасывается.
Пост N: 10
Зарегистрирован: 24.01.11
Откуда: Россия, Тулун
Рейтинг:
0
Отправлено: 05.02.11 13:13. Заголовок: К сожалению, с преры..
К сожалению, с прерываниями я толком еще не разобрался. Наверно, где-то в самоучителе об этом должно быть подробно рассказано. Пока я прочитал только первые 17 глав.
Здравствуйте! Подскажите как быть с кнопками... У меня в дипломе терморегулятор. Вход - термопара и DS1820, выход - 3 семисегментника и управление нагревом (самое простое, через установку 1 на ногу и при превышении заданной и текущей температуры и на оптрон) Много чего использовал из Самоучителя... и практикума (по части ацп и ДС) Сейчас столкнулся с такой проблемой - нужно кнопками задать температуру (ну и записать ее в EEPROM). Алгоритм пока такой - чтение АЦП, преобразование ADRES в значение температуры (интерполировал 2мя прямыми), чтение температуры с DS, сложение (DS на холодном спае), проверка разности с номинальной (управление нагревом), индикация текущей. Порт Б используется для 7 сегментов, одновременно старшие ноги - 5..7 соединены с кнопками на землю. 3 кнопки - установка (SET), + и -. Как лучше организовать их обработку (установка номинала)? Куда воткнуть этот кусок кода? Допустим, после 1 цикла работы всей программы установить порт Б на вход и считывать пока не установится 0 на порте с кнопкой SET. Но поскольку цикл большой и особенно индикация длится долго относительно, наверное можно пропустить нажатие SET? Тогда по прерываниям может? Но где поставить в этом случае "разрешенную зону" для них? И далее, допустим, мы вошли в ПП обработки кнопок (SET по кнопке ушел в ноль). Нужно одновременно как-то опросить состояние кнопок + и - (а это 2 задержки по 20мс на дребезг) И вывести на индикацию установленную температуру (причем в реальном времени это число же будет меняться теми же кнопками). Контроллер PIC16f873 Спасибо!
JEy предлагаю сделать обработку кнопок сразу после обработки последнего разряда индикации, разумеется с уравниванием отработанных маш. циклов, причем обработку сразу всех трех кнопок, ты схему собирал чтоб поэкспериментировать?
Все даты в формате GMT
3 час. Хитов сегодня: 13
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет