A

Pulsin ve PWM okuma

Başlatan aytekin, 21 Ekim 2011, 22:05:16

Mastercodex

Ete Hocam,

Yardımlarınız ve bilgi paylaşımınız için çok teşekkür ederim. Aynen dediğiniz gibi sizin örneklerinizide kendime göre yorumlayarak devreyi oluşturacağım.Bu arada yeni başlayan biri olarak bu işi sağlam temeller ile öğrenmek için sizin paylaşım ve derslerinizden başka önerebileceğiniz bir kaynaklarda varsa  sizden öğrenmek isterim.Bu arada sitenize üye olarak çok büyük bir bilgi hazinesine sahip olduğumu düşünüyorum.

İlginiz için tekrar teşekkür eder size işlerinizde başarılar dilerim.

Saygılarımla
Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

pwm3434

Bu kitaba bir  göz  at istersen  benim  işime  yarıyor. google de  arattır  eğer istanbulda isen beyazıt sahaflar  çarşısından  temin  edebilirsin.  PİC BASİC PRO ile PIC  PROGRAMLAMA    yazar orhan altınbaşak     Yayınevi: altaş yayıncılık

Mastercodex

Teşekkürler Pwm3434 arkadaşım .Kitabı karşımızdaki kitapçıda buldum ve çok iyi bir kitaba benziyor.
Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

Mastercodex

Merhaba ,

Arkadaşlar Ete hocamızın dediği gibi RB / INT kesmesi ile sinyali yükselen kenarda yakalıyorum.Yakaladığım yükselen kenarı RA0 portundan çıkış olarak veriyorum.Böylece RB0 / INT girişinden giren sinyalin aynısını RA0 çıkışından çrnekliyorum ama sinyalin her yükselen kenar kesme yakalamasında girişteki sinyalin yüksaelen kenarı ile çıkıştaki sinyalin yükselen kenarı arasında 1us ile ?us arasında kaymalar oluşuyor.Buda devremin stabil çalışmadığını gösteriyor.Acaba kodlardamı bir yanlışım var.

Kodlar

ON INTERRUPT GoTo KESME
OPTION_REG=%11001000
INTCON=%10010000
TRISB=%00111101
TRISA=%00000000
CMCON=7
R VAR WORD : R=0
F VAR WORD : F=8300
'—————————————————————–
SYMBOL LED=PORTA.0
led=0
'——————————————————————-
BASLA:
    IF PORTB.2=0 AND R < 2500 THEN
        R=R+1 : F=F-1
    ENDIF
    IF PORTB.3=0 AND R > 0 THEN
        R=R-1 : F=F+1
    ENDIF
    IF PORTB.4=0 AND F < 10800-R THEN
        F=F+1
    ENDIF
    IF PORTB.5=0 AND F > 8300-R THEN
        F=F-1
    ENDIF
goto basla

DISABLE

KESME:
    PAUSEUS R
    HIGH led
    PAUSEUS F
    LOW LED
INTCON.1=0
Resume
Enable
End


Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

ete

#19
iki sinyal arasınsa 1us den fazla fark olması gerekir.  Bu fark komut gecikmelerinden kaynaklanır. Şayet 1us gibi düşük bir değerde ise süper. Bu gecikmelerden kaçamazsın ancak çalışma frekansını yükselterek aza düşürebilirsin.
4 Mhz frekansta her bir ASM komutu 1us lik zaman alır Basic komutu ne kadar alır gerisini sen düşün. Basic komutu birden fazla ASM komutundan oluşmaktadır.  Frekansı 20 Mhz e yükseltirsen komut çevrim süresi 0,2us ye düşerki buda farkı epeyce azaltacaktır.

Aslında programda tam benim tarif ettiğim şekilde değil. Sinyalin bir ucunu yakalıyorsun ama diğer ucunu gecikme ile üretiyorsun. Halbuki tamamen gelen sinyale paralel oluşturabilirsin. Kesmede gecikme komutu olmaması gerekir.
Bir kare dalga sinyali yükselen kenarla başlar ilerler ve düşen kenara dönüşür ilerler tekrar yükselen kenara döner.
O halde sen önce yükselen kenarı yakalarsın. Sonra sistemi düşen kenara çevirip bu seferde düşen kenarı yakalarsın.
Kesme kısmında ise yalnızca  CIKIS=1-CIKIS demen yeterlidir. Böylece çıkan sinyal girenin bir aynası şeklinde oluşur.
Sen yükselen kısmını yakalayıp HIGH çıkış diyorsun pause bekle deyip LOW çıkış diyorsun sonra pause bekle diyorsun. Bu yanlış. Ama ne ikmetse gecikme problemi hariç sana doğru gibi gözüküyor acaba bize ne yapacağını tarif ederkenmi bir şeyleri atlıyorsunda biz yanlış anlıyoruz.

