Форум за електроника Форуми Форум за електроника
Български форум за електроника, ремонти, схеми, документация
 
 Въпроси/ОтговориВъпроси/Отговори   ТърсенеТърсене   ПотребителиПотребители   ГрупиГрупи   Регистрирайте сеРегистрирайте се 
 ПрофилПрофил   Влезте, за да видите съобщенията сиВлезте, за да видите съобщенията си   ВходВход 

Реле с времезакъснение с PIC16F84A

 
Създайте нова тема   Тази тема е заключена - не можеш да отговаряте или да променяте мнения    Форум за електроника Форуми -> Обща електроника - General Electronics



Предишната тема :: Следващата тема  
Автор Съобщение
Maverikkk
Нов потребител
Нов потребител


Регистриран на: 18 Апр 2011
Мнения: 4
Местожителство: sof

МнениеПуснато на: Нед Май 01, 2011 12:54    Заглавие: Реле с времезакъснение с PIC16F84A Отговорете с цитат

Здравейте, начинаещ съм за това ще помоля за помощ.

Задание: на база PIC16F84A искам да изградя реле с времезакъснение, тоест на даден извод от PIC-a да имам високо ниво за 5 мин. след което 5 часа да е в покой и отново 5 мин. високо ниво и 5 часа с покой. Ще съм благодарен на всеки който ми помогне с писането на програмата. Пращам бира с куриер Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Ichko
Опитен потребител
Опитен потребител


Регистриран на: 13 Мар 2004
Мнения: 308

МнениеПуснато на: Нед Май 01, 2011 13:50    Заглавие: Отговорете с цитат

За реализиране на заданието може да се използва по-прост (и евтин) микроконтролер, напр. от серията 12C или 12F. За 16F84A виж в книгата "PIC микроконтролери" - част I. Ако все пак има сериозни затруднения мога да помогна, стига да не се отметнеш за бирата Smile
_________________
Интелектът на Земята е константа, а населението непрекъснато расте!
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Maverikkk
Нов потребител
Нов потребител


Регистриран на: 18 Апр 2011
Мнения: 4
Местожителство: sof

МнениеПуснато на: Нед Май 01, 2011 14:23    Заглавие: Отговорете с цитат

Здрасти, имам я книгата, но докато прочета обстойно нещата ще ми изсъхне тревата на вилата.

list p=16f84a ;Задава типа на процесора
#include <p16f84a.inc> ;Дефиниции на SFR регистрите
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;************** Дефиниране на контрасти и променливи *************
w EQU 0
f EQU 1
Counter EQU H'0C'
;*****************************************************************
; Потребителска програма
;*****************************************************************
ORG H'0000' ; Вектор на НУ
goto start ; Преход към началото на програмата
;*****************************************************************
; Начало на програмата
;*****************************************************************
start bsf STATUS, RP0 ; Избор на Банка 1
movlw B'11010111' ; 11010111b ->W
movwf OPTION_REG ; (W) -> OPTION_REG
bcf STATUS,RP0 ; Избор на Банка 0
clrf PORTB ; 00h -> PORTB
bsf STATUS,RP0 ; Избор на Банка 1
movlw B'11111110' ; 11111110b -> W
movwf TRISB ; RB7-RB1 - Входове, RB0-Изход
bcf STATUS,RP0 ; Избор на Банка 0
goto main
;******************************************************************
; Използвани подпрограми
;******************************************************************
;------ Подпрограма 'Wait', формираща времезадръжката от 460ms-----
wait movlw D'255' ; 7 -> W
movwf Counter ; (W) -> Counter
clrf TMR0 ; 00h -> TMR0
again bcf INTCON,T0IF ; Нулирай бит T0IF
loop btfss INTCON,T0IF ; Бит T0IF=1?
goto loop ; Не, провери отново
decfsz Counter,f ; Да, Counter=(counter)-1,Counter=0?
goto again ; Не, изпълни цикъла отново
return ; Връщане към главната програма
;********************************************************************
; Главна програма
;********************************************************************
main bsf PORTB,0 ; RB0=1 (Светодиодът светва)
call wait ; Изчакай 460ms
bcf PORTB,0 ; RB0=0 (Светодиодът изгасва)
call wait ; Изчакай 460ms
goto main ; Повтори цикъла отново
END ; Директива за край на програмата


това е кога за мигащ диод, но не ми е ясно препълването на таймер 0 TMR0 и OPTION_REG.
Не ми е ясно и това "При използване на още един цикъл, максималната продължителност на времеинтервала ще бъде 255х255х255х65,5мс.
Дай някакви насоки. Имам PIC16F84A, взех го за да се обучавам, като целта ми е да ми отваря и затваря кран за вода да полива тревата на вилата. Може бирата да я пием там - прекрасно място!

