|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
DK Član
Pridružen-a: Ned 18 Apr 2010 14:58 Prispevkov: 57 Aktiv.: 0.33 Kraj: Mozirje
|
Objavljeno: Čet Apr 21, 2011 2:43 pm Naslov sporočila: Histereza? |
|
|
Lp!
Pri primerjanju 2 padcev napetosti na NTK tipalih, bi želel, da mi ko je eden večji od drugega postavi določen izhod na log. 1. Tu pa se pojavi primer da mi ta izhod za kratek čas skače iz 0 v 1. moral bi napisati nekakšno histerezo? pa ne vem kako?
Upam da ste razumeli v čem je problem. |
|
Nazaj na vrh |
|
|
MarkoM Član
Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 13.17 Kraj: Lovrenc na P.
|
Objavljeno: Čet Apr 21, 2011 2:49 pm Naslov sporočila: |
|
|
Sprogramiraj, da bo postavil izhod na ena, ko bo eden za dve ali več enot večji ko drugi. |
|
Nazaj na vrh |
|
|
DK Član
Pridružen-a: Ned 18 Apr 2010 14:58 Prispevkov: 57 Aktiv.: 0.33 Kraj: Mozirje
|
Objavljeno: Čet Apr 21, 2011 3:07 pm Naslov sporočila: |
|
|
Koda: |
movlw b'00001010' ;vpišemo 10, kar predstavlja 0.05 V
movwf RAZ+1
movlw b'00000000'
movwf RAZ
;prištej 0,05 V k REZ2
movf RAZ+1,W ;nižji bajt REZ2 -> W
addwf REZ2+1,f ;prištej nižje bajte...REZ2 prišteje RAZ
btfsc STATUS,C ;ali je prišlo do prenosa (C=0)?
incf REZ2,f ;Carry=1, povečaj višji bajt
movf RAZ,W ;višji bajt REZ2 v W
addwf REZ2,f ;seštej višja bajta
;Padec na 2 tipalu odštejemo od padca na 1 tipalu
movf REZ1+1,W ;nižji bajt REZ1 -> W
subwf REZ2+1,f ;odštej nižje bajte...REZ2 odšteje od REZ1
movf REZ1,W ;višji bajt REZ1 -> W
btfss STATUS,C ;ali je prišlo do prenosa (C=0)?
incf REZ1,W ;DA, povečaj REZ1 -> w
subwf REZ2,f ;odštej višje bajte
btfsS STATUS, C ;preverimo ali je C=1 (če je C=0 je rezultat negativen)
goto PRIZGI_LED ;če je rezultat negativen (C=0) odpremo izhod
bcf PORTB,3 ;če pa je rezultat pozitiven (C=1) zapremo izhod
return
PRIZGI_LED
bSf PORTB,3
return |
trenutno mam tako narejeno. Ko je padec večji za 0.05 V mi prižge LED, vendar LED še vedno utripa za kratek čas!?? |
|
Nazaj na vrh |
|
|
SimonS Član
Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4592 Aktiv.: 20.59 Kraj: Kobarid
|
Objavljeno: Čet Apr 21, 2011 3:36 pm Naslov sporočila: |
|
|
Tvoj primer se da zelo enostavno rešiti z OP AMP. Histeriozo pa določiš z uporom na povratni vezavi. _________________ Lep dan
Simon |
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.04
|
Objavljeno: Čet Apr 21, 2011 10:44 pm Naslov sporočila: |
|
|
Koda: |
pRacun
clrf RAZ+1 ; če ni histereze, sta obe 0.
clrf RAZ
movlw b'00001010' ;vpišemo 10, kar predstavlja 0.05 V
btfsC zHister ; zastavica za vklop histereze ?
movwf RAZ+1 ; JE histereza
to že imaš ;prištej 0,05 V k REZ2
...
bcf zHister
btfsC STATUS, C ;preverimo ali je C=1 (če je C=0 je rezultat negativen)
bsf zHister ; vklop zastavice
btfsS STATUS, C ;preverimo ali je C=1 (če je C=0 je rezultat negativen)
bsf PORTB,3 ;če je rezultat negativen (C=0) odpremo izhod
btfsC STATUS, C ;preverimo ali je C=1 (če je C=0 je rezultat negativen)
bcf PORTB,3 ;če je rezultat poztiven (C=1) zapremo izhod
return
|
Nekaj takega bi šlo
Histereza + senzA - senzB = Rezultat
Če je Rezulat > 0 ; zHister = 1 ; doda se Histereza = .10
Če je Rezulat < 0 ; zHister = 0 ; nič se ne doda
Zastavica zHister je en bit v spremenljivki Zastave. _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
DK Član
Pridružen-a: Ned 18 Apr 2010 14:58 Prispevkov: 57 Aktiv.: 0.33 Kraj: Mozirje
|
Objavljeno: Tor Maj 03, 2011 5:35 pm Naslov sporočila: |
|
|
SimonS...zadevo bi želel rešit z spremembo programa na mikorkontrolerju.
igo...hvala za odgovor, vendar si nikakor ne morem razložiti kako si to mislil. :S
...need help... |
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.04
|
Objavljeno: Tor Maj 03, 2011 7:09 pm Naslov sporočila: |
|
|
Ti enemu senzorju ves čas prištevaš isto konstanto .10 , zato to nikakor ni histereza.
Histereza nastane takrat, ko Rezultat-u pri Rezultat > 0 prišteješ .10, pri Rezultat < 0 pa ne.
Histereza + senzorA - senzorB = Rezultat
Če je Rezulat > 0 ; zHister = 1 ; doda se Histereza = .10
Če je Rezulat < 0 ; zHister = 0 ; nič se ne doda
Recimo, da je začetno stanje:
Histereza = 0
senzorA = 20 in raste proti 70 .
senzorB = 50
Najprej je Rezultat = 0 + 20 - 50 . Ker se senzorA povečuje, negativen Rezultat raste proti 0.
Pri senzorA = 49 je Rezultat < 0 , pri 50 pa postane rezultat = 0, oziroma pozitiven. Takrat postane Histereza enaka 10 in Rezultat postane še bolj pozitiven.
Istočasno vklopimo BSF IZHOD1 , vklopimo pa tudi zastavico BSF zHistereza .
senzorA raste naprej proti 70 in Rezultat = 10 + 70 - 50 > 0
Recimo, da je se sedaj začne dogajati:
Histereza = 10
senzorA = 70 in pada proti 20 .
senzorB = 50
Najprej je Rezultat = 10 + 70 - 50 . Ker se senzorA zmanjšuje, pozitiven Rezultat pada proti 0.
Pri senzorA = 40 je Rezultat = 0 , pri 39 pa postane rezultat < 0, oziroma negativen. Takrat Histereza postane 0 in Rezultat postane še bolj negativen.
Istočasno izklopimo BCF IZHOD1 , izklopimo pa tudi zastavico BCF zHistereza .
Verjetno si opazil, da se v eno smer preklop zgodi pri 49-->50 , v drugo smer pa pri 40-->39 . Histereza je torej 10. In to je bistvo histereze.
Program, ki to izvede je pa tak:
Koda: |
RAZ
RAZ+1
REZ
REZ+1
Zastave ; to spremenljivko dodaj
...
#define zHister Zastave,0 ; Če je 1, je histereza, če je 0 pa ni.
#define zDosegT Zastave,1 ; Če je 1, je incf PCLATH,F , če je 0, pa btfsC zDosegT preskoči incf. Pri izpisu besedil poveča doseg Tabele na 512 lokacij. (tale zastavica je gratis)
...
pRacun
clrf RAZ+1 ; če ni histereze, sta obe 0.
clrf RAZ
movlw b'00001010' ;vpišemo 10, kar predstavlja 0.05 V
btfsC zHister ; Ali je zastavica za vklop histereze 1 ?
movwf RAZ+1 ; JA, JE histereza , RAZ = 10
; NE, histereza ostane 0
;+++++++++++
;prištej 0,05 V k REZ2
movf RAZ+1,W ;nižji bajt REZ2 -> W
addwf REZ2+1,f ;prištej nižje bajte...REZ2 prišteje RAZ
btfsc STATUS,C ;ali je prišlo do prenosa (C=0)?
incf REZ2,f ;Carry=1, povečaj višji bajt
movf RAZ,W ;višji bajt REZ2 v W
addwf REZ2,f ;seštej višja bajta
;Padec na 2 tipalu odštejemo od padca na 1 tipalu
movf REZ1+1,W ;nižji bajt REZ1 -> W
subwf REZ2+1,f ;odštej nižje bajte...REZ2 odšteje od REZ1
movf REZ1,W ;višji bajt REZ1 -> W
btfss STATUS,C ;ali je prišlo do prenosa (C=0)?
incf REZ1,W ;DA, povečaj REZ1 -> w
subwf REZ2,f ;odštej višje bajte
; DOBLJEN JE BIL REZULTAT. V nadaljevanju se preveri, če je pozitiven ali negativen. Ustrezno se nastavi IZHOD in zastavica zHister.
;+++++++++++
bcf zHister ; če je ne vklopimo, bo ostala izklopljena
btfsC STATUS, C ;preverimo ali je C=1 (če je C=0 je rezultat negativen)
bsf zHister ; vklop zastavice
btfsS STATUS, C ;preverimo ali je C=1 (če je C=0 je rezultat negativen)
bsf PORTB,3 ;če je rezultat negativen (C=0) odpremo izhod
btfsC STATUS, C ;preverimo ali je C=1 (če je C=0 je rezultat negativen)
bcf PORTB,3 ;če je rezultat poztiven (C=1) zapremo izhod
return |
2 x popravljene pravopisne napake ... _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazadnje urejal/a igo Tor Maj 03, 2011 9:32 pm; skupaj popravljeno 2 krat |
|
Nazaj na vrh |
|
|
Gklemen Član
Pridružen-a: Sob 29 Nov 2008 0:06 Prispevkov: 112 Aktiv.: 0.60 Kraj: Rogatec
|
Objavljeno: Tor Maj 03, 2011 7:14 pm Naslov sporočila: |
|
|
upam da ti bo kaj pomagalo:
if (U1 > U2 + U_histereze) then
{ --> OFF; // nekaj }
else if (U1 < U2 - U_histereze) then
{ --> ON; // nekaj } |
|
Nazaj na vrh |
|
|
DK Član
Pridružen-a: Ned 18 Apr 2010 14:58 Prispevkov: 57 Aktiv.: 0.33 Kraj: Mozirje
|
Objavljeno: Pon Maj 23, 2011 3:06 pm Naslov sporočila: |
|
|
Zadeva deluje!
hvala za pomoč! |
|
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: 76 dni
Powered by phpBB © 2001, 2005 phpBB Group
|