Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: oyhan - 29 Nisan 2007, 15:24:39

Başlık: Pals genişliğinden high yada low değer elde etmek
Gönderen: oyhan - 29 Nisan 2007, 15:24:39
Merhabalar
Ben 10ms palsleri 1 (HIGH), 5ms palsleride 0 (LOW) olarak işlemci içinde değerlendirmek istiyorum. Örneğin bir portdan gelen  palslerden 10ms uzunlukta olanları 1 olarak 5ms olanlarıda  0 olarak bir değişkene atamak ve bunları işlemek gerekiyor. Bunu nasıl yapabilirim. Yani sadece yöntem ne olabilir. Tamamıyla software metodu ile olması gerekiyor. Portum kalmadı çünkü. kod değilde yöntem konusunda yardımcı olursanız sevinirim. Teşekkür ederim...
Başlık: Pals genişliğinden high yada low değer elde etmek
Gönderen: Klein - 29 Nisan 2007, 16:07:09
eğer portun kesme üreten bir portsa koly. değilse de kolay. öncelikle pulse başlangıcını tespit etmek gerek.  portu  dinlemelisin. eğer port 0 ya da 1  oldu ise   timer kesmesi içerisinde değeri sürekli artan bir değişkenin değerini sıfırlarsın. sonra portun değerinin değiştiği anı yakalarsın. değer değiştiğinde değişkeniş okursun. eğer portun kesme üretebiliyorsa zaten sorun yok. eğer sıradan bir port ise , programının genel akışında hiçbir yerde uzun gecikme olmamalı.
Başlık: Pals genişliğinden high yada low değer elde etmek
Gönderen: oyhan - 01 Mayıs 2007, 23:31:39
Peki porta gelen işaretleri if yada while gibi bir şart komutları ile sürekli takipmi etmeli gelen data 10ms ise 1,  5 ms ise 0 ve 0 seviyesinde ise senkronizasyon amaçlı kabul et gibi.. (palsin süresini  ölçemede timer0 kullanılcak. Birde bu arada zamanı nasıl alıcam. kullanacağım işlemci 12c508 olmak zorunda. Genelde interrupt ile herşeyi tasarlama rahatlığına alışmışken interruptsız nasıl başlıyacağımı kestiremedim. Portu dinlemelerin haricindede ufak tefek işlerde var. Zamanı nasıl ayarlıycam. İnterruptsız!!! 8O  :(
Başlık: Pals genişliğinden high yada low değer elde etmek
Gönderen: MURSEL - 02 Mayıs 2007, 13:37:21
arkadaşlar  picte capture (yakala modu ) var  bu konu üzerinde araştırırsanız daha rahat ve dogru sonuç olur timer1 deki deger  ccpr1h: ccpr1l saklayıcısına atılıyor bu degerleri okuyun ne kadar süreyse koşulları girin bilgileri bu sekilde okuyun umarım yardımcı olabilmişimdir böyle bi uygulamam yok sadece düşüncemi yansıttım saygılar
Başlık: Pals genişliğinden high yada low değer elde etmek
Gönderen: oyhan - 02 Mayıs 2007, 21:55:18
Dedim ya 12c508 kullanmak zorundayım. Başka işlemci kullanabilse idim sorun olmayacaktı. interrupt ile çözerdim 2 dakikada ama işte.. Neyse uğraşayım biraz daha yavaş yavaş olur herhalde..İlginiz için sağolun arkadaşlar..
Başlık: Pals genişliğinden high yada low değer elde etmek
Gönderen: Klein - 03 Mayıs 2007, 12:40:12
önceki mesajımda bahsettim biraz. Burada dikkat edilecek en önemli husus programı hiçbir yerde bekletmemek. Gerek port dinleme gerekse programdaki diğer kontrollerin hiçbirinde döngü ya da delay olmamalı. portu ana döngü içerisinde dinleyebilirsin. osilatör frekansın nedir bilmiyorum. ama ana döngü zamanı yetecektir. şöyle basit bir kod yazılabilir

bit portflag=1;
unsigned int pulsewidth=0;

void main(void){
 
 if(!port && portflag){
     portflag=0;
     timer0=0; // timer  sıfırlanır.
     timer0enable=1;
 }
 
  if(port) {timer0enable=0; portflag=1;pulsewidth=timer0;}

}
Başlık: Pals genişliğinden high yada low değer elde etmek
Gönderen: oyhan - 15 Mayıs 2007, 12:38:15
Merhaba
Şimdi 10ms palsleri porttan alıp 1 ve 5ms lik palsleride 0 olarak değerlendirip int16 olarak tanımladığım bir değişkenin içine yazıyorum ama her defasında yazılan bilginin sorunlu olduğunu görüyorum. 16bitlik bir değişken içindeki bitleri bit_reset yada bit_set komutları ile tek  tek işlemek ile ilgili bir soun mu yaşıyorum. yani değişkenin 16 bitlik olmasından kaynaklanan bir sorunmu acaba.
Başlık: Pals genişliğinden high yada low değer elde etmek
Gönderen: erhanmete - 15 Mayıs 2007, 16:47:17
bu süreleri ölçerken belli oranlarda tolerans koymak gerekir.problem bundan kaynaklanıyor olabilir.
Başlık: Pals genişliğinden high yada low değer elde etmek
Gönderen: oyhan - 15 Mayıs 2007, 20:54:48
Merhaba Erhanmete toleransları koydum. Yani tam dediğim zamanlarda değil belli bir tolerans aralığında okuyorum palsleri.  Ancak kodda int16 tanımlı değişkenden kaynaklanan bir sorun var gibi geliyor Bu nedenle sordum. Acaba bit_clear yada bit_set komutlarını kullanak int16 bir değişken açısından sorun oluştururmu?



(önceki mesajımda bit_reset demişim doğrusu bit_clear olacaktı pardon.)