П.С. Бирата е в хладилника Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
lenko71
Опитен потребител
Опитен потребител


Регистриран на: 29 Май 2009
Мнения: 302
Местожителство: Бургас

МнениеПуснато на: Нед Май 01, 2011 15:33    Заглавие: Отговорете с цитат

Таймера (TMR0) увеличава стойността си на всеки n-ти цикъл (един цикъл е четири такта на осцилатора), като това "n", се задава в младшите три бита на OPTION регистъра. В случая те са "111", т. е. коефициента на делене е 1:256 или на всеки 256-ти цикъл таймера увеличава стойността си с единица.
При препълване на таймера, т. е. при прехода му от 11111111 в 00000000, бит 2 (или бит TOIF) на INTCON регистъра се установява в "1" което всъщност ти казва че брояча е препълнен. След това този бит се нулира (от програмата!) за да започне наново "пълнене" на брояча.
Относно времето, по моите сметки и при това задание:
...
movlw D'255'
movwf Counter
...
цикъла "wait" излиза около 16 секунди ( при честота 4MHz).
За да се получат времена от няколко часа ще трябва да се вложат още няколко цикъла (съответно и няколко променливи)
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
Maverikkk
Нов потребител
Нов потребител


Регистриран на: 18 Апр 2011
Мнения: 4
Местожителство: sof

МнениеПуснато на: Нед Май 01, 2011 15:52    Заглавие: Отговорете с цитат

Благодаря за инфото, доста по разбираемо го обясни отколкото в книгата, би ли ми обяснил как да вложа тези още няколко цикъла, че наистина не съм в час. Благодаря.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
lenko71
Опитен потребител
Опитен потребител


Регистриран на: 29 Май 2009
Мнения: 302
Местожителство: Бургас

МнениеПуснато на: Нед Май 01, 2011 16:54    Заглавие: Отговорете с цитат

Ами например така:
wait:
movlw D'255'
movwf Counter_2
movlw D'255'
movwf Counter_3

movlw D'255'
movwf Counter
clrf TMR0
again:
bcf INTCON,T0IF
loop:
btfss INTCON,T0IF
goto loop
decfsz Counter,f
goto again
decfsz Counter_2,f
goto again
decfsz Counter_3,f
goto again

return

като преди това трябва да се декларират и новите променливи (след Counter):

Counter EQU H'0C'
Counter_2 EQU H'0D'
Counter_3 EQU H'0E'


ПП: Числата '255' са само примерни
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
Maverikkk
Нов потребител
Нов потребител


Регистриран на: 18 Апр 2011
Мнения: 4
Местожителство: sof

МнениеПуснато на: Нед Май 01, 2011 17:09    Заглавие: Отговорете с цитат

lenko71 написа:
Ами например така:
wait:
movlw D'255'
movwf Counter_2
movlw D'255'
movwf Counter_3

movlw D'255'
movwf Counter
clrf TMR0
again:
bcf INTCON,T0IF
loop:
btfss INTCON,T0IF
goto loop
decfsz Counter,f
goto again
decfsz Counter_2,f
goto again
decfsz Counter_3,f
goto again

return

като преди това трябва да се декларират и новите променливи (след Counter):

Counter EQU H'0C'
Counter_2 EQU H'0D'
Counter_3 EQU H'0E'


ПП: Числата '255' са само примерни


Много ти благодаря за съветите, ще пробвам, само ми кажи на кой адрес да ти пратя бирата, че гледам си чак в Бургас Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
RC
Опитен потребител
Опитен потребител


Регистриран на: 22 Фев 2003
Мнения: 13214

МнениеПуснато на: Нед Май 01, 2011 17:12    Заглавие: Отговорете с цитат

Maverikkk да ти прави впечатление, че постовете ти се променят Question
Как пък не разбра с кой бутон се отговаря.

Edit: А това изпратено на лични е повече от излишно, но нека да е за сведение за любезният ти начин на общуване.
Maverikkk написа:
Такъв тон може да държиш НА МАЙКА ТИ! - ГОМНАР!

_________________
RemoteControls
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
Покажи мнения от преди:   
Създайте нова тема   Тази тема е заключена - не можеш да отговаряте или да променяте мнения    Форум за електроника Форуми -> Обща електроника - General Electronics Часовете са според зоната GMT + 2 Часа
Страница 1 от 1

 
Към:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети


Powered by phpBB © 2001, 2005 phpBB Group
Translation by: Boby Dimitrov
Where to Find Free Service Manuals