Picproje Elektronik Sitesi

DERLEYİCİLER => PICBasic => Konuyu başlatan: ipek - 18 Şubat 2017, 22:24:50

Başlık: Enkoder okuma iyileştirme
Gönderen: ipek - 18 Şubat 2017, 22:24:50
Elimde bir turda  1024 pulse verebilen optik bir encoder var bununla bir devremin posizyonlamasını yapıyorum normal hızda en ufak bir sorun yok...
hızı artırdığımda skop ile A B çıkışlarına baktığımda artık kare dalga formatı olmaktan çıkıp üçgene benziyor ,hele birde kapasite eklersem hepten pozizyon kaçırıyor,yabancı forumlardan aldığım yönlerdirmelerle MC14490 Bounce Eliminator yada TTL 74121 Single Shot ile yapın dedi ve anında düzeldi,istediğim hıza çıkabiliyorum,
ama içimden bu Bounce Glitch saçmalığını bertaraf edebileceğim kanısı geldi,12F675 ile başladım iki kapı OneShot ile ETE hocamın yardımlarıyla bir yere geldim, tek tek SW' lere basın kusursuz çalışıyor,fakat butonların birini basık tutup diğerine basarsanız sistem ikisini bir birine karıştırıyor ,bağımsız çalışması gerekiyor kesme falan derken kontrolü kaybettim,abuk subuk Gray kodu okuduğum için Step motorumda abuk subuk çalışıyor,önerilerinize açığım...

http://s6.dosya.tc/server8/d6tuwd/Single_Shot.rar.html    isis simulasyon 7.10

@ Device PIC12F675,WDT_OFF,PWRT_ON,PROTECT_OFF, CPD_OFF,MCLR_OFF,BOD_OFF,INTRC_OSC_NOCLKOUT
DEFINE OSC 4
DEFINE OSCCAL_1K 1

TRISIO= %000011 : GPIO= 0 :CMCON= 7 : ANSEL= 0 : OPTION_REG= %00000000
WPU= %00000011 : IOC=%00000011 :INTCON= %10001000' Enable the GPIO port change interrupt

ON INTERRUPT GOTO Wake_up

Out_1 VAR GPIO.4
Out_2 VAR GPIO.5

Sw_1  VAR GPIO.0
Sw_2  VAR GPIO.1

Temp var byte

X var word
Y var word

Start:
goto Start

DISABLE

   
Wake_up:

IF Sw_1=0 THEN
  Out_1=1 : Pause 150  : Out_1=0
ENDIF

IF Sw_2=0 THEN
  Out_2=1 : Pause 150  : Out_2=0
ENDIF


Main:   
INTCON.0= 0 ' Clear the RB port change flag bit
TEMP=GPIO
RESUME : ENABLE
END
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: Maxim - 19 Şubat 2017, 15:20:30
benzer kodu protonda gerçek interrupt ile baştan yazarsak bence bir sorun kalmayacaktır.
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: ipek - 19 Şubat 2017, 19:24:41
@Maxim bir fırsat bulduğunda ilgilenirsen sevinirim....
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: sezgin05 - 19 Şubat 2017, 21:32:24
Device 16F877A
Config  HS_OSC,WDT_Off,PWRTE_On,LVP_Off   
Xtal 20
'*************************************
On_Interrupt rotary
Symbol INTF = INTCON.1        ' RB0 External Interrupt Flag
Symbol INTE = INTCON.4        ' RB0 External Interrupt Enable
Symbol GIE  = INTCON.7

'*************************************
TRISA=%00000001
TRISB=%00000011                'I/O ayarlari
TRISC=%00000010
TRISD=%11110010
TRISE=%00000000
Dim     ENCODE      As Word
'*************************************
GoTo over_irq
DelayMS 5
Cls
'**************************************
rotary:
If PORTB.0 = 1 Then
  If PORTB.1 = 1 Then
    Dec ENCODE
    Else                            'Hardware interrupt
    Inc ENCODE
  EndIf
EndIf
INTF=0
Context Restore


over_irq:
GIE  =0
INTE =1
GIE  =1

'***************************************


