www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Histereza?

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
DK
Član
Član



Pridružen-a: Ned 18 Apr 2010 14:58
Prispevkov: 57
Aktiv.: 0.34
Kraj: Mozirje

PrispevekObjavljeno: Čet Apr 21, 2011 2:43 pm    Naslov sporočila:  Histereza? Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
MarkoM
Član
Član



Pridružen-a: Tor 12 Sep 2006 15:29
Prispevkov: 2825
Aktiv.: 13.23
Kraj: Lovrenc na P.

PrispevekObjavljeno: Čet Apr 21, 2011 2:49 pm    Naslov sporočila:   Odgovori s citatom

Sprogramiraj, da bo postavil izhod na ena, ko bo eden za dve ali več enot večji ko drugi.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
DK
Član
Član



Pridružen-a: Ned 18 Apr 2010 14:58
Prispevkov: 57
Aktiv.: 0.34
Kraj: Mozirje

PrispevekObjavljeno: Čet Apr 21, 2011 3:07 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
SimonS
Član
Član



Pridružen-a: Čet 01 Jul 2004 11:18
Prispevkov: 4581
Aktiv.: 20.63
Kraj: Kobarid

PrispevekObjavljeno: Čet Apr 21, 2011 3:36 pm    Naslov sporočila:   Odgovori s citatom

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
Prisoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3638
Aktiv.: 17.11

PrispevekObjavljeno: Čet Apr 21, 2011 10:44 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
DK
Član
Član



Pridružen-a: Ned 18 Apr 2010 14:58
Prispevkov: 57
Aktiv.: 0.34
Kraj: Mozirje

PrispevekObjavljeno: Tor Maj 03, 2011 5:35 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3638
Aktiv.: 17.11

PrispevekObjavljeno: Tor Maj 03, 2011 7:09 pm    Naslov sporočila:   Odgovori s citatom

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 .

Arrow 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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Gklemen
Član
Član



Pridružen-a: Sob 29 Nov 2008 0:06
Prispevkov: 112
Aktiv.: 0.60
Kraj: Rogatec

PrispevekObjavljeno: Tor Maj 03, 2011 7:14 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
DK
Član
Član



Pridružen-a: Ned 18 Apr 2010 14:58
Prispevkov: 57
Aktiv.: 0.34
Kraj: Mozirje

PrispevekObjavljeno: Pon Maj 23, 2011 3:06 pm    Naslov sporočila:   Odgovori s citatom

Zadeva deluje!

hvala za pomoč!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group