 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
msmiha Član

Pridružen-a: Sob 26 Feb 2005 16:48 Prispevkov: 115 Aktiv.: 0.49 Kraj: Slovenske Konjice
|
Objavljeno: Pet Jul 29, 2005 11:45 am Naslov sporočila: "Utripanje" dveh izhodov in hkratno izvajanje drug |
|
|
Mi zna kdo povedat kak bi z 16F84 naredil, da bi recimo dva izhoda izmenično "utipala" (delovala kot multivibrator), če bi na njiu priključil led diodi, med tem pa bi se moral izvajati drugi program (setiran bi moral biti en trerji izhod, tako dolgo dokler ga nebi z nekim vhodom resetiral recim RA0).
_________________ Edini način da odkrijemo meje mogočega je da, jih prestopimo in se znajdemo v nemogočem! |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Jul 29, 2005 12:18 pm Naslov sporočila: |
|
|
Tole ne predstavlja nobenega problema. Uporabi TMR0 prekinitev iz nje vključuj tisti dve diodi. Tisti vhod, ki ti bo setiral tretji izhod pa lahko prav tako čitaš v prekinitveni rutini. Lahko pa kot vhod koristiš RB0/INT, ki ti lahko proži zunanjo prekinitev. Zavisi seveda kaka hitrost je potrebna.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
msmiha Član

Pridružen-a: Sob 26 Feb 2005 16:48 Prispevkov: 115 Aktiv.: 0.49 Kraj: Slovenske Konjice
|
Objavljeno: Pet Jul 29, 2005 2:05 pm Naslov sporočila: |
|
|
Teh prekinitvenih rutin ne razumem najboljše, bi lahko prilepu kakšni primer ? Poglej stvar je taka da bi rad krmilil drsne vrate, zdaj pa program mam napisan da deluje tako da ko pritisnem tipko se vrata odprejo do končnega stikala, ki prekine potek odpiranja vrat (zdaj med tem časom bi pa mogle utripati izmenično dve luči). Bi šlo tako, da bi končna stikala vezal na pine RB4 in RB5 recimo, ki imajo tudi funkcijo interrupt on change. se pravi da ko bi senzor zaznal, da so vsrata prišla do konca bi se spremenilo stanje na vhodih RB4 ali RB5 in bi mi skočilo v prekinitveno rutino, v kateri bi resetiral izhoda za pogon vrat. Sedaj pa kak bi naredu, da bi med vsem tem dogajanjom utripali dve lučki oziroma LED diodi izmenično. Zelo bi bil vesel, če bi se ti ljublo prilepit kaki primer z timerjem.
_________________ Edini način da odkrijemo meje mogočega je da, jih prestopimo in se znajdemo v nemogočem! |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Jul 29, 2005 8:09 pm Naslov sporočila: |
|
|
Evo na hitro napisano.
Dopisal sem komentarje ter stvar preizkusil na testni plošči. Uporabljen je XT oscilator. Izhoda sta RB1 ter RB2 Vhoda sta RB4 ter RB5. Z njima vključiš ali izključiš utripanje. (tipka proti masi) Program lahko dopisuješ v prekinitveni rutini ali izven nje. Ko boš postavil bit "UTRIPAJ" bo utripalo, ko ga boš brisal bo nehalo.
Koda: |
;---------------------------
;testni program "msmiha"
;raba TMR0 prekinitve
;www.elektronik.si
;
;---------------------------
errorlevel -302
list P=16F84A
#include "d:\asm\p16f84a.inc"
#define LED1 PORTB,1
#define LED2 PORTB,2
#define VKLOP PORTB,4
#define IZKLOP PORTB,5
#define UTRIPAJ KONTROLNI,0
#define KOR1 .250
#define KOR2 .1
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
cblock 0XC
WTMP,STMP,TMP,KONTROLNI,T1,T2
endc
org 0X0
goto GLAVNI
org 0x04
goto PREKINITEV
org 0X05
;-----------------------------------
;prekinitvena rutina
;-----------------------------------
PREKINITEV
movwf WTMP ;pred vstopom v prekinitveno rutno shranem W
swapf STATUS,W
movwf STATUS ;ter status register
btfsc INTCON,T0IF ;ugotavljam ce je slo za TMR0 prekinitev
goto TMR0_P ;da
KONEC_P
swapf STMP,W
movwf STATUS ;vrnem status
swapf WTMP,F
swapf WTMP,w ;ter W
retfie ;konec prekinitve
TMR0_P
btfss UTRIPAJ ;je utripanje vkluceno?
goto IZKLOP_U ;ne
call UTRIPANJE
bcf INTCON,T0IF
goto KONEC_P
IZKLOP_U
bcf LED1
bcf LED2
bcf INTCON,T0IF
goto KONEC_P
;--------------------------------------------------------------------
;procedura po poteku dolocenega
;casa izmenicno vklopi pina
;procedura se klice ca vsake 4ms koliko traja cas prekinitve
;(kristal 4Mhz =1uS ukazni ciklus)
;preddelilnik 1/16 == 256*16 ==4096 us
;--------------------------------------------------------------------
UTRIPANJE
decfsz T1,f
return
movlw KOR1 ;KOR1=250x prekinitev = ca 1sec
movwf T1 ;sem pride ca vsako sekundo
decfsz T2,f ;
return ;
movlw KOR2 ;
movwf T2 ;sem pride prekinitev*KOR1*KOR2
btfss LED1 ;gori led 1
goto LED_ON ;ne
bcf LED1 ;da izklop
bsf LED2 ;ter vklop LED2
return
LED_ON
bcf LED2 ;vklop LED1
bsf LED1 ;izklop LED2
return
;-----------------------------------
;glavna procedura
;priprava portov inicializacija ...
;-----------------------------------
GLAVNI
clrf KONTROLNI ;brisanje registra, ki ga uprabljam za kontrole
bsf STATUS,RP0 ;bank1
bcf LED1 ;\
bcf LED2 ;/ pina sta izhoda
movlw b'11' ;pullup portb on, preddelilnik 1/16 za TMR0 z notranjim
movwf OPTION_REG ;virom ure
bcf STATUS,RP0 ;bank0
movlw KOR1
movwf T1
movlw KOR2
movwf T2
movlw b'10100000'
movwf INTCON ;vklop TMR0 prekinitve
ZANKA ;na portub so vkljuceni pullupi
btfsc VKLOP ;je vhod nizek ?
goto VHOD2
bsf UTRIPAJ ;vkljucim utripanje
btfss VKLOP ;je vhod sproscen?
goto $-1 ;ne
VHOD2
btfsc IZKLOP ;je drugi vhod aktiven?
goto ZANKA ;ne
bcf UTRIPAJ ;da izklop utripanja
btfss IZKLOP ;je drugi vhod sprosen?
goto $-1 ;ne
goto ZANKA ;da
end ;eof
|
Opis: |
|
 Download |
