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

  • Konbuyu başlatan Clkhkn33
  • Başlangıç tarihi

Clkhkn33

Üye
Katılım
9 Eyl 2020
Mesajlar
17
Puanları
1
Yaş
23
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 celikhakan.m@gmail.com
Teşekkürler.
 

mehmet.bey

Profesyonel Üye
Katılım
19 Ara 2011
Mesajlar
1,527
Puanları
281
Konum
Galaksi Dışı
Son tarih ne zaman?
 

mehmet.bey

Profesyonel Üye
Katılım
19 Ara 2011
Mesajlar
1,527
Puanları
281
Konum
Galaksi Dışı
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;
}
}
//****************************************************************************//
 

argeunuvar

Üye
Katılım
7 May 2021
Mesajlar
2
Puanları
1
Yaş
23
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
 

mehmet.bey

Profesyonel Üye
Katılım
19 Ara 2011
Mesajlar
1,527
Puanları
281
Konum
Galaksi Dışı
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:

argeunuvar

Üye
Katılım
7 May 2021
Mesajlar
2
Puanları
1
Yaş
23
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.)
 

Yeni mesajlar

Forum istatistikleri

Konular
117,751
Mesajlar
829,860
Kullanıcılar
428,558
Son üye
Harunn06

Yeni konular

Üst