Soğutucu özellikli kuluçka makinası

Romeo24

Üye
Katılım
12 May 2014
Mesajlar
1
Puanları
1
Yaş
37
Arkadaşlar bir kuluçka makinası için çalışma yapıyoruz. Proteusta yapmış olduğum devrede 16F877A kullandım. Tek bir sıkıntı var. Pic'in EEPROM belleğine en son sıcaklık ayarını kaydettirmek istiyorum. Yani elektrik kesilip geri geldiği zaman kişinin ayarlamış olduğu sıcaklığa göre ayarlama yapsın. MikroC kodlarını da aşağıda veriyorum.Kodlarda kırmızı ile yazılmış kısmı silince program düzeliyor. Fakat EEPROM'a kaydedilen veriyi okutamıyorum. Yardımcı olursanız sevinirim.

sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;


sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;


int okunan=0,ort,top,buton;
char mesaj[15];
float milivolt,sicaklik=0;
char i=0,txt[15];


void kurulum()
{
ADC_Init();
ADCON1=0b10001110;//Sağa dayalı sonuç, AN0 analog, diğerleri dijital.
}


void main()
{
buton=25;
TRISC=1;
TRISD=0;
PORTD=0;
kurulum();
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CLEAR);
buton=EEPROM_Read(0x20);
while (1)
{
okunan=ADC_Read(0); //ADC'nin 0. kanalından okuma yapılıyor.


for(i=0;i<20;i++) // 20 Kez okunan değer toplanıyor
{
top+=okunan;
delay_ms(5);
}
ort=top/20; //Toplanan değer 20'ye bölünerek ortalama alınmış olunuyor.
top=0; //Bir sonraki ölçüm için toplam sıfırlanıyor.
milivolt=ort*4.8828125; // ölçülen değeri milivolta çevirmek için ortalama değer 5V/1024 değeri nin 1000 ile çarpılmasından çıkan katsayı ile çarpılıyor.
sicaklik=milivolt/10; // Sicaklik LM35 her 10 mV 'da 1 derece arttığı için milivolt değeri 10'a bölünerek hesağlanıyor.
FloatToStr(sicaklik,txt); //Sıcaklık LCD'de gösterilmek için Stringe dönüştürülüyor.
lcd_out(1,1,"Sicaklik="); // LCD'nin 1. satır 1.sütunundan itibaren "Sicaklik=" yqzisi yazdırılıyor.
Lcd_Chr(1,10,txt[0]); // Stringe dönüştürülen sicaklik değeri LCD'de karakter karakter gösteriliyor.
Lcd_Chr_CP(txt[1]);
Lcd_Chr_CP(txt[2]);
Lcd_Chr_CP(txt[3]);
Lcd_Chr_CP(txt[4]);
Lcd_Chr_CP('C');
ByteToStr(buton,mesaj);
lcd_out(2,1,"Ayarlanan="); // LCD'nin 1. satır 1.sütunundan itibaren "Sicaklik=" yqzisi yazdırılıyor.
Lcd_Chr(2,11,mesaj[1]); // Stringe dönüştürülen sicaklik değeri LCD'de karakter karakter gösteriliyor.
Lcd_Chr_CP(mesaj[2]);


Lcd_Chr_CP('C');


if (PORTD.F1){buton--; delay_ms(500);}
if (PORTD.F2){buton++; delay_ms(500);}


if(sicaklik>buton+1)
{
PORTC.F1=1;
}
else { PORTC.F1=0; }


if(sicaklik<buton-1)
{
PORTC.F2=1;
}
else { PORTC.F2=0; }
EEPROM_Write(0x20,buton);


}
}

ElRGa9.jpg
 

Forum istatistikleri

Konular
128,133
Mesajlar
915,308
Kullanıcılar
449,849
Son üye
cagan20

Yeni konular

Çevrimiçi üyeler

Geri
Üst