ENCODERDE OKUNAN DEĞERİ KAYDETMEK

Başlatan EGEHAYDAR, 21 Ekim 2008, 20:45:48

EGEHAYDAR

Rotary encoderle ileri geri sayım yapabiliyorum.Bunda bir sorun yok.Benim sorunum bu sayıların kaydedilmesi sırasında oluyor.Encoder sayım sırasında kaydetme işlemi yaparsam PIC puls kaçırıyor.Buda ölçüm sonucun yanlış çıkmasına neden oluyor.Acaba hem saydırmanın sağlıklı olması,hem de PIC in enerjisinin kesilip tekrar enerjilendikten sonra son değerin ekranda görülmesi için ne yapmam gerekiyor.
NOT:Sayma girişi olarak RB.0 harici kesmesini kullanıyorum.
TOPLUMA FAYDALI OLMAK İSTİYORSAN DOĞRU BİLDİĞİNİ PAYLAŞ.

Maxim

picin eepromuna birşey kaydetmek 10ms sürüyor ,
o yüzden kaçırma falan oluyordur heralde ,
enerji kesildiği sırada o değeri kayıt etmek gerekiyor ,
bu konuda arkadaşların çalışmaları var sitede ,

EGEHAYDAR

Ben bulamadım.Hangi konu başlığı ile arayacağız acaba.Şimdiden teşekkürler.
TOPLUMA FAYDALI OLMAK İSTİYORSAN DOĞRU BİLDİĞİNİ PAYLAŞ.

ete

Encoder den okunan bilginin sürekli olarakkayıt edilmesi hem zaman alan bir işlem hemde eeproma lüzümsuz yere fazladan kayıt yapılmasına sebep olan bir işlemdir. o nedenle biraz akıllı olmak gerekiyor. Şunu kast ediyorum.
Şayet encoder dönmesine devam ediyor ise gelen bilgiyi hemen kayıt etmeye gerek yok diye düşünüyorum. Zira bu bilgi zaten hemen değişecek. O halde ne yapmak gerek? tabiiki encoderin durduğu bir anı yakalamak en doğru kayıt zamanı olacaktır.
Bu nedenle iki okuma arasında belirli bir sayacıda çalıştırmak gerek.
Okuma yapıldığında sayacı sıfırlamak ve sonuçta sayac değeri belirli bir sayıya ulaşıncada o andaki bilgiyi kayıt etmek en akıllıca yöntem olacaktır. en azından bu benim bulduğum yöntem. Daha iyisi olabilir. Düşünen var ise onuda bilmek isterim doğrusu.
Örnek vermek gerekir ise,

       OLD = PORTB & %11110000
         
TEKRAR:
        gosub ekran_set	
        NEW = PORTB & %11110000
	      IF NEW = OLD Then 
          SURE=SURE+1
          if SURE=50 then KAYIT
          goto TEKRAR
        endif
        SURE=0
        YONV=YON_VA ^ YON_VB
        VOLT_SET=VOLT_SET+1-2*YONV
        if volt_set>1000 then volt_set=1000
        if volt_set=65535 then volt_set=0


ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

EGEHAYDAR

ETE hocam dediğinizi yaptım ve sonuca ulaştım.Başka bir sorun oluştu.
O da ben dısplay kullanıyorum.PIC hafızaya kaydetme sırasında dısplaylerin ışıklarında azalma oluyor.Bu sorunu nasıl çözebilirim.Bir öneriniz varmı?Şimdiden teşekkür ederim.
TOPLUMA FAYDALI OLMAK İSTİYORSAN DOĞRU BİLDİĞİNİ PAYLAŞ.

mihri

Eğer display'i tarama yöntemiyle sürüyorsan kaydetme işlemindeki zaman gecikmesi displayin sönük görünmesine neden olabilir. En sağlam yöntem displayi sürmek için 4511 kullanmak. Ama maliyeti düşürmek, alandan kazanmak istiyorsan daha yaratıcı bir çözüm gerekli.
"Eppur si muove!"

ete

Mihri doğru söylüyor. Üstelik nasıl bir display LCD mi 7 segmentmi belirtmemişsin. Nasıl yorum yapayım ki?. Ama mantıklı düşünürsek ancak taramalı 7 segment sürülürse bu problem meydana gelebilir ve onda da yapacak bir şey yok maalesef. Daha doğrusu aklıma başka bir şey gelmiyor.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

sezgin05

Benim kullandığım bir çözümden bahsedeyim.Ben sadece encoder ve pici hafıza pili ile besliyorum.Elektrik kesildiğinde ekran falan gidiyor sadece pic ve encoder çalışıyor.Dolayısıyla kayıt yapmak zorunda kalmıyorum.Bunun bir avantajı ise elektrik gittiğinde encoder pozisyonun başka etkilerle kaymasınıda önlemiş oluyorsun.
Bu bana uymaz dersen şöyle bir çözümde geçerlidir:
Picin beslemesine 3300Uf gibi büyük bir kondansatörü diyottan geçerek koy.Diyottan önceki voltajıda picin boş bir ayağına gir.Elektrik kesildiğin bu ayakta sıfır olacağı için kondansatör boşalana kadar kayıt yaptırırsın..

EGEHAYDAR

7 Segment dısplay ve 4511 kullanıyorum.Piyasada satılan hazır sayıcıların içini açtığımda her dijit için ayrı 4511 kullanıldığını gördüm.Bu yöntem kesin çözüm olabilir.Ama maliyet durumunu düşünmek gerekir.Peki bir sorum daha olacak.Ben encoderin uçalarından bir tanesini PORTB.0 a diğerini de  PORTA.0 a bağladım.Kesme programınıda şu şekilde yaptım;

DISABLE
KESME:        
BEKLEME=0


PORTA.0=0 THEN COGAL
PORTA.0=1 THEN AZALT

COGAL:
SAYI=SAYI+1
GOTO  GEC
AZALT:
SAYI=SAYI-1

GEC:
IF SAYI=>10000 THEN SAYI=0
INTCON.1 = 0
RESUME
ENABLE

Encoderi ileri geri yaptığımda sayı azalıp çoğalıyor.Ama encoderi 5 - 6 kere ileri geri yapıp başlangıç noktasına getirdiğimde 1 veya 2 puls kaçtığını gördüm.Test için 100 encoder kullandım ve çevirme işlemini yavaş yaptım.Esas uygulamada 500 lük encoder kullanmayı ve daha hızlı  turlarda dönmesi gerekecek.Bu puls kaçırması da problem oluşturacak.Acaba kesme programında mı sorun var yoksa pıc pulslerimi kaçırıyor.Bu konuda fikir verebilirmisiniz.
PIC olarak 877 20 Mhz. kristal kullanıyorum.Ana programda da sadece dısplay tarama döngüsü var. Şimdiden teşekkür ederim.
TOPLUMA FAYDALI OLMAK İSTİYORSAN DOĞRU BİLDİĞİNİ PAYLAŞ.

mucit07

düsük voltaj kesmesini kullan voltaj düstügü zaman bilgileri kaydetsin

EGEHAYDAR

TOPLUMA FAYDALI OLMAK İSTİYORSAN DOĞRU BİLDİĞİNİ PAYLAŞ.