Ben olsam kesme kısmını şöyle yapardım;
Programın basla satırından evvel şunu ilave ederim.
Led=0
OPTION_REG.6=1
KESME:
          led=1-led
          OPTION_REG.6=1-Led
INTCON.1=0
Resume
Enable
End
Bu şekilde  ilk kesme oluştuğunda sinyalin yükselen kenarıyakalanmış olacak ve led=1 yapılacak. Option reg.6 ise  ise  led in tersi olarak 0 yapılacak yanidüşen kenarı yakala anlamına gelecek. Bu sefer ikinci kesme sinyalin düşen kenarını yakalayacak ve led=0 olacak option reg.6 ise 1 olacak yani yükselen kenarı yakalayacak.
Hepsi bu.

Ete

Mastercodex

Merhaba ,

İlginiz için teşekkür ederim.Aynen sizin dediğiniz gibi yükselen ve alçalan kearı yakaladım ve girişteki sinyalin aynısını çıkıştan aldım.Ben bu çalışmalarda yeni olduğum için bazı noktaları bilemiyorum.Burada bu devreyi tasarlamamın nedeni kesme olayını tam anlamıyla kavrayabilmek.

Bu sinyali yakaladıktan sonra mesela yükselen kenarına 50us ve düşen kenarına ise 100us gecikme ilave etmek istiyorum ama kesme içinde gecikme olmaması gerekir dediğiniz için bu gecikmeleri ayrı bir proceduremi yazmam gerekiyor.

Daha önceden VB.net ile program yazdığım için tüm komutlara hakimdim ama picbasic benzer olmasına karşın uyulması gereken kuralları farklı gibi gözüküyor.Elektronik devre kurma ve çalıştırma konularındada hiçbir problem yaşamıyorum ama PİC programlama olayı farklı bir olay tabiki.

Bu arada sadece kesmeler değil sizin diğer ders notlarınızıda birebir okuyup uygulamaya çalışıyorum.
Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

ete

Gelen sinyalin aynısını yakalamak farklı bir şey o sinyali değiştirmek ise daha farklı bir olaydır.
Bir sinyali yakalayıp ona gecikme ilave edince bir sonraki yakalama işlemini kaçırma ihtimalin olacağını hesaba katıyorsundur umarım.
Kesme de gecikme olmaz derken sinyali oluştururken bozulmasını engellemek için idi. Yoksa kesmede gecikme kullanabilirsin.
Ama dediğim gibi süreleri iyi ayarlaman lazım yoksa bir sonraki kenar yakalama işi aksayabilir.

Ete

Mastercodex

Şİmdi dediğinizi anladım ve uyguladım.Aynen dediğiniz gibi , mesela 60 hz frekansta yükselen kenar ile düşen kenar arası T süresi 8.30ms.Buna göre kesme alt programı şöyle oluyor ,

KESME:
    IF LED=0 THEN pauseus R
    IF LED=1 THEN PAUSEUS F
    LED=1-LED
    OPTION_REG.6=1-LED
    INTCON.1=0
Resume
Enable
End

Burada R değişkeni min 0 max 3500us ve aynen F değişkenide min 0 max 3500us olduğu zaman yükselen kenarıda alçalan kenarıda çok mükemmel yakalıyor.Aynen bu kodları yazdım ve tüm sorunlar çözüldü.TAbiki frekans arttıkça bu değerlerin değişeceğinide hesaba katmak gerekiyor.Bu kesme temelleri üzerine birkaç deneme daha yapıp diğer derslerinize geçeceğim.

Yardımlarınıza için çok teşekkür ederim.
Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

Mastercodex

Merhaba ete hocam ,

Yazdığım picbasic pro kodlarını İsis programında simule ediyorum ama tabiki tam olarak gvenemiyorum.-Bu yüzden birebir yazdığım kodları bir geliştirme kartı üzerinde denemek istiyorum.Bu devre hem programlama hemde geliştirme işini yapabilmeli.Bugün bir araştırma yaparken sizin projelerinizin bulunduğu bir siteye rastladım ve çok ilgimi çekti.Eğer mümkünse http://www.expkits.com/?s=ex8b.htm adresinde bulunan pic geliştirme kartlarından veya başka bir pic programlama,geliştirme kiti önerebilirmisiniz ?