Ime datoteke: |
msmiha.zip |
Velikost datoteke: |
6.2 KB |
Downloadano: |
11 krat |
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
msmiha Član

Pridružen-a: Sob 26 Feb 2005 16:48 Prispevkov: 115 Aktiv.: 0.49 Kraj: Slovenske Konjice
|
Objavljeno: Ned Jul 31, 2005 5:45 pm Naslov sporočila: |
|
|
Hvala za odgovor.
Mislim pa da obstaja tudi lažja rešitev. Kaj če bi enostavno naredil dve zanke in skaka iz ene v drugo? V eni bi se odvijal proces utripanja v drugi pa bi testiral druge porte in izvajal druge operacije?
_________________ Edini način da odkrijemo meje mogočega je da, jih prestopimo in se znajdemo v nemogočem! |
|
Nazaj na vrh |
|
 |
msmiha Član

Pridružen-a: Sob 26 Feb 2005 16:48 Prispevkov: 115 Aktiv.: 0.49 Kraj: Slovenske Konjice
|
Objavljeno: Pon Avg 01, 2005 3:12 pm Naslov sporočila: |
|
|
Silvo bi mi še lahko razložil kakšno funkcijo imajo pull-upi na portu b?
_________________ Edini način da odkrijemo meje mogočega je da, jih prestopimo in se znajdemo v nemogočem! |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|