12f675

Başlatan dagadamı, 21 Eylül 2023, 15:42:07

Zagor34

Ete hocam
pic'in enerjisi kesilince kendisini resetlemesi için mclr pinine direnç kondansatör bağlasam kendini tekrar enerjilendiginde resetlermi..

ete

#76
Enerjisi kesilen işlemci zaten otomatikman resetlenmiş olur. Ancak genellikle besleme devrelerindeki kondansatör enerji kesildikten sonrada voltajın bir müddet devam etmesini sağlar ve yeniden enerji verildiğinde işlemcinin voltajı henüz kesilmemiş olur. Bu nedenle enerji kesildikten sonra en az 30 sn beklemen gerekir yada besleme üzerindeki kondansatörlerin değerlerini küçültmen gerekir.

Diğer bir konu da, Triac tetiklemesi ile ilgili. Triac program tarafından tetiklenir ama Sıfır noktasında otomatikman tetik ortadan kalkar ve triac kesime gider. Enerjiyi kestiğinde Triac tetiklenmiş ise devre çıkış vermeye devam eder bir sonraki sıfır geçişe kadar.
İlk açılışta her şey sıfırlansın istiyor isen;
Programın açılış kısmına;
Triac=0
Tmr0=0
LoadValue=0
satırlarını ekleyiver.
Aslında Clear komutu bunu otomatik olarak yapar. Bunların yerine başlangıç aşamasında bütün değişkenleri sıfırlayan CLEAR komutunu eklemende işini çözecektir.


Ete

elektro77

#77
Tüm bu yapılanlar biraya toparlanıp son hali olarak buraya konsaydı da biz de faydalansa idik. Siz proje içinde dağıldınız sizden çok biz takip edenler dağıldık.
Birde projenizi protonda takip edeyim dedim ama versiyon sizinki ile aynı olmasına rağmen içinde PİC16F884 yok. Bunu nasıl çözeceğim yada tüm kodu ete Hocam pic basic e uyarlayıp buraya koyar mı acaba. Başka projelerde farklı şekilde değerlendirmek isterim...Çok mu fazla şey istedim?
Kolay gelsin.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Bir çok kez formülü nasıl yapıldığını anlatmıştım. Yeniden açıklıyorum.
Önce varsayımlarımızı ortaya koyalım. İki sıfır geçiş arasındaki süremiz 10.000us (10ms)
Dim olayının oluşmasıda bu süre içinde hangi konumda triacın ateşlenmesine bağlı olmaktadır.
Sıfır noktasından hemen sonra ateşlersem maksimum çıkış süre sonunda doğru ateşlersem min çıkış elde ediyorum. Aralarda ataeşlemede bize çıkışda ara bir değer sağlıyor.
Bildiğiniz üzere her bir program komutunun (ASM karşılıklarının) birer icra süresi vardır. Bir sürü komut bir araya gelince epeyce bir gecikme yaratabilmektedir.
Bu durumda bizim uygulayacağımız (min çıkış sağlamak için) gecikme miktarı hiç bir zaman 10.000us olamıyor. Pratikte bu değer 7600-8600 us ler arasında değişmektedir.
Biz bunu şimdilik 8000 us kabul edelim.

Bu süreyi timer0 sayacağı için bölme oranıda 1/64 olduğundan 8000 us için Timer0 ın 8000/64=125 komut çevrimi (saykıl) sayması gerekir. Bunu sağlamak içinde TMR0 sayacına ön yükleme değeri olarak 256-125=131 değerini yüklemek gerekir. İşte potun min konumunda hesaplamamız gereken sayı bu 131 sayısı olacaktır. Bu sayı burada en önemli formül parametresi olarak görülmelidir. Kısaca bu sayı formülde sona eklenen +131 şeklindeki sayımız olacaktır ve pot min da iken sonuç 131 çıkacaktır. Pot maksimumda iken 256-131=125 değerini hesaplamamız gerekecek.
125/1023=0,1221896 bu sayıyı yine 256 ile çarpalım . 0,1221896*256=31,280547 sayısını elde ederiz. Bu sayıyı 2 hane büyütelim 31,280547 * 100 =3128,0547 bulunur. Hala virgülden sonra küsürat olduğu için küsürayı kaldırıp bu sayıyı 3129 olarak kullanacağız.
İşte sabit çarpanımız bu sayı olacak.

Şimdi bunu formüle dönüştürelim.
LoadValue=(Ham*/3129)/100+131
Açıklama gerekir ise (Ham*/3129) işlemi Ham ile 3129 sayısı ile çarpılıp sonuç 256 ya bölünerek verilir. Bunu */ işareti sağlamaktadır. O nedenle formülü oluştururken 125/1023 sonucunu 256 ile çarptık ve bu işlem sonucunda hesaplanan sayı 256 bölündüğü için sonuç bozulmmış oldu. Bir nevi W*256/256 işlemi.
Çıkan sonucu 2 hane büyütmek için 100 ile çarpış idik. Formüldeki /100 ifadesi de bu çarpımı geri almak için eklenmiş oldu. Sona eklenen 131 sayısını en başta açıklamış idik.

Şimdi formülü denemek için hesap yapalım yeniden.

Okunan ADC değeri 1023 olun. Buna karşılık alınacak hesap sonucu;
LoadValue=(1023*/3129)/100+131=256 olacaktır. Bu ise TMR0 a 256 önyükleme değeri verecek ve sayım değerinin sıfır olmasını sağlayacaktır. Böylece Pot Maksimumda iken Triac çıkışı maksimumda kalacaktır.

Şimdi Pot min da iken ne oluyor ona bakalım.
LoadValue=(0*3129)/100+131=131 sayısı elde edilecek olup buda Timer0 a ön yükleme olarak verildiğinde Timer0 256-131=125 adım sayacak ve buda 125*64=8000 us lik bir gecikme yaratacaktır. Her şey doğru gözüküyor.
Umarım açıkladıklarım anlaşılmıştır.

Ete

dagadamı

Pepe Usta  programda buradaki değer hiç birşeyi değiştirmiyor  Symbol Low_limit = 100

Zagor34

#80
ok

Pepe

#81
görmek #88

dagadamı

#82
Pepe
saygılar sevgiler iyi insan..
İşinde uzman...

Zagor34     board üstünde sonucu merak ediyorum    bizi haberdar et...

Zagor34

#83
.

Pepe

#84
görmek #88

Zagor34

#85
.

Pepe

#86
görmek #88

Zagor34

#87
.

Pepe

#88
.

Zagor34

#89
Pepe usata
Buton1 bağlı potansiyometre maksimumda iken çıkış vermiyor

Çalışırken potansiyometreler ayar yapmıyor?


     If b1 = 1 And Ham < 920 Then
Bu komutu kullanmasakmi bu komut olmadığında daha iyi çalışıyordu...

Powered by EzPortal