Bu arada sizin yardımlarınızla öğrendiğim kesme konusunda birşey sormak istiyorum.Bir RB0 / INT kesmesi kullanarak giren frekansı istediğim frekansta istediğim kadar sayıda porttan çıkış alabiliyorum.Bu çıkan sintyallere istediğim gibi rising/falling edege delay işlemini uygulayabiliyorum.Daha önceden 5 entegre ile yaptığım devre tasarımını şimdi 1 adet 16f628A ile yapabiliyorum.Sormak istediğim ise bu kesme işlemlerini yaparken birde buton kontrolü yapıyorum ama butona bir kez basmama rağmen buton birden fazla basma işlemi yapıyor.Araya pause koymama rağmen pic frekansı 20mhz olduğu içinmidir bilemiyorum bir türlü kontrol edeniyorum.

Birde daha önceden size sorduğum ve yanıtını aldığım giren yükselen kenar ile çıkan yükselen kenar arasındaki usec farkı.Eğer pic ile sadece kesme işlemleriini yaparsan kesme yakalama işlemlerinde sorun yok ama bir Lcdout komutunu girdiğim zaman yakalama işlemi sapıtıyor.Bunun nedeni dediğiniz gibi komut gecikmeleri olabilirmi ? Yoksa 16f628 mi yetersiz kalıyor.Hem kesme yakalarken hemde yakalanan siyallerin değerlerini LCD de rahatça gösterebileceğim farklı bir işlemci varmıdır ?

Yardımlarınız için şimdiden çok teşekkürler..
Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

ete

Expkits deneme kartlarındanbirini kullanıyorum. EXBig-B kullandığımkarttır. BU ve diğer kartlar için programlar yazmıştım bir kaç yıl evvel. O zaman epeyce incelemiştim kartı. Aslında karta hakim değilseniz karmaşık gibi geliyor. Ama kartın özelliklerini iyi keşfederseniz sonrasında her şey çocuk oyuncağı gibi oluyor. Bu kartı kullanacaksanız biraz sürekli kullananız lazım. Anında neyin nerde olduğunu onutabilirsiniz. Ama dediğim gibi hemen her şeyi yapabileceğiniz bir kart. Tavisye ederim .
Buton kontrolü zor bir iş değil. Nayi yanlış yaptığınız görebilmem için en azından programın butonla ilgili kısmını buraya koymanız gerekir.
Kesme kullanılan programlarda pause kullanmamaya çalışın.  Gereken gecikmeleri boş döngüler yaratarak oluşturabilirsiniz.
PBP nun bir kötü özelliği vardır. Programda kesme kullanılıyor ise ve o kesmeyi oluşturacak sebep oluşmuş ise o anda işlenen Basic komutu bitirilmeden program kesme etiketine gidemez.
Pause 100 bir basic komutudur ve 100 ms süre ile programın orada çakılı kalmasına sebep olur. Bekleme süresi içinde kesme oluşursa program 100ms gecikmeyi bitirmeden kesme etiketine atlayamaz. Ama bir döngü kurup gecikmeyi pauseus 1 şeklinde verir isek kesme oluştuğunda ilgili etikete atlamak için en fazla 1us bekler program. Bu nedenle kesme kullanılan programlarda gecikmeler FOR I= 0 to 2000:Next şeklinde gecikmeler ile sağlanır.
Bir buton kontrolünde birdenfazla tuşa basılmış imajını yok etmek için butonun bırakılmasını beklemek en doğrusu olur.
IF TUS=0 then
  ...
WHILE TUS=0:WEND
ENDIF
şeklinde bir komutta while wend döngüüs tuşun bırakılmasını bekler. Böylece tus komutu yalnızca bir kere çalıştırılmış olur.

Normal şartlarda LCDOUT kesmeye etkili olmaması gerekir. LCD ninkendi işlemcisi vardır ve komut ona verilip gerisi takip edilmez. Ama orda pause gibi bir gecikme kullanırsanız kesme sekteye uğrayabilir.
İşemleri hızlandırmakiçin çalışma frekansını artırabilirsiniz. Normal seriler 20 Mhz'e kadar çalışırlar. 18F serisinde ayrıca PLL sistemi vardır ve 40 Mhz lere kadar çıkabilirler.

Ete


Mastercodex

Merhaba ,

Ete hocam iyiki sizin gibi yardım etmeyi ve bilgiyi paylaşmayı seven insanlar var.Buton kısmında dediklerinizi aynen uyguladım ve süper sonuç aldım.Aslında VB.net alyapısı ile Visual basic programlamada çok iyiyim ama tabiki burada kod farklılıkları olduğu için ilk başlarda biraz zorlanıyorum.Birde şunu sormak istiyorum pause 1 komutu ile 4mhz lik bir chip frekansında 1 msec gecikme yapabiliyoruz.peki ben işlemci frekansını yükselttiğim zaman 10mhz , 20mhz ve 40mhz de pause 1 komutunun kaç msec yaptığını nasıl hesaplıyoruz.

