Kazalo po Svet elektronike forumu Svet elektronike
Revija za prave elektronike
 
AlbumAlbum   Pomoč pogostih vprašanjPomoč pogostih vprašanj   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil   PrijavaPrijava 

Encoder in Bascom
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
marko11
Profesionalec


Pridružen/-a: Ned Jan 2004 18:00
Prispevkov: 112
Kraj: Ponikve

PrispevekObjavljeno: Čet Nov 29, 2007 8:09 pm    Naslov sporočila: Encoder in Bascom Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Ned Dec 02, 2007 9:11 pm    Naslov sporočila: zakaj disable/enable Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Profesionalec


Pridružen/-a: Ned Jan 2004 18:00
Prispevkov: 112
Kraj: Ponikve

PrispevekObjavljeno: Pon Dec 03, 2007 8:01 pm    Naslov sporočila: Odgovori s citatom

Vilko, hvala
Bom preizkusil tvojo varianto, bom poročal.

_________________
Kdor visoko leta, daleč vidi.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Sob Dec 15, 2007 5:33 pm    Naslov sporočila: Potem pa vse tiho je bilo. Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Profesionalec


Pridružen/-a: Ned Jan 2004 18:00
Prispevkov: 112
Kraj: Ponikve

PrispevekObjavljeno: Ned Dec 16, 2007 1:57 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Gustav
Profesionalec


Pridružen/-a: Pon Jun 2005 17:19
Prispevkov: 768

PrispevekObjavljeno: Ned Dec 16, 2007 11:12 pm    Naslov sporočila: Odgovori s citatom

marko11 je napisal/a:
Vilko!
Lep verz...


Zasluga zanj gre enemu mrtvemu tipu z grdo frizuro (baje narisano po sestri - kaksna sestra Rolling Eyes ) in inkontinencno tezavo ... Francelj P., ali nekaj podobnega ?! Confused
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Pon Dec 17, 2007 1:13 pm    Naslov sporočila: Veš kaj, Gustav, Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
BojanR
Začetnik


Pridružen/-a: Pon Maj 2006 13:31
Prispevkov: 12

PrispevekObjavljeno: Pon Dec 17, 2007 4:12 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Ned Dec 30, 2007 6:33 am    Naslov sporočila: Nosave Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
pepi-c
Novinec


Pridružen/-a: Sob Feb 2008 13:14
Prispevkov: 3

PrispevekObjavljeno: Pet Feb 15, 2008 9:40 pm    Naslov sporočila: Re: Potem pa vse tiho je bilo. Odgovori s citatom

vilko je napisal/a:
Vrtinec so vid'li čolnarji dereč,
a Uršike videl nobeden ni več.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Profesionalec


Pridružen/-a: Ned Jan 2004 18:00
Prispevkov: 112
Kraj: Ponikve

PrispevekObjavljeno: Sob Mar 08, 2008 7:56 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 556
Kraj: Ljubljana

PrispevekObjavljeno: Ned Mar 09, 2008 11:03 am    Naslov sporočila: encoder in bascom Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Profesionalec


Pridružen/-a: Ned Jan 2004 18:00
Prispevkov: 112
Kraj: Ponikve

PrispevekObjavljeno: Ned Mar 09, 2008 4:10 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 556
Kraj: Ljubljana

PrispevekObjavljeno: Ned Mar 09, 2008 6:59 pm    Naslov sporočila: encoder in bascom Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Profesionalec


Pridružen/-a: Ned Jan 2004 18:00
Prispevkov: 112
Kraj: Ponikve

PrispevekObjavljeno: Pon Mar 10, 2008 7:13 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika Časovni pas GMT + 1 ura, srednjeevropski - zimski čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
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
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group