pic16f877a ile sıcaklıga göre devri degişen fan kotrol devresi için kod istegi

Başlatan feslegenli, 08 Kasım 2023, 00:48:26

feslegenli

merhaba arkadaşlar başlıktada belirttigim gibi pic16f877a a için protonda yazılmış sıcaklıga göre devri degişen fan kontrol devresi kodu yazmanız mumkunmu internette o kadar aramama ragmen bir türlü bulamadım
devredni çalışması
sıcaklık 40 derecede fan %40
sıcaklık 45 derecede fan %50
sıcaklık 50 derecede fan %75
sıcaklık 55 derecede fan %100
çalışacak ve aynı zamandada lcd ekrandada sıcaklık ve fan hızı yazacak bir kod yazarmısınız
bunu arduinoda yapıyorum fakat elimde pic16f877a oldugu için pic de yapmak istedim
devre şenesı



ete

Ne yazıkki bu sitede siparişe göre kod yazmıyoruz.
Bu istediğin program öyle basit bir program değil çok zor da değil ama bir kaç günlük emek isteyen bir iş.
Gönül isterdiki sen bu işe başlayasın ve takıldığın noktada yardım isteyesin. Ozaman istediğin yardımı alacağından eminim. Ben proton ile çalışma yapmıyorum. Buna rağmen işin temeli ve adımları konusunda hatta bazı kodların yazılması konusunda sana yinede yardımcı olabilirim.
Kısaca anlatmak gerekir ise;
- Sistem Öncelikle LM35 den sıcaklık okuyacak.
- Okunan sıcaklığa uygun olarak Fan motorunu PWM ile sürecek ve PWM oranıda sıcaklığa göre belirlenecek. Sıcaklıklar arasında 5 er derecelik kademe farkları var. Sıcaklık bu fark aralıklarında olduğu zaman fan motoru ne yapacak onuda belirlemen gerekir.
- Sonuçta gerek sıcaklık ve gerekse fan hızları LCD ekranına yansıtılacak.

Bu gibi işerde histerisiz denilen bir sistem uygulanması gerekir. Ne olduğunu örnekle açıklayayım. Diyelimki sıcaklık Tam olarak 45 derece ve sende fan'a %50 hız verdin. Sıcalık sensörleri tam stabil çalışmazlar. Ölçülen sıcaklık bir 45 çıkar bir 44 çıkar yada 46 çıkar.
Bu durumda işin içine histerisiz meselesi girer. Burada 45 olan sıcaklık 44 çıkarsa fan hızını değiştirme yada Hız sıcaklığı 45 ise ve yeni okunan HızSıcaklığı-1 ise konumu değiştirme. Kısaca bir aralık vermen gerekir. Burada bir set sıcaklığı (45 derece) belirlemiş isen okuna sıcaklığın hangi değerlerinde bu sıcaklık sabit kalmalı belirlemelisin.
Ölçülen sıcaklık 40 derecenin altında Fan hızı ne olacak onuda belirlemelisin. Daha başka eksikler çıkabilir onlarda program yazılırken ortaya çıkar.

Ete


feslegenli

Cevap için teşekkür ederim  sıcaklıga före fanın hızını kademe kademe yükseltebilecegim kodları birtürlü bulamıyorum
En azından
Sıcaklık 40 iken fan %30
Sıcaklık 50 iken fan %40
Sıcaklık 60 iken Fan %100 donmesi için hangi kodları kullanmalıyım

ete

Fan dediğiniz şey sonuçta bir motor. Ama nasıl bir motor???.
Alternatif akım motoru 220V AC ile çalışır bunda devir ayarı biraz zor ama imkansız değil.
Fan motorunuz DC motor ise işiniz kolay gözüküyor. Kodları size veririm. PBP veya Proton farketmez aynı kodu kullanabilirsiniz.

DC motorlu bir fanınız olduğunu varsayarsak. 1Khz ile 10Khz arasında bir PWM frekansı ile bu motor kontrol edilebilir. Tavsiyem 5Khz frekansın kullanılması yönünde. Şemanız da zaten Motor sürme çıkışını 1 nolu PWM çıkışına bağlamışsınız. Ancak transistör bağlantısı pek güzel değil gibi.
Ben olsam oraya IRF540 gibi bir mosfet koyardım. Pic CCP1 çıkışına 150 ohm bir direnç bağlardım. Direnci IRF540 ın (veya IRFZ44 de olabilir) Gate ucuna girerdim. Source ucunu GND ye bağlar Drain ucunuda motora bağlardım. Motorun diğer ucu şemadaki gibi +12V ta bağlanmalıdır.

Gelelim kodlara, herhangi bir kod verebilmem için işlemcin hangi frekansta çalışacak onu söylemen gerekir. Ayrıca tercih ettiğin bir PWM frekansın var iise onuda belirtirsen memnun olurum.

Kendim yaparım bu işi dersen yolunu göstereyim.
4Mhz OSC frekansına göre ;
- T2CON=%00000100 '1/1 bölme oranı seçildi.
- PR2=199
bu iki satırı programın baş taraflarına bir yere yerleştir.
Max. Duty değerin 800 olacaktır. Bu nedenle Değişken tanımlama kısmına
 -DIM DUTY As Word
 -DIM X    As Word
şeklinde iki değişken tanımla.
Şimdi biraz hesap yapalım. Max duty değerin 800 olduğuna göre ve bunun %100 hıza tekabül ettiğni düşünürsek,
- %30 hız için duty değerin %30=Max_Duty x 30/100=240 şeklinde olacaktır.
- %40 için 800x40/100= 320 olarak hesaplanacaktır.

Şimdi bu hızlara ait PWM sinyalini nasıl çıkartacaksın onu vereyim.

Programa aşağıdaki satırları bir alt program olarak ekle.

DUTY_VER:
        IF CCP1CON=0 THEN CCP1CON=%00001100
        X=DUTY
        CCP1CON.4=X.0
        CCP1CON.5=X.1
        CCPR1L=(X>>2)
        RETURN

 
Şimdi diyelimki sıaklığı ölçtün ve 40 derece çıktı. O halde Fan hızını %30 yapacaksın
DUTY=240:GOSUB DUTY_VER
şeklinde satır ile PWM çıkışından %30 duty değerine sahip PWM sinyalini çıkarmış olursun.

Diğer hızlar için Duty değerinin ne olduğunu yukarıda verdim. Benzer şekilde o hızlarıda elde edebilirsin artık.
Takıldığın yerde yeniden sor.
 
Ete




feslegenli

Vallahi ete hocam erinmeyip of demeyip cevap yazdınızya helal olsun size fan moturu olarak 12 volt pc fanı kullanacam işlemciyi 4mhzde calıştırmak istiyorum veya 5 mhz de olur sizce hangisi uygun olur şemasını verdigim devre son devre degildi yazdıgım mesaja destek olması için cizdim  anlattıklarınıza istinaden kafamda bi şekil oluştu verdiginiz bilgiler dogrultusunda tekrar yapamaya çalışacam
Birde elimde hazır program kodu var bu kodu sizin mesaja eklediginiz gibi nasıl ekleyebilirim o kod uzerinde istedigimi yapmaya calısıyorum

ete

YANITLA butonuna tıkladığında karşına bir mesaj yazma sayfası geliyor. Yukarıda normal bir text editör sayfasında görebileceğin semboller bulunuyor. Sağ tarafta sondan sola doğru 3 cü kutunun içinde ortada yer alan sembol kod ekleme butonudur. Kursörü bu seçeneğin üzerine getirirsen hemen "kod" yazısı belirecektir zaten. Buna tıklayınca yazım ekranında köşeli parantez içinde   "code" ve hemen peşinde "/code" ibarelerini göreceksin. Ekleyeceğin kodu bu iki şey arasına ekleyebilirsin.
OSC frekansı olarak 4mhz kullanmanı öneriyorum. Zaten 5Mhz standart bir frekans değildir. 4Mhz için hem kristal hemde rezonatör bulmak daha kolay olacaktır.


Ete


feslegenli

merhaba ete hocam istedigim ozelligi aşagıdaki koda eklemek istiyorum
Device = 16F877A

Xtal = 4
All_Digital = True         ' Set PORTA and PORTE to all digital
Declare PortB_Pullups = On

TRISA = %111111            ' PORTA giriş olarak tanımla
TRISB = %11111111       ' PORTB giriş olarak tanımla
TRISC = %00000000        ' PORTC nin tüm bitlerini çıkış olarak ayarla
TRISD = %00000000        ' PORTD nin tüm bitlerini çıkış olarak ayarla
TRISE = %111            ' PORTE nin tüm bitlerini giriş olarak ayarla

Declare     LCD_DTPin = PORTD.4 
Declare     LCD_RSPin = PORTD.2
Declare     LCD_ENPin = PORTD.3
Declare     LCD_Interface = 4    ' 4-bit Interface
Declare     LCD_Lines = 2      
Declare     LCD_Type = 0

ADCON1 =%00000111               ' PORTA ve PORTE digital girişler aktif.
OPTION_REG = %00000000        ' PORTB PULLUP AKTİF

Dim hiz       As Word
Symbol lm35     = PORTE.2

Dim analogdeg As Word
Dim derece1   As Word
Dim derece2   As Word   

basla:
ADCON1 =%10000000        ' PORTA ve PORTE analog ölçüm girişler aktif.
    analogdeg=ADIn 7   'Gerilim ölçüm pini PORTE.2 LM 35 bağlı. LM35 10 mv/C olacak şekilde çıkış verir
    derece1=(analogdeg*49)/100   'Ölçülen analog değerin derece karşılığı hesaplama
    derece2=(analogdeg*49)//100  'Ölçülen analog değerin derece karşılığı hesaplama
    Print At 1,2,  "ORTAM SICAKLIGI "
    Print At 2,1,Dec2 derece1,",",Dec2 derece2,
  
GoTo basla
End


ete

Bu verdiğin kodlar için söyleyebileceğim tek şey düşünmeden ve sağdan soldan kopyalanıp yazılmış oldukları.
Sebebi çok basşit bakınca hemen anlaşılıyor.
	All_Digital = True         ' Set PORTA and PORTE to all digital
Programın başındaki bu satır ne yapar sence!!! bak kenarında açıklamasıda mevcut üstelik.
Bütün Analog olabilecek pinleri digital yaptırıyorsun.
Pek aşağıda ne var?,
	ADCON1 =%10000000        ' PORTA ve PORTE analog ölçüm girişler aktif.
	    analogdeg=ADIn 7   'Gerilim ölçüm pini PORTE.2 LM 35 bağlı. LM35 10 mv/C olacak şekilde çıkış verir
Bu satırlarda LM35 için analog okuma yapmaya çalışıyor. Bir yandan pimnleri digital yapıyorsun diğer taraftan aynı pinden analog değer okumaya çalışıyorsun bu olmadı. Digital ile analog farkını bilmiyorsan söyle açıklayayım.
Sana bir sürü açıklama verdim. PWM kanalını açma konusunda. Hiç birini bu programa uygulamamışsın. Hala amacın hazır kod almak. Buda olmadı.

Bu sitede BASIC dersleri var. Öncelikle o dersleri okuyup bilgi seviyeni artırman gerekir. Bana göre kod yazma becerin yok. Bunu geliştirmen gerekiyor. Dersle PBP üzeerine ama Proton ile çok yakın dildir. Pek çok komut direk kullanılabiliyor. Yapman gereken şey işin mantığını öğrenmek ve Proton üzerinden uygulamak.

Ete



Pepe



feslegenli

Alıntı yapılan: ete - 09 Kasım 2023, 08:09:07Bu verdiğin kodlar için söyleyebileceğim tek şey düşünmeden ve sağdan soldan kopyalanıp yazılmış oldukları.
Sebebi çok basşit bakınca hemen anlaşılıyor.
	All_Digital = True         ' Set PORTA and PORTE to all digital
Programın başındaki bu satır ne yapar sence!!! bak kenarında açıklamasıda mevcut üstelik.
Bütün Analog olabilecek pinleri digital yaptırıyorsun.
Pek aşağıda ne var?,
	ADCON1 =%10000000        ' PORTA ve PORTE analog ölçüm girişler aktif.
	    analogdeg=ADIn 7   'Gerilim ölçüm pini PORTE.2 LM 35 bağlı. LM35 10 mv/C olacak şekilde çıkış verir
Bu satırlarda LM35 için analog okuma yapmaya çalışıyor. Bir yandan pimnleri digital yapıyorsun diğer taraftan aynı pinden analog değer okumaya çalışıyorsun bu olmadı. Digital ile analog farkını bilmiyorsan söyle açıklayayım.
Sana bir sürü açıklama verdim. PWM kanalını açma konusunda. Hiç birini bu programa uygulamamışsın. Hala amacın hazır kod almak. Buda olmadı.

Bu sitede BASIC dersleri var. Öncelikle o dersleri okuyup bilgi seviyeni artırman gerekir. Bana göre kod yazma becerin yok. Bunu geliştirmen gerekiyor. Dersle PBP üzeerine ama Proton ile çok yakın dildir. Pek çok komut direk kullanılabiliyor. Yapman gereken şey işin mantığını öğrenmek ve Proton üzerinden uygulamak.

Ete



ete hocam 48 inden sonra bu işlere merak sarınca ister istemez sagdan soldan topladıgımız kodlarla bişiler yapmaya çalışıyoruz burdan tekrar size bilgilendirici mesajlarınızdan dolayı teşekkür ederim sagolun

istinaf duvarı

https://www.intel.com/content/dam/support/us/en/documents/intel-nuc/intel-4wire-pwm-fans-specs.pdf
Bunu okumalısın. PWM sinyalinin bu spesifikasyondaki şartları sağlaması gerekiyor. Yoksa fan sinyali kabul etmiyor.
Benim de başıma gelmişti.

Powered by EzPortal