Bu arada önerdiğiniz gibi EXP Kits ürünlerinden EX8B2 kartını seçeceğim.Benim gibi başlangıç seviyesinden yetişen biri için uygunmudur.İleride bir daha kart değiştirmek istemiyorum. Ürünün resmi internet sitesinde bir karşılaştırma tablosu bulunuyor ve bu tabloya göre bu kit harika birşey gibi görünüyor.

Size tekrar teşekkür eder , iyi çalışmalar dilerim ...

Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

ete

Programların en başına Çalışma Frekansını belirleyecek bir komut koyulması gerekiyor.
Bu komut 4 mhz kristal için "Define OSC 4", 20 Mhz için,  "Define OSC 20" şeklindedir.
Bu komut sayesinde Pause 1 komutu bütün frekanslar için 1 ms olur.

Expkits kartı olarak seçimin gayet güzel. En iyisi.

Ete

ELZEMEFE

encoder  kullanmıştım ...orda önce hız bilgisini almak için  timer kurup pals sayısını almaya çalıştım ya  ben yapamdım yada başka bişey vardı .. sonra high ve low süresini okumak gelmişti aklıma oldukçada güzel sonuç vermişti pulsin  komutu..

Mastercodex

Ete Hocam Merhaba ,

Size dediğim gibi Expkits ürünü olan EX8B2 modelli geliştirme kartını satın aldım.Bu kart muhteşem bir kart.Hayatımda böyle bir kart hiç görmemiştim.Aynen Bilgisayarın anakartı gibi büyük ve çok işlevli bir kart.kitin içinden sizin yazmış olduğunuz örnek kodlarda çıktı.Fakat doğru bir başlangıç yapmak adına hangi noktadan başlamam gerektiğini ve gerekli yazılımlar hakkında beni yönlendirirseniz çok memnun olurum.

Şu anda Microcode Studio 3.0 ve PBP 2.46 kullanıyorum.16F628 kodlarını yazarken hiçbir sorun yok.Yazdığım kodların hiçbirine kullandığım chipin konfigürasyon ayarlarını eklemediğim halde İSİS te çalışıyor.Yazdığım her kodda her işlemciye göre konfigürasyon ayaralarını yazmam gerecekmi.

Yoksa Picbasic  pro ile yazdığım kodlar için bana gerekli olan başka bir stabil ve sorunsuz  bir sistem mevcutmudur.Kodları yazma aşamasında hiçbir problem yaşamıyorum ama yeni başlamamdan dolayı konfigürasyon kısımlarında zorlanıyorum.Devamlı 16f628a ile yazacak değilim tabiki .Bunun 12,16,18 serileri var ve hepsinde ayarlar farklı galiba.Kısacası benim yazacağım kodlar için gelişmiş bir editöre (Microbasic for pic 5.40 gibi ) ve her işlemcide  sorunsuzca compile işlemini yapabileceğim bir derleyiciye ihtiyacım var.Bana en stabil sistemi kurmamda yardımcı olubilirmisiniz.
Mastercodex® 3D Teknoloji
----------------------------------
http://www.mastercodex.com
info@mastercodex.com

ete

Ben PBP dan başka derleyici kullanmadım. Kullanma ihtiyacıda şimdiye kadar duymadım.
Bu nedenle satbil olan yada olmayan konusunda seni yönlendiremem. Bana göre PBP en stabil olanı.
Arada bir Proton kullanıyordum eskiden. Ama pek çok sorun yaşayınca onuda bıraktım. Programlarına bakarım, incelerim ama şimdilik bir başka derleyicide program yazma ihtiyacı duymuyorum.
İllaki satbil bir şey olsun diyorsan hiç durmadan C diline geçmeni öneririm. Stabillik açısından değil ama imkanları açısından tercih edebilirsin. Bütün derleyicilerin üretici firmadan kaynaklanan kusurları bulunuyor ve bunlara BUG diyorlar. Bunlar aynen sizin yazdığınız programlarda olan kusurlar gibidirler. Gözden kaçarlar zamanla ortaya çıkarlar ve giderilirler. Bu durumda en eski derleyicilerle çalışmak en doğrusu olur. Zira zaman içinde bug ları giderilmiştir diye düşünebilirsiniz.

Ete


Powered by EzPortal