Stable çalışan bir projemden alıntıdır.
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: necati - 19 Şubat 2017, 21:49:09
https://sites.google.com/site/proyectosroboticos/encoder/encoder-por-software
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: ipek - 19 Şubat 2017, 23:08:42
Arkadaşlar herhalde benim eksik ifade kullanmamdan kaynaklandı,istediğim enkoder okuma prosedürü değildi, zaten kusursuz çalışan bir devrem var ,hız'ı artırdığım zaman Jitter'ler oluşuyor encoder'in ürettiği A ve B çıkışlarını disipline edebilmek için bir birinden tamamen bağımsız çalışabilen One Shot yada Single Shot'a gereksinimim var,sinyali temizleyebilip çıkışından adam gibi kare dalga alabilmek enkoder tellerini kesip araya bunu girmek istiyorum.

devrem ebay'da bulduğum encoderli step motor devresi .normal çalışıyor fakat yazarı defalarca uyarmama rağmen tii'ye almadı, 2 adet 74LS121 mono stable One Shot'ile kusuru düzeltebiliyorum,kusur şu dönen tepsiyi kapattınız,es kaza encoder 11 yani a'da 1 b'de 1 üretiyor o anda sistem sapıtıp kalıyor,elim ile tepsiyi milim oynatıp kod'u bozuyorum her şey mükemmel,one shot işimi gördüğü için one shot yazmaya çalışıyorum kesmelerde iyi değilim.

12F675 'in tek port için external kesmesi mükemmel çalışıyor,fakat merette bu giriş yalnızca bir tane var, şimdi oraya iki tane F675 koysam banada gülerler.

aslında ETE hoca baya yardımcı oldu ama senkron olmadık anlatamadım hocama tek çip'te iki giriş birbirinden tamamen bağımsız olacak birbirinden etkilenmeyek diye
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: OG - 19 Şubat 2017, 23:37:55
Alıntı yapılan: ipek - 19 Şubat 2017, 23:08:42
12F675 'in tek port için external kesmesi mükemmel çalışıyor,fakat merette bu giriş yalnızca bir tane var, şimdi oraya iki tane F675 koysam banada gülerler.
Hocam küçük ailelerin çoğunda external kesme 1 adet dir, problem bu ise PORT değişiklik kesmesini (IOC) kullanabilirsiniz.
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: ipek - 20 Şubat 2017, 00:30:40
zaten IOC ile kullanıyorum, fakat bir giriş 0'da ise diğer çıkışı da etkiliyor yazılımda kesme kusurunu beceremedim, bunu bir elektronik piyano olarak düşünürseniz polifonik daki plsa nota kendi tuşunu korur komşularını rahatsız etmez mevzu bu. her giriş ve çıkış bağımsız olmalı,istenen giriş 0'ra çekildiğinde
çıkış bir olacak fakat izin verdiğimiz süre ölçüsünde ,switch konum değiştirmediyse o switch uyumaya devam etmelidir ,oysa komşu switch onu uyandırıyor asıl sorun burada,bağımsızlık yok,Pic'akış algoritmasına göre zaten bağımsız olamaz aynı anda tek iş yapar kuralını ihlal etmek istiyorum..
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: Maxim - 20 Şubat 2017, 07:08:11
ipek hocam bende birşeyler yaptım
birinci girişe 1000hz, ikincisine aynı anda 2000hz veriyorum
birde bağımsız 3. led her yarım saniyede sönüp yanıyor.
(kod proton+ da yazıldı)

(http://i.hizliresim.com/X0WMRR.jpg)


Device 12F675
Declare Xtal=4
Config CPD_OFF,CP_ON,BODEN_ON,MCLRE_OFF,PWRTE_ON,WDT_OFF,INTRC_OSC_NOCLKOUT

TRISIO=%00000011
GPIO=%00000000
IOC=%00000011
Declare All_Digital= true

OPTION_REG.7=0
WPU=%00000011
CMCON=7

Symbol SW_1= GPIO.0
Symbol SW_2= GPIO.1
Symbol OUT_1= GPIO.4
Symbol OUT_2= GPIO.5

Symbol GIE = INTCON.7
Symbol GPIE = INTCON.3
Symbol GPIF = INTCON.0

While GIE=1 : GIE=0 : Wend
On_Hardware_Interrupt GoTo Kesme
GPIE=1
GIE=1

Loop:
High GPIO.2:DelayMS 500:Low GPIO.2:DelayMS 500
GoTo Loop

Kesme:
Context Save

If GPIF=1 Then
If SW_1=0 Then OUT_1=1:Else:OUT_1=0
If SW_2=0 Then OUT_2=1:Else:OUT_2=0
EndIf

GPIF = 0
Context Restore



:100000000000000000002F28DF0003088301DE004D
:100010005928A301A200FF30A207031CA307031C59
:100020002B280330A100DF3017200B28A101E83E68
:10003000A000A109FC30031C2028A00703181D28DC
:10004000A0070000A10F1D2820182628A01C2A2880
:1000500000002A2808008313831203130800830179
:1000600003308316850083128501831696009F0155
:1000700007308312990083168113033095000730EF
:10008000831299008B1F46288B1342288B158B17E0
:1000900083160511831205150130A300F4300A20E0
:1000A00083160511831205110130A300F4300A20D4
:1000B00048280B1C652805185F28051660280512BE
:1000C000851864288516652885120B105E08830044
:0800D000DF0E5F0E09006B2832
:02400E00443F2D
:00000001FF
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: ipek - 20 Şubat 2017, 08:18:45
@Maxim Hocam
bağımsız çalışması çok harika olmuş ,fakat yarı otomatik tüfek gibi düşünürsek ateş ederken tetiğe bastık,kurşun namluyu terkedip gitti,(bu bizim çıkış portumuzun çıkışı High'de tutuma süresi) elimiz hala tetikte,elimizi tetikten kaldırmadığımız halde ilgili çıkış portu high vermeye devam ediyor..

oysa sadece tanımlanmış süre kadar High vermeli (one shot yada single shot mantığı yani tek atış), devamını dört gözle bekliyorum..
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: Maxim - 20 Şubat 2017, 08:42:23
Alıntı yapılan: ipek - 20 Şubat 2017, 08:18:45
@Maxim Hocam
bağımsız çalışması çok harika olmuş ,fakat yarı otomatik tüfek gibi düşünürsek ateş ederken tetiğe bastık,kurşun namluyu terkedip gitti,(bu bizim çıkış portumuzun çıkışı High'de tutuma süresi) elimiz hala tetikte,elimizi tetikten kaldırmadığımız halde ilgili çıkış portu high vermeye devam ediyor..

oysa sadece tanımlanmış süre kadar High vermeli (one shot yada single shot mantığı yani tek atış), devamını dört gözle bekliyorum..

hımm iş zorlaştı :)
ama bence mümkün, birkaç deneme yapayım
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: miyago - 20 Şubat 2017, 09:12:28
Merhaba

74Hc14 tarzında bir entegre kullanmanı tavsiye ederim.
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: bmutlu - 20 Şubat 2017, 09:12:59
@ipek tek kesmeniz var ise aşağıdaki devre ile okuma yapabilirsiniz .bir önceki durumu saklamak kaydıyla yazılımı bu şekilde düşünmelisiniz..
(https://s18.postimg.cc/hf896y2v9/encoder.jpg) (https://postimg.cc/image/hf896y2v9/)
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: ipek - 20 Şubat 2017, 09:45:46
@ miyago  tek kapı ve ard' arda denedim monostable gibi başarılı değiler, düşük hızda çözüm ,yüksek hızda kararsızlaşıyorlar.ama her zaman
Schmitt Trigger mantığını sevmişimdir...


@bmutlu ben bunu diyot ile denedim başarılı olamadım ,bu kadar IC kullanınca işin espirisi bozuluyor,ama kulağıma küpe olsun yeri gelir lazım olur..

kişişel kartlarım interactive alış verişe açık değil,paypal'de gümledi aslında çok şirin bir ürün buldum ama pes etmek yok....MAX6817
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: Maxim - 20 Şubat 2017, 10:09:40
şöyle düşünüyorum ama henüz bakamadım
IOC int ile girişleri algılıyoruz bunda sorun yok

ardından timer0 veya timer1 istediğimiz süre boyunca tetikliyoruz
bu süre boyunca çıkışlar highda kalacak, diğer türlü low
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: skara1214 - 20 Şubat 2017, 10:17:42
12f675 gibi birşeyle uğraşcağınıza 18f2431 gibi üstünde encoder modulu bulan bir işlemci ile uğraşşanız? Belki filtre v.s değerleriyle oynayıp sıkıntısız sonuçlar alabilirsiniz.Yalnız burada dikkatimi çeken birşey var. Sinyal şekli kareden üçgene  dönüyorsa o encoder o hızlar için uygun  değildir gibime geliyor. Bahsettiğiniz yöntemler sadece yara bandı tarzı bir uygulama olmuş. Daha hızlı response veren encoder kullansanız daha iyi olur.
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: ipek - 20 Şubat 2017, 10:56:42
@skara1214
elbette fikirleriniz benim için değerli.. fakat tek bir monostable IC waveform'u hemen düzeltip disiplin edebiliyor, ve yüksek hızlara sorunsuzca tırmanabiliyor,
benim asıl sorunum sisteme ilk voltajı verdiğimde yada durdurup başlattığımda Enc girişleri 11 'de kalabiliyor ve sistem sapıtıyor,diğer taraf hazır devre olduğu için müdahele edemiyorum normal encoder mantığında iki bit'lik truth table'de yer alan her komum bir kod,benim maksadım kodu okumak değil ,interrtup her geldiğinde sadece o truth table'yi sisteme aktarabilmek ,interrupt yok iken çıkışta yok,one shot mantığı çok basittir,benim talihsizliğim her hangi bir uygulamada rastlayamamış olmam,Wend mantığı buna pek yakın ama kesme içinde wend verirsem kesmedende çıkmıyor,yada ben çıkaramıyorum :D
özet basit bir şey olsun donanım arzu etmesin...
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: Maxim - 20 Şubat 2017, 12:19:44
soru: çıkışların high olma zaman süresi ms cinsinden ne olabilir?
min-max ms?
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: ipek - 20 Şubat 2017, 13:35:11
50ms low 150ms High olabilir mesela..
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: ipek - 22 Şubat 2017, 00:02:08
https://www.elmelectronics.com/wp-content/uploads/2016/07/ELM401DS.pdf


noktayı koymuş...
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: JOKERAS - 22 Şubat 2017, 13:26:23
Debounce'dan kaynaklı bir sorun gibi.
Hani buton okumada meydana gelen olay varya işte aynısı.
Buton okurken ne oluyor?
Butona bastığımız ve bıraktığımız anda oluşan Debounce ortalığı mahvediyor.
Kare dalga diye tabir ettiğimiz sinyallerin hiçbiri kare değilki,sadece biz öyle olduğunu sanıyoruz.
Hız arttıkça sinyal  Kare'den uzaklaşır.
Ama bunun önemi yok.Çünkü bizim için önemli olan sinyalin histeri bölgesi.
Pic girişleri Schmitt Trigger,yani bizim sinyalimizin yükselen ve düşen Flash bölgelerini tespit edebilecek kabiliyette.
Schmitt Trigger giriş o gürültüden patırtıdan etkileniyor.

Debounce Filitresi. Bence şöyle bir yöntem uygularsanız sorunu çözersiniz diye tahmin ediyorum.

İlk düşen veya yükselen interrupt geldiği anda interrupt rutininde IOC İnterruptını kapatacaksınız.
İlk yükselen veya düşen kenarımız geldi ve İnt oluştu,bu gelen kenarlar parazit olabilir.
Bunu tespit etmek için Timer counterı sıfırlayıp Timer interruptını başlatın.
Timer sayıyor tabi bu sırada sayısız IOCgeliyor ama işlemci "hadi ordan serseri" diyerek bu IOC İnterruplarını tanımıyor.
Çünkü İlk düşen veya Yükselen kenarda kapattıkya.
Belirlediğimiz bir zamanda taşan Timer, taştığında İnt rutinine giriyor ve IOC portuna bakıyor Yükselen kenarsa PORT logic 1'mi?
Düşen Kenarsa Port Logic 0'mı diye.Logic 0 olduğunu varsayarsak.Evet bu kadar zaman geçti ve  Port Logic 0.O zaman bu parazit değil!Doğru bilgi.
Timer bloğunda IOC Kenarını değişitir IOC İnteruptını aç.Aynı işlemleri Yükselen kenar için uygulayıp deneyin.

Pic bu işi yaparken bayağı meşgul olacak,Display falan fıstık varsa Encoderi dönderdiğinizde Displayde
titreme olur,başka kritik işler varsa gecikmeler olur.Onun için Encoderi donanım olarak içinde barındıran Picler var.
Ayrıca yeni Piclerde CLC (Configre Logic Cell) diye bir donanım var,her türlü Logic giriş olarak konfigre edilebiliniyor.
Bir bakın isterseniz.



Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: ipek - 22 Şubat 2017, 18:46:06
bugün 4 saat Glitch filitreler ile uğraştım Bourns Grayhill ve ALPS firmalarının önerilerini denedim, eh iyiye yakın performans fakat MC14490'ın kalitesine bile yanaşamadım,Y.Müh bir dostum var sanayi elektroniğinle haşır neşir, bizde genelde HP Avago HCTL2001....32  serisi sırf encoder okuyan bu iş için dizayn edilmiş IC'ler ile donatılmıştır tek bir pulse bile kaçırmaz  deyince ,kısa bir araştırma yaptım,hevesim kırılmadı ama kısır döngü'de kaldım,hardware her zaman iyidir..
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: Maxim - 23 Şubat 2017, 07:25:43
ben bu hafta yoğunum pek vakit bulamıyorum ayrıca nasıl bir yol izlemek lazım kararda veremedim.
yani eksiksiz bir liste yapabilirsek iş kolaylaşacak

yukarıda verdiğiniz elm401ds entegresinde yapılan gibi (kaldıki %99.99 o da 12 serisi bir pic)
-girişi int ile algıla
-bilmem kaç ms gecikme ver
-x frekansı kadar bir filtreleme yap
-yüksek frekansları filtreleme yap
-şöyle yap
-böyle yap
gibi
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: ete - 23 Şubat 2017, 07:52:21
Baştan aşağı mesajları okudum. Ne istenildiğini anlamaya çalışıyorum sadece. Çünki daima problemi bilirseniz çözüm üretebilirsiniz bilmezseniz debelenip durursunuz.
Tespit ettiğim husu şu. İki tane encoder pini var. Bunlar faz farkı ile kesme oluşturuyor ve her biri bağımsız bir çıkışı belirli süre high low yapacak. Sürelerde bir birlerini etkilemeyecek. Etkilemeyecek derkenbirisi pause kullanıp HIGH yaparken diğerine tetik gelmiş ise oda high konumuna geçmesi gerek ama önceki pause komutunu icra ediyor olacağı için ikincinin emri yerine getirilemeyecek demektir. Kısaca bu iş pause komutları ile olmaz. Döngüsel gecikme ilede olmaz . Her iki çıkış için bağımsız timer kullanmaktan başka çözüm yok bu işte. Birine TMR0 diğerinede TM1 kullanarak yapılabilir diye düşünüyorum.
Tabiiki IOC komutu hem LOW_HIGH hemde HIGH-LOW geçişlerinde kesmeye sokarsa süper olur. Sokmaz ise başka çare düşünmek gerek. Unutulmaması gereken şey kesmenin bir işe yaramasını sağlamak. Her konumda timer lar kesme içinde start almalı main içinde sonlanmalı diye düşünüyorum. Yada timerlerıda kesmeye bağlayıp her şeyi kesme içinde halletmek belkide en doğrusu ama basit gibi gözüken bu işte yoğun bir program algritması çalışması gerekiyor.
Sabah yazdım bu mesajı gün içinde biraz uğraşacağım konuyla.
Ete
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: ete - 23 Şubat 2017, 10:20:28
Birşeyler karaladım.Çalışıyor gözüküyor. Kesme olduğunu anlayabilmek için bir led daha ilave etmiştim. Gerekirse çıkartılabilir.
Dosyalar aşağıdaki linktedir.

https://1drv.ms/u/s!AvTLMS2z03FN3CHJZdfnP5_QQmGt

Önceki mesajımda bahsettiğim şekilde yaptım. Her bir sw basılması yada sw girişinin LOW olması kesme oluşmasına sebep oluyor.
SW_1 i ,TMR1 sayacına bağladım ona 150 ms lik gecikme yaratacak şekilde bir önyükleme değeri verdim. Kesme içinde çıkış-1 iset edip önyükleme değerinide verip çıkıyor kesmeden

SW_2 ye TMR0 sayacını verdim ve bu sayac ile 1/256 bölme oranında en fazla 50 ms ik gecikme yaratabildiğimiz için KES  isimli bir değişken değerini kullanarak 3 adet kesmeyi saydırdım. Kesme oluştuğunda TMR0 a önyükleme değerini verip kesme bayrağını sıfırlayıp KES=3 değerinde verip çıkıyoruz kesmeden.
Ana program kısmında ise gerek TMR1 kesmesini ve gerekese TMR0 kesmesinin oluşup oluşmadığını kontrol ediyoruz.
TMR1 kesmesi olduğunda (PIR1=1) 150 ms geçmiş olacağı için direk Çıkış_1'i LOW yapıyor ve kesme bayrağını sıfırlıyoruz. Yeniden SW_1 basılıncaya kadar sistem beklemiş oluyor.
TMR0 kesmesi olduğunda (INTCON.2=1) ise kes değerindenbir eksiltiyoruz değer sıfır olmuş ise süre 150 ms dir deyip Çıkış_2 yi LOW yapıyoruz.
Sistem bu. Yükleyemeyenler için programı buraya da koyayım en iyisi;
'@ Device PIC12F675,WDT_OFF,PWRT_ON,PROTECT_OFF, CPD_OFF,MCLR_OFF,BOD_OFF,INTRC_OSC_NOCLKOUT
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF

DEFINE OSC 4
DEFINE OSCCAL_1K 1

TRISIO= %000011 : GPIO= 0 :CMCON= 7 : ANSEL= 0 : OPTION_REG= %01000111
WPU= %00000011 : IOC=%00000011 :INTCON= %10001000' Enable the GPIO port change interrupt

ON INTERRUPT GOTO Wake_up
T1CON=%00110101:
Out_1 VAR GPIO.4
Out_2 VAR GPIO.5

Sw_1  VAR GPIO.0
Sw_2  VAR GPIO.1

Temp var byte
KES  VAR BYTE

X var word
Y var word

Start:
IF PIR1.0=1 AND OUT_1=1 THEN
   OUT_1=0:PIR1.0=0
ENDIF   
     
IF INTCON.2=1 AND KES>0 THEN
   KES=KES-1:INTCON.2=0
   IF KES=0 THEN 
     OUT_2=0
   ENDIF
ENDIF
     
goto Start

DISABLE

   
Wake_up:
TOGGLE GPIO.2

Main:   
IF SW_1=0 THEN
   TMR1H=$B6:TMR1L=$C6
   OUT_1=1:PIR1.0=0
ENDIF

IF SW_2=0 THEN
  TMR0=60:OUT_2=1:KES=3
  INTCON.2=0
ENDIF 
     
INTCON.0= 0 ' Clear the RB port change flag bit
TEMP=GPIO
RESUME : ENABLE
END


Bu sistemin tek bir mahsuru var. Şayet sisteme bir encoder bağlarsanız ve encoderin puls peryodu 150 ms ninaltında olursa her iki çıkıştaki led sürekli yanar. Çünki 150 ms den önce yeniden kesme oluşur ve timer değerleri yenilenir. Bununda çaresi var ama çareleri ortaya serdikçe amaçtan uzaklaşırız gibime geliyor. Amaç ledlerin yanmasınımı görmek yoksa encoder le saydırma mı yapmak tercihe göre gerekirse süreler 50 şer ms ye kadar düşürülür. Amaç step motor sürmek ise us ler seviyesinde çıkış verdirmek belkide en doğrusudur. Doğru süreyi bulup ona uygun değer vermek gerekir diye düşünüyorum.
Ete
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: ipek - 23 Şubat 2017, 14:18:39
Hocam ilginize teşekkür ederim, bunu hardware olarak cumartesi deneyeceğim ,encoder için kullanacağım..
butonların birini sağ klik ile basılı tutup diğer butona bastığımızda,her iki çıkışta etkileniyor, 12F675 acaba bu iş için hızımı yeterli değil,
hocam şu adresi inceleyebilirseniz,bu ürün 12F629 ile yapmış üstüne ELM logosu basmış,elime tesadüfen geçti bu kusursuz çalışıyor.amacım böyle bir şey yapabilmek idi....
Başlık: Ynt: Enkoder okuma iyileştirme
Gönderen: ete - 24 Şubat 2017, 20:51:11
Etkilenme sebebi kesinlikle ledleri yaktıktan sonra verdiğimiz 150 ms lik gecikme süresi olsa gerek. Bu süre daha kısa olmalı bence. Encoder bundan hızlı sayıyor ve bu nednele yeniden ledi yak emrini henüz sönmeden veriyor. ledlerin yanık kalması süreye bağımlı kalmadan encoder pinlerinin okunmaya devam ettiğinin bir göstergesidir.

Ete