Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
25.06.2010, 13:07
|
|
Частый гость
Регистрация: 13.04.2010
Сообщений: 33
Сказал спасибо: 14
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
PIC16F876
Здравствуйте! Помогите с таким вопрсом.
Pic 16F876 на вход А0 посажена кнопка S1 на выходе RC4 реле.
нужно реализовать задержку таким образом чтобы реле сработало
при удерживании кнопки примерно 2 секунды, а после сработки все вернулось в изночальное состояние. Схема собрана на макетке пока добился только того что после кратковременного нажатия через пару секунд срабатывает реле, а как реализовать удерживания.
|
|
|
|
25.06.2010, 13:33
|
|
Вид на жительство
Регистрация: 12.04.2007
Сообщений: 348
Сказал спасибо: 2
Сказали Спасибо 36 раз(а) в 32 сообщении(ях)
|
Re: PIC16F876
Так?
Код:
|
if (RA0==1)
{
запуск таймера 2сек;
while (!таймер сработал);
if (RA0==1) RC4=1;
} |
PS. Одна из многочисленных вариаций осуществления задуманного. Не самая оптимальная.
__________________
Гидравлика + электроника = POWER
Последний раз редактировалось mrKirill; 25.06.2010 в 13:37.
|
|
|
|
25.06.2010, 13:40
|
|
Временная регистрация
Регистрация: 30.03.2007
Адрес: Челябинск
Сообщений: 62
Сказал спасибо: 11
Сказали Спасибо 11 раз(а) в 9 сообщении(ях)
|
Re: PIC16F876
Вход на мк обычно подтягивают к +5V а кнопкой садят на землю, но это к делу отношение неимеет. А по делу исходничек бы как вы кнопку анализируете? Я обычно просто по таймеру (периуд более возможного дребезга) проверяю состояние если изменилось - нажали или отпустили. А теперь при отрицательном перепаде ставите флажёк и обнуляете программный счётчик. По таймеру если флажёк то считием. При определённом значении включаете реле и снимаете флажёк. Если на входе +5V флаг снять досрочно.
|
|
|
|
25.06.2010, 13:42
|
|
Частый гость
Регистрация: 13.04.2010
Сообщений: 33
Сказал спасибо: 14
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: PIC16F876
Извените вы могли бы на асемблере показать
я только начинаю программировать
|
|
|
|
25.06.2010, 14:00
|
|
Частый гость
Регистрация: 13.04.2010
Сообщений: 33
Сказал спасибо: 14
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: PIC16F876
Вот пока что у меня получается может поправите я не студент которому нужен курсовик я просто увлекаюсь радиоэлектроникой. Мне эта схемка нужна чтобы открывать багажник автомобиля задержку сделал что бы при случайном нажатии неоткрывался.
;================ Начало 1step-876.asm ================
;Файл: 1step-876.asm
processor 16F876 ;Используемый процессор.
radix dec ;Десятичная система счисления по умолчанию.
include "p16f876.inc" ;Заголовочный файл для микроконтроллера PIC16F876.
;Файл расположен в директории установленной MPLAB-IDE.
__CONFIG ( _CP_OFF & _BODEN_OFF & _HS_OSC & _WDT_OFF & _PWRTE_ON & _DEBUG_ON & _CPD_OFF & _LVP_OFF )
org 0x0000 ;Вектор сброса процессора, после сброса программа
;начинает выполняться отсюда.
nop ;Этот nop жизненно необходим для корректной работы MPLAB-ICD
clrf INTCON ;Перестраховываемся, запрещаем все прерывания.
clrf PCLATH ;Перестраховываемся, выбираем Bank 0 Памяти Программ.
goto Start ;Обход вектора прерывания и блока подпрограмм.
org 0x0004 ;Вектор прерывания.
;********** Начало обработчика прерываний **********
;В этой простой программе не используются прерывания
;********** Конец обработчика прерываний************
;***************** Блок подпрограмм ****************
;В этой простой программе нет подпрограмм
;************* Конец блока подпрограмм *************
Start ;Тело программы начинается здесь.
;********** Начало Инициализации процессора ********
BSF STATUS, RP0;1 bank-TRIS
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital inputs
BSF TRISA, 0;input
clrf PORTC ;Все выводы PORTC переводим в '0'
movlw b'00100000' ;
movwf STATUS ;Выбираем Bank 1 RAM (адреса 80h - FFh)
movlw b'00000000' ;
movwf TRISC ;Все линии PORTC переключаем на выход
clrf STATUS ;Возвращаемся в Bank 0 RAM (адреса RAM 00h - 7Fh)
;********** Конец Инициализации процессора *********
Chek: BTFSS PORTA, 0
GOTO Chek
bsf PORTC,4 ;Зажигаем Светодиод
nop ;Тянем время...
nop ;Тянем время...
nop ;Тянем время...
bcf PORTC,4 ;Гасим светодиод
goto Chek ;Бесконечный цикл.
END ;Конец исходного кода программы
;============= Конец 1step-876.asm =====================
|
|
|
|
25.06.2010, 14:24
|
|
Частый гость
Регистрация: 13.04.2010
Сообщений: 33
Сказал спасибо: 14
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: PIC16F876
dimanka, скажите так правильно будет? и наминал резистора такой или нет?
|
|
|
|
28.06.2010, 08:35
|
|
Временная регистрация
Регистрация: 30.03.2007
Адрес: Челябинск
Сообщений: 62
Сказал спасибо: 11
Сказали Спасибо 11 раз(а) в 9 сообщении(ях)
|
Re: PIC16F876
Сообщение от Pavel55
|
так правильно будет?
|
5.1k вполне годится. Но можно и без него если на PORTB подключить там подтягивающие резисторы внутри подключаются битик RBUP кажется
|
|
|
|
28.06.2010, 12:10
|
|
Частый гость
Регистрация: 13.04.2010
Сообщений: 33
Сказал спасибо: 14
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: PIC16F876
Подскажите как прописывать паузы, а то я NOP использую их там очень много получается. вообщем до чего я дошел.
;********** Конец Инициализации процессора *********
Chek: BTFSS PORTA, 0
GOTO Chek
nop ;Тянем время...
nop ;Тянем время...
nop ;Тянем время...
nop ;Тянем время...
nop ;Тянем время...
nop ;Тянем время...
nop ;Тянем время...
nop ;Тянем время...
Chek: BTFSS PORTA, 0
GOTO Chek
bsf PORTC,4 ;Зажигаем Светодиод
nop ;Тянем время...
nop ;Тянем время...
nop ;Тянем время...
nop ;Тянем время...
nop ;Тянем время...
nop ;Тянем время...
nop ;Тянем время...
nop ;Тянем время...
nop ;Тянем время...
bcf PORTC,4 ;Гасим светодиод
goto Chek ;Бесконечный цикл.
Так то вроде все работает но есть несколько моментов которые я не могу победить
1. при подаче питания на контроллер кратковременно на порте С 4 проскальзывает единичка.
2. если отпустить кнопку в тот момент когда на выходе единица то она там и остается и реле остается подтянутым.
|
|
|
|
28.06.2010, 12:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: PIC16F876
Классика однако, если что-то повторяется - использовать цикл. Это самый простой метод.
Код:
|
movlw delay ;delay - длительность задержки
movwf TEMP
wait: decfsz TEMP
goto wait |
Нужно учитывать, что
если во время ожидания нужно что-то еще делать, то применяют таймеры и прерывания. Но это отдельная и большая тема.
__________________
misterdi<@>i.ua
|
|
|
Сказали "Спасибо" MisterDi
|
|
|
29.06.2010, 15:39
|
|
Частый гость
Регистрация: 13.04.2010
Сообщений: 33
Сказал спасибо: 14
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: PIC16F876
Сообщение от MisterDi
|
Код:
movlw delay ;delay - длительность задержки
movwf TEMP
wait: decfsz TEMP
goto wait
|
Помогите пожалуйсто вставить этот фрагмент кода в мой код
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:33.
|
|