Pic16f877 kullanarak fan motoru ve sensör ile sıcaklık kontrolü

Clkhkn33

Üye
Katılım
9 Eyl 2020
Mesajlar
21
Puanları
1
Yaş
25
Merhaba haftalık bir ödevim var. Kodlamada iyi değilim. Ben yüksek gerilim düşünüyorum o yüzden zaman zaman zorlanıyorum bu derste. Yardımcı olabilir misiniz?
MikroC kullanıyoruz, Ccs veya assembly kullanmıyoruz baştan söylemek istedim :)

Ödev: Yerleşim yerine uzak bir serada pic ile sıcaklık kontrolü yapılacaktır. Pic16f877 mikrodenetleyicisinin RB0 portuna bağlanan bir sıcaklık sensörü, belirli bir eşik değerinin üstünde RB0 portuna lojik1 değerini vermektedir. Bu durumda RC0 ve RC1 portlarına bağlı iki adet motorlu fan sisteminin devreye sokulması istenmektedir. Harici kesme kullanarak sıcaklığın yükseldiği durumlarda fan motorlarını çalıştıran mikroC kodunu yazınız ve devre şemasını çiziniz.

İsterseniz mail adresime de gönderebilirsiniz [email protected]
Teşekkürler.
 
Buralarda dursun...

Kod:
/*
* Mehmet Bilgi
* Haziran 2021
*/

#include <stdint.h>

#define FAN1 PORTC.B0
#define FAN2 PORTC.B1

volatile uint8_t fanCalistir = 0;

/*
* Kesmeyi çalýþtýracak register ayarlarý
*/
void kesmeHazirla(void)
{
OPTION_REG.INTEDG = 0b1;
INTCON.INTE = 0b1; // RB0/INT kesmesi açýldý
INTCON.GIE = 0b1; // Genel kesmeler açýldý
}

/*
* MCU için ön ayarlar
*/
void mcuHazirla(void)
{
PORTA = 0x00;
PORTB = 0x00;
PORTC = 0x00;
PORTD = 0x00;
PORTE = 0x00;

ADCON1 = 0x06; // Tüm portlar dijital

//76543210
TRISA = 0b00000000;
TRISB = 0b00000001; //RB0 giriþ
TRISC = 0b00000000; //RC0 ve RC1 çýkýþ
TRISD = 0b00000000;
TRISE = 0b00000000;
}

/*
* Ana fonksiyon
*/
void main(void) 
{
kesmeHazirla();
mcuHazirla();

while(1)
{
if(fanCalistir == 0b1)
{
FAN1 = 0b1;
FAN2 = 0b1;
}
else
{
FAN1 = 0b0;
FAN2 = 0b0;
}
}
}

/*
* Kesme fonksiyonu
*/
void interrupt (void)
{
if(INTCON.INTF == 0b1)
{
//Yükselen kenarda fan çalýþacak, düþen kenarda kapatmasý isteniyor.
//Düþen kenarda kesme oluþturmasý için de alttaki satýr ilave edildi.
OPTION_REG.INTEDG ^= 0b1; // Yükselen kenarda ve düþen kenarda ayrý ayrý kesme yapmasý için
if(PORTB.B0 == 0b1)
{
fanCalistir = 0b1;
}
else
{
fanCalistir = 0b0;
}
INTCON.INTF = 0b0;
}
}
//****************************************************************************//
 
Mehmet Bey selamlar ,

Yazmış olduğunuz kod için, sıcaklık kontrolü NTC vb. ile mi sağlanıyor?
Devre şeması olmadıgında anlamak pek mümkün olmuyor.
Benzer bir uygulama üzerine çalışıyorum, geri dönüş yaparsanız cok müteşekkir olurum
 
Buradaki durumda dijital çıkış veren bir
sıcaklık sensörü ile yapılmış.

NTC gibi bir eleman kullanacaksanız; ntc ve uygun
bir direnç seri bağlanarak mcu besleme uçlarına
bağlanır. Orta uç mcu adc kanalına girilir.

Eğer sıcaklık değer değişimi kritik değilse
bir kaç deneme ile çözümlenir.
Ancak belli bir sıcaklık değeri gerekli veya
bu durum değişken ise; NTC beta değeri, 25°C deki
direnç değeri gibi bilgiler ile tablo/formül
oluşturup değer almanız gerekmekte.

Kolaylıklar...


Ek:
https://www.sebulli.com/ntc/
 
Son düzenleme:
Merhaba ,

NTC Beta değeri ve her sıcaklıktaki direnc değeri bilgileri elimde mevcut.
(25C'de 2.1k Glass coated Beta=3,470K (+25C to +50C); Beta=3,518K (+25C to +85C));

PIC12F508 olarak fikrime başlamıştım, fakat siz 675'i önermiştiniz. (508 ADC Modülü yok. )

Benim devamında yapmak istediğim program , NTC input olarak bağlayıp , değeri saniye saniye okutmak.
Daha sonrasında her saniye okuduğu değeri karşılaştırma yapıp, eğer 1 saniyede 10C sıcaklık farkı var ise (direnc degerleri mevcut oldugu icin o da olur) çıkışta anahtarlama yapacak bir tasarım yapmayı planlıyorum. (Mümkünse P-ch mosfet kullanarak.)
 
#7 mesajda verdiğim linkte oluşturulan
tablo ve fonksiyon ile istediğiniz işlemi
yapmanız mümkün.
 

Forum istatistikleri

Konular
127,952
Mesajlar
913,881
Kullanıcılar
449,600
Son üye
psychedelic

Yeni konular

Geri
Üst