|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
marko11 Profesionalec
Pridružen/-a: Ned Jan 2004 18:00 Prispevkov: 112 Kraj: Ponikve
|
Objavljeno: Čet Nov 29, 2007 8:09 pm Naslov sporočila: Encoder in Bascom |
|
|
Pozdrav
Imam encoder od HP (HEDS-5310).
Z Bascom8051 bi rad štel impulze A in B (gor, dol),
spodaj napisan program pa mi NE sledi, če vrtim počasi je vredu, drugače pa ni točno štetje.
Kaj moram popraviti v programu, da bo štetje pravilno?
Koda: |
$crystal = 12000000
$regfile = "89c4051.dat"
Dim Stevec As Integer
Enable Interrupts
On Int0 Int0_sub
On Int1 Int1_sub
Set Tcon.0
Set Tcon.2
Enable Int0
Enable Int1
Senzor_1 Alias P3.2
Senzor_2 Alias P3.3
Stevec = 0
Do
Enable Interrupts
Locate 1 , 1 : Lcd Stevec ; " "
Loop
End
'--------prekinitvena rutina-------------------------------
Int0_sub:
If Senzor_1 = 0 And Senzor_2 = 1 Then
Incr Stevec
Disable Interrupts
End If
Return
Int1_sub:
If Senzor_2 = 0 And Senzor_1 = 1 Then
Decr Stevec
Disable Interrupts
End If
Return
|
LP,marko _________________ Kdor visoko leta, daleč vidi. |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Ned Dec 02, 2007 9:11 pm Naslov sporočila: zakaj disable/enable |
|
|
zakaj disable/enable?
Mislim, da je nepotrebno v interrupt rutini delati disable interupta, nič takega ni v njih, da ne bi smele biti prekinnjene.
Nadalje bi jaz v zanki
Koda: | Do
Locate 1 , 1 : Lcd Stevec ; " "
waitms 25
Loop
|
dal mali wait, da ne kar naprej pišeš po lcd-u,
Nadalje bi v interrupt rutini spraševal samo po tistem drugem senzorju, in ne tistemu, ki je povzročil interrupt:
Koda: | Int0_sub:
If Senzor_2 = 1 Then
Incr Stevec
else
decr Stevec
End If
Return |
in v odvisnosti od stanja tega drugega senzorja povečal ali pomanjšal števec
A moje mnenje vzemi z pridržkom, nikoli še nisem odtipaval v praksi rotacijskega dekoderja. _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
marko11 Profesionalec
Pridružen/-a: Ned Jan 2004 18:00 Prispevkov: 112 Kraj: Ponikve
|
Objavljeno: Pon Dec 03, 2007 8:01 pm Naslov sporočila: |
|
|
Vilko, hvala
Bom preizkusil tvojo varianto, bom poročal. _________________ Kdor visoko leta, daleč vidi. |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Sob Dec 15, 2007 5:33 pm Naslov sporočila: Potem pa vse tiho je bilo. |
|
|
Vrtinec so vid'li čolnarji dereč,
a Uršike videl nobeden ni več. _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
marko11 Profesionalec
Pridružen/-a: Ned Jan 2004 18:00 Prispevkov: 112 Kraj: Ponikve
|
Objavljeno: Ned Dec 16, 2007 1:57 pm Naslov sporočila: |
|
|
Vilko!
Lep verz...
Sploh še nisem probal, marsikaj je blo vmes, Abraham, pa ena manjša operacija...
Bom pa zdaj med okrevanjem se malo ukvarjal s to zadevo.
LP,marko _________________ Kdor visoko leta, daleč vidi. |
|
Nazaj na vrh |
|
|
Gustav Profesionalec
Pridružen/-a: Pon Jun 2005 17:19 Prispevkov: 768
|
Objavljeno: Ned Dec 16, 2007 11:12 pm Naslov sporočila: |
|
|
marko11 je napisal/a: | Vilko!
Lep verz... |
Zasluga zanj gre enemu mrtvemu tipu z grdo frizuro (baje narisano po sestri - kaksna sestra ) in inkontinencno tezavo ... Francelj P., ali nekaj podobnega ?! |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Pon Dec 17, 2007 1:13 pm Naslov sporočila: Veš kaj, Gustav, |
|
|
Veš kaj, Gustav,
do našega Franceta bi pa lahko imel več spoštovanja.
Spet trte so rodile,
prijatli, vince nam sladko! _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
BojanR Začetnik
Pridružen/-a: Pon Maj 2006 13:31 Prispevkov: 12
|
Objavljeno: Pon Dec 17, 2007 4:12 pm Naslov sporočila: |
|
|
Pozdravljeni,
Tudi sam nekaj počnem z enkoderjem (snel sem ga kar od PC miške).
In sem probal šteti. Naletel sem na enake probleme kot ti, dokler imaš počasne impulze gre, potem pa ne gre več.
Zadevo okrog interupta zelo pospeši Nosave
Koda: | On Int0 Int0_sub Nosave |
Rabiš samo en interupt in gledaš, v kakšnem stanju je drugi vhod (kot je že rekel Vilko)
Koda: | Int0_sub:
If Senzor_2 = 1 Then
Incr Stevec
else
decr Stevec
End If
Return |
Sam uporabljam disable/enable za interupt, ker vmes zapisujem na LED segmente.
Ker sem sredi drugega projekta, (in sem tega odrinil) bi mi zelo ustrezalo, če mi javiš, kako si zadevo speljal in bi potem to jaz samo prepisal...
_________________ BojanR |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Ned Dec 30, 2007 6:33 am Naslov sporočila: Nosave |
|
|
Nosave prihrani nekaj mikrosekund (ne milisekund) kar je za mehanske naprave, kot je enkoder nepomemben prihranek časa, prinese pa običajno nepopravljivo škodo v programu. Nosave lahko uporabljajo samo tisti, ki točno vedo, kakšne elementarne (assemblerske) instrukcije bo generiral Bascom, in potem lahko ugotove, ali je Nosave dopusten ali ne. Po mojih izkušnjah, čim delaš z prekinitvenem podprogramu z IF ali z variablami ki niso tipa Byte, potem je Nosave prepovedan.
Zakaj pri večjih hitrostih zadeva ne deluje, bi iskal vzrok kje drugje. Morda bi obliki napetosti, ki jo dobiš od enkoderja, bi veljalo pogledat na kakem osciloskopu, morda bi veljalo dodati ka Schmidttrigger za oblikovanje inpulzov, če se ugotovi, da je oblika kriva. Sumim, da se recimo pri dvigu napetosti napetost dviga prepočasi in ne doseže praga, kjer mikroprocesor detektira dvig napetosti, ko s že spet (zaradi velike hitrosti) začne nazaj spuščati. In potem seveda mikroprocesor ne zazna spremembe napetosti.
Je pa seveda to hipoteza, ki bi jo veljalo preveriti.
Pozdrav _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
pepi-c Novinec
Pridružen/-a: Sob Feb 2008 13:14 Prispevkov: 3
|
Objavljeno: Pet Feb 15, 2008 9:40 pm Naslov sporočila: Re: Potem pa vse tiho je bilo. |
|
|
vilko je napisal/a: | Vrtinec so vid'li čolnarji dereč,
a Uršike videl nobeden ni več. |
|
|
Nazaj na vrh |
|
|
marko11 Profesionalec
Pridružen/-a: Ned Jan 2004 18:00 Prispevkov: 112 Kraj: Ponikve
|
Objavljeno: Sob Mar 08, 2008 7:56 pm Naslov sporočila: |
|
|
Pozdravljeni
Po dolgem času sem zopet nekaj poskušal na temu projektu, Encoder.
Uporabil sem D-flip flop in vhodni RC filter, ki ga je predlagal MarkoM na naslovu http://www.elektronik.si/phpBB2/viewtopic.php?t=6328&highlight=enkoder ter slika Encoder.jpg
Bascom coda:
Koda: | Dim Stevec As Integer
Enable Interrupts
On Int0 Int0_sub
On Int1 Int1_sub
Set Tcon.0
Set Tcon.2
Enable Int0
Enable Int1
Senzor_1 Alias P3.2
Senzor_2 Alias P3.3
Stevec = 0
Do
Locate 1 , 1 : Lcd Stevec ; " "
Waitms 250
Loop
End
'--------prekinitvena rutina-------
Int0_sub:
If Senzor_1 = 0 Then
Incr Stevec
End If
Return
Int1_sub:
If Senzor_2 = 0 Then
Decr Stevec
End If
Return |
Do tukaj vse lepo deluje, števec pravilno šteje Gor in Dol.
Nisem še preveril s kakšno hitrostjo lahko še šteje pravilno.
Ko napravim cele kroge v eno stran je štetje točno, ko pa začnem vrteti v drugo stran, ko bi morala biti NIČ, pa mu ostane še ENA.
Problem pa nastane tudi takrat, ko premikam kuliso na mestu, kjer sta senzorja, levo in desno, takrat pa ni več točnega štetja.
Kako sem postavil senzorja: če je to izsek na kulisi ( I__o o__I )
Ne znam pripet slike!
LP,marko _________________ Kdor visoko leta, daleč vidi.
Nazadnje urejal/a marko11 Ned Mar 09, 2008 3:58 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Ned Mar 09, 2008 11:03 am Naslov sporočila: encoder in bascom |
|
|
Marko,
najprej naj povem da moraš najprej definirati interrupt-e potem vklopiti interrupt. V tvoji kodi nikjer ne vidim da si spremenljivko "stevec" postavil na začetno vrednost (vrednost 0, saj Bascom ne ve kakšna naj bo začetna vrednost in je vedno maksimalana (FF, FFFF . . .).
Predlagam da po nastavitvah in vklopu interrupt-a počakaš nekaj 100 mS in potem postaviš "stevec" na nič, ter potem začneš spremljati delovanje enkoderja (se nadaljuje tvoja Do - Loop zanka).
Vlado |
|
Nazaj na vrh |
|
|
marko11 Profesionalec
Pridružen/-a: Ned Jan 2004 18:00 Prispevkov: 112 Kraj: Ponikve
|
Objavljeno: Ned Mar 09, 2008 4:10 pm Naslov sporočila: |
|
|
Vlado:
Saj sem števec postavil na NIč, tiskarski škrat.
Popravljena koda, tako kot si predlagal, če razumem pravilno:
Koda: | Dim Stevec As Integer
On Int0 Int0_sub
On Int1 Int1_sub
Enable Interrupts
Set Tcon.0
Set Tcon.2
Enable Int0
Enable Int1
Senzor_1 Alias P3.2
Senzor_2 Alias P3.3
Waitms 250
Stevec = 0
Do
Locate 1 , 1 : Lcd Stevec ; " "
Waitms 250
Loop
End
'--------prekinitvena rutina-------
Int0_sub:
If Senzor_1 = 0 Then
Incr Stevec
End If
Return
Int1_sub:
If Senzor_2 = 0 Then
Decr Stevec
End If
Return
|
Samo problem štetja pa je še vedno pri kratkih zasukih kulise naprej nazaj.
LP,marko _________________ Kdor visoko leta, daleč vidi. |
|
Nazaj na vrh |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Ned Mar 09, 2008 6:59 pm Naslov sporočila: encoder in bascom |
|
|
Marko,
ali lahko pošlješ kakšen pdf tega senzorja. Iskal sem na netu, vendar nisem našel nobenega.
Citiram: | Int0_sub:
If Senzor_1 = 0 Then
Incr Stevec
End If
Return
Int1_sub:
If Senzor_2 = 0 Then
Decr Stevec
End If
Return
|
zakaj v interrupt-u še enkrat preverjaš ali je pin =0, če ne bi bil ne bi prišlo do prekinitve.
Koliko impulzov daje senzor na en obrat? Če je impulzov zelo veliko, je težko slediti gibanju senzorja.
Vlado |
|
Nazaj na vrh |
|
|
marko11 Profesionalec
Pridružen/-a: Ned Jan 2004 18:00 Prispevkov: 112 Kraj: Ponikve
|
Objavljeno: Pon Mar 10, 2008 7:13 pm Naslov sporočila: |
|
|
Ta HP-jev encoder (HEDS-5310), sem opustil, ker ima verjetno preveč prekinitev(100 na obrat), za Bascom.
Napravil pa sem svoj senzor. Uporabil sem dve foto celici od Omrona (EE-SX772), tako, da štejem samo polne obrate, en obrat en impulz.
Ali se da pripet slika, ki jo imam v računalniku, kako?
LP,marko _________________ Kdor visoko leta, daleč vidi. |
|
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 You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|