T0CKi motor devir kontrol ?

Başlatan mikro29, 31 Aralık 2007, 09:16:56

mikro29

s.a.
Arkadaşlar başlıktada bahsettiğim konuyu araştırmama rağmen istediğim gibi birşey bulamadım (beceriksizliğim) Yapmaya çalıştığım şey pic 'e bağlı LCD ye motor devir bilgisini ve 2 ayrı sıcaklığı (DS18b20) yazdırmak biraz uğraştım ama sıcaklık ölçümü sırasında yaklaşık 1-2 sn lik gecikmeden dolayı devir sayısı geç veya yanlış okunuyor. T0CKi kesme ile nasıl programı kasmadan motor devirini ölçebilirim...Programı PBP ile yazmam gerekiyor

https://www.picproje.org/index.php/topic,14262&highlight=t0cki denedim devir sayısı tutmuyor

forsa1975

lm35 kullanmak çözüm olabilirmi ? Devir ölçer için kesmeyi b0 dan kullanıp tmro ı zaman ölçmek için kullanmanızı tavsiye ederim. Böylece pinden gelen kesme ile timmer0 kesmesini çalıştırıp   zaman/kesme sayısından  devri bulmanız daha kolay olacaktır.

ete

Bana kalırsa bu projeyi şöyle yapmaya çalış;
1. TMR0 kesmesini aç ve kesme kısmında 1 sn lik süreyi yakalamak için gerekirse SAYAC isimli ikinci bir değişken kullan.

2. TMR1 sayacını aktif hale getir ve dışarıdan giren palsleri sayacak şekilde organize et. TMR1 16 bitlik bir sayaçtır ve devir saymada sana daha uygun olacaktır. TMR1 sayacıda geri planda çalıştığı için ana programdan etkilenmeyecektir.

3. Programın kesme haricindeki bölümlerinde sıcaklık okumalarını yap ve ekrana yaz.

4. TMR0 1/64 prescaler kullanarak her 16384 us de bir kesme oluşturacak şekilde ayarla ve yaklaşık 61 kesme saydıktan sonra TMR1 değerini oku.
Bu şekilde yaklaşık 1 sn geçmiş olacak ve sen 1 sn de gelen devir bilgisini ise TMR1 den okumuş olacaksın. Bunu dakikaya çevir ve dev/dak olarak ekrana ver. Bu kısımda TMR1 sayacını sıfırla.

Bu şekilde olacağını düşünüyorum. Denemesi bedava.

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

mikro29

Teşekkürler,
Kod parçacığı verebilirmisiniz

ete

Kod parçacığı veremem çünki hazırda yazılmış bir kod yok.
Aslında biraz araştırsan;
- DS18B20 sensörleri okuma program parçası
- TMR0 kesmesi program parçası
ve hatta TMR1 sayacı konusunda program parçaları bulman mümkün.
Bunların hepsine ait örnekler benim programlarımda mevcut.
Hatta benim saat programlarını kurcalarsan hem DS18B20 hemde TMR0 kesmesi ikisibir arada mevcut. TMR1 sayacı için T1CON registerini data sheet den incele. Bütün kerşeyi bu register kontrol ediyor. SOn derece basit.

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

mikro29

ETE hocam ısı okuma kısmında problem yok devir ölçmedede kesmeleri nasıl kullanabilirim COUNT komutunu kullanıyorum ama devir sayısını tam göstermiyor veya ısı bilgisi geç geliyor

ete

Dediklerimi anlamamış gözüküyorsun.
Bir DS18B20 sensörü 12 bit çalıştırılınca bir ısı okuma çevrimini 750 ms de tamamlar. Bu nedenle sen ısı okurken bir yandan da geri planda gelen devir palslarını sayman gerekiyor. Devir palslarını sayman için ayrıca birde zaman tutman gerekiyor.
Sağlıklı bir sayma için en azından sabit 1000 ms lik sürede ne kadar devir palsı aldığını ısı ölçüm programından etkilenmeden sayabilmen lazım. Bu ancak geri planda çalışan sayaçlarla olabilir. Nedir bu sayaçlar. Birisi TMR0 diğeri TMR1 . Her ikiside geri planda sayma yapabilir. Geri plandan kastım ana program(senin yazdığın) dan etkilenmeden dir.  Her iki sayac iki yerden tetik alabilir. Birisi picin osilatöründen veya dışarıdan bu sayaclara ayrılmış özel pinlerden. Sen bu pinleri kullanacaksın.
TMR0 kullanırsan bu PortA.4 pini olacak, TMR1 kullanacak isen ve işlemcin 16F628 ise bu PortB.6 pini olacaktır. Bu pinlerin haricinde başka pin kullanamazsın.

Count komutu verilen süre bitinceye kadar palsları sayar ama diğer taraftan bu süre içinde ısı ölçümü yapamazsın. Çok önemli değil ise 1 sn devir ölçersin ikinci saniye ısı ölçersin sonra tekrar devir ölçersin sonra tekrar ısı ölçersin.
Bu şekilde de olur.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mikro29

hocam sizi gayet iyi anladım
yapmak istediğim devrenin şeması bana sadece motor devir sayma kısmı lazım (kod kısmı) yardımcı olursanız sevinirim T1CON inceledim ama tam anlayamadım ds18b20 ısı bilgisini verirken 750 ms beklediğini biliyorum 2 tane ds18b20 kullandığım için 1.5 sn yapar bu gecikme önemli değil sadece devir sayma kısmını alttan nasıl çalıştırabilirim