Belirli aralıkla sıcaklık nasıl gösterebilirim ?

Başlatan baran123, 30 Nisan 2014, 18:34:35

baran123

Merhaba 74hc595 ile bir devre yapacağım saat ve termemetre devremi birleştiricem yani söyle düsündüm 6 tane display süeceğim 74hc ile saati ve sıcaklıgı gösterebiliyorum fakat saati göstersin 30 saniye sonra sıcaklık göstersin sıcaklığı ise 10 saniye göstersin farz edelim bunun için timer mı kullanmalıyım söyle düsündüm timer0'ı 10 saniyeye ayarlasam içine değişken atsam 3 defa yapınca 30 saniye olur kontrol ifadesi ile sıcaklık fonksiyonunu cagırırım sizce olur gibi ama sıcaklıgı 10 saniye göstereeği için timer içinde delay kullanmıs olurum buda kotu oluyor @z hocam anlatmıstı ama delaysız nasıl yapacagımı daha tam anlayamadım yardımcı olursanız sevinirim iyi çalışmalar

OG

Elinde zaten saat var. onu sürekli okuyorsun, ondan gelen saniye bilgisine göre saati veya sıcaklığı gösterebilirsin. Timer kullanman gereksiz.

Saat cipini oku
Şu saniye ile şu saniye arasında ise saati goster
Diğerlerinde ise ısı sensoru oku ve sıcaklık goster

gibi.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

mehmet

Bu tip olaylar çok hassas olmadığı için yakın değerler içerisinde
delay fonksiyonu ya da bir sayıcı ile gecikme sağlanabilir...
Eğer çok büyük display kullanmayacaksanız MAX7219 bence
daha uygun. direnc.net' te tanesi 8.39TL. ebay' da 10 tanesi 4.28$

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

baran123

Alıntı yapılan: OG - 30 Nisan 2014, 18:41:25
Elinde zaten saat var. onu sürekli okuyorsun, ondan gelen saniye bilgisine göre saati veya sıcaklığı gösterebilirsin. Timer kullanman gereksiz.

Saat cipini oku
Şu saniye ile şu saniye arasında ise saati goster
Diğerlerinde ise ısı sensoru oku ve sıcaklık goster

gibi.
Doğru,fikir için sağ ol deneyeceğim.

baran123

saniye bilgisine göre yaparken bir sıkıntım var şöyle ki ;
void temp(void)
{
 ////sıcaklık gösteriyor
   for(;;)
   {
      rtc_get_date(day,mth,year,dow);   
      rtc_get_time(hrs,min,sec); 
      if(!(second > 50)&&(second < 59))
      {
       break;// saniye aralıkda değil ise çağırıldığı yere geri döner mi ? return yazdıgımda hata veriyor fonksiyondan nasıl cıkarım ve bu mantık doğru mu ?
      }
}
void main(void)
{
    if((second > 50)&&(second < 59))
    {
       temp(); // yaptık diyelim saniye 50 ile 59 arasında iken sıcaklık gösterme fonksiyonun çağırıyor
    }
}

MrDarK

#5
Mainde hatan var. daha second'u guncellemeden if sorgusu içerisine alamazsın.

Ayrıca main içinde while göremedim. Kodu parça parça koyma eğer bu kadar değilse tabiki :) Bu şekilde çalışan bir işlemci sürekli reset atar.

second bilgisini sorabilmek için önce okuma yapmalısın.

Örnek bir kod parçası ;

void temp(void)
{
 ////sıcaklık gösteriyor
 // Burada sadece sıcaklığı güncelleyecek kodları yükleyeceksin. Herhangi bir while yada sonsuz döngü kullanma
 // Bir kere yap çık, Main içindeki sorgu zaten seni 50 ile 59 arasında buraya atacak
}
void main(void)
{
    // Ana döngün içinde while olduğunu varsayıyorum.
    rtc_get_time(hrs,min,sec); 
    if((second >= 50)&&(second <= 59))
    {
       temp(); 
    }
}


// Dipnot ; sec olarak fonksiyona yolluyorsun second olarak okuyorsun ? tam kodu görmek lazım
Picproje Eğitim Gönüllüleri ~ MrDarK

baran123

hocam ben söyle yapmak istiyordum saniye 50 ye kadar saati gösterecek 50-55 arasında tarihi 55-59 arasında sıcaklığı dediğiniz gibi yapmaya çalıştım fakat daha başaramadım (saat,sıcaklık,tarih 3 farklı fonksiyon halinde) bitti sayılır bir el atarsanız sevinirim sizce nerede hata yapıyorum ?

#include <16F877A.h>
#device adc=16
#fuses NOWDT,XT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOWRT,NOPROTECT,NODEBUG
#use delay(clock=4M)

#include "ds18b20.c"
#include "ds1302.c"
#include <stdlib.h>
#include <math.h>             
                  
#define DS     pin_B1                   
#define SH_CP  pin_B0                              
#define ST_CP  pin_B2  
#define MODE   pin_C5
#define DOWN   pin_C6        
#define UP     pin_C7    

int8 sec,min,hrs,day,mth,year,dow;
float temp1,tam,ondalik;                  
const int digit[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x6F};
                                
void send(unsigned char data)
{                                     
   unsigned  char i;       
              
   for(i = 0x80; i > 0; i >>= 1)
   {                                
      if(i & data) output_high(DS);
      else output_low(DS);     
      output_high(SH_CP);           
      output_low(SH_CP);   
   }                                
}
                      
                         
void temp(void)
{                
   for(;;)
   { 
      rtc_get_date(day,mth,year,dow);   
      rtc_get_time(hrs,min,sec);       
                                              
      temp1 = ds1820_read();                                                  
              
      ondalik = modf(temp1,&tam);
      ondalik = ondalik * 100;                                  
               
      if((temp1 >= -50.99) && (temp1 <= 125.00))
      {
         if((temp1 >= 10.00) && (temp1 <= 99.99))
         { 
            output_high(pin_b4);
            output_low(pin_b5);   
            output_low(pin_b6);
            send(0x39);                  
            send(0x63);
            send(digit[(int)ondalik % 10]);     
            send(digit[(int)ondalik / 10]);
            send(digit[(int)tam % 10]);     
            send(digit[(int)tam / 10]);
            output_high(ST_CP);        
            output_low(ST_CP);          
         }                            
                            
         else if((temp1 > 99.99) && (temp1 <= 125.00))
         {                
            output_low(pin_b4);
            output_high(pin_b5);
            output_low(pin_b6);
            send(0x39);                  
            send(0x63);
            send(digit[(int)ondalik / 10]);
            send(digit[(int)tam % 10]);
            send(digit[(int)(tam / 10) % 10]);
            send(digit[(int)tam / 100]);
            output_high(ST_CP);        
            output_low(ST_CP);
         }                               
                                        
         else if((temp1 >= 0.00) && (temp1 < 9.99))                    
         {                           
            output_high(pin_b4);
            output_low(pin_b5); 
            output_low(pin_b6);
            send(0x39);                  
            send(0x63);
            send(digit[(int)ondalik % 10]);
            send(digit[(int)ondalik / 10]);
            send(digit[(int)tam % 10]);
            send(0x00);                   
            output_high(ST_CP);     
            output_low(ST_CP);  
         }                            
                                      
         else if((temp1 >= -9.99) && (temp1 < 0.00))        
         {                                                        
            output_high(pin_b4);
            output_low(pin_b5); 
            output_low(pin_b6);
            ondalik = abs(ondalik);
            tam = abs(tam); 
            send(0x39);                  
            send(0x63);
            send(digit[(int)ondalik % 10]);
            send(digit[(int)ondalik / 10]);
            send(digit[(int)tam % 10]);   
            send(0x40);            
            output_high(ST_CP);     
            output_low(ST_CP);
         }
         
         else if((temp1 >= -50.99) && (temp1 < 10.00))        
         {                                                        
            output_low(pin_b4);
            output_high(pin_b5);
            output_low(pin_b6);
            ondalik = abs(ondalik);
            tam = abs(tam); 
            send(0x39);                  
            send(0x63);
            send(digit[(int)ondalik / 10]);
            send(digit[(int)tam % 10]);
            send(digit[(int)tam / 10]); 
            send(0x40);            
            output_high(ST_CP);     
            output_low(ST_CP);
         }
                   
         else                 
         { 
            output_low(pin_b4);
            output_low(pin_b5);
            output_low(pin_b6);
            send(0x00);
            send(0x50);                           
            send(0x5C);                  
            send(0x50);
            send(0x50);
            send(0x79);
            output_high(ST_CP);     
            output_low(ST_CP);
         }                    
      }                    
                         
      else                        
      {   
         output_low(pin_b4);
         output_low(pin_b5); 
         output_low(pin_b6);
         send(0x00);
         send(0x50);
         send(0x5C);                  
         send(0x50);
         send(0x50);
         send(0x79);    
         output_high(ST_CP);     
         output_low(ST_CP);
      } 
   }
}

void date(void)
{
   for(;;)
   {
      rtc_get_date(day,mth,year,dow);   
      rtc_get_time(hrs,min,sec);
      
      output_high(pin_b4);
      output_low(pin_b5); 
      output_high(pin_b6);
      send(digit[year % 10]); 
      send(digit[year / 10]);            
      send(digit[mth % 10]); 
      send(digit[mth / 10]); 
      send(digit[day % 10]); 
      send(digit[day / 10]);
      output_high(SH_CP);           
      output_low(SH_CP); 
   }
}


void time(void)
{
   for(;;)
   {
      rtc_get_date(day,mth,year,dow);   
      rtc_get_time(hrs,min,sec);
      output_high(pin_b4);
      
      output_low(pin_b5);    
      output_high(pin_b6);
      delay_ms(500);
      send(digit[sec % 10]);                      
      send(digit[sec / 10]); 
      send(digit[min % 10]);                 
      send(digit[min / 10]);         
      send(digit[hrs % 10]);
      send(digit[hrs / 10]);
      output_low(pin_b4);
      output_low(pin_b5);    
      output_low(pin_b6);
      delay_ms(500);
      output_high(ST_CP);        
      output_low(ST_CP);
   }
}                            

void main()           
{
   setup_psp(PSP_DISABLED);                  
   setup_spi(SPI_SS_DISABLED); 
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);   
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_adc_ports(NO_ANALOGS);  
   setup_adc(ADC_OFF); 
   setup_ccp1(CCP_OFF);     
   setup_ccp2(CCP_OFF);
   setup_vref(FALSE);           
   
   set_tris_b(0x00);
   set_tris_d(0x80);
   output_b(0x00);   
   
   rtc_init();                              
                              
   temp1 = ds1820_read(); 
   if(temp1 == 85) temp1 = 0;                    
               
   for(;;)  
   {      
      switch(sec)
      {
         case 0:  time();break;
         case 50: date();break;  
         case 55: temp();break;
      }       
   }                                            
}                           

Recep METE

@baranekrem, elimde böyle bir çalışma var.saat-tarih-sıcaklık  belirli aralıklala displayde görülüyor.Alarm var.Kodlar lazımsa gönderebilirim.Bilgisayarım biraz yavaş olduğu için video programı biraz kastı ağır çalışıyor gibi görülüyor.gerçekte öyle değil.
http://youtu.be/Oprh4vxTS0g
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

baran123

@semfero ben 74hc ile yapmaya çalışıyorum ama senin tarama yöntemiyle yapılmış çok güzel gönderirsen sevinirim.

xoom


mehmet

Css c den anlamıyorum ancak tali fonsiyonlar
for(;;) içinden nasıl çıkıyorlar?
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

baran123

@mehmet bir kaç şey denedim olmayınca sade halini ekledim

OG

Önce saati sıcaklığı unut.
Ekrana birşeyler gönder.
Bu tamam olunca saati oku gonder
bu tamam olunca diğeri

gibi

Aşama aşama
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

xoom

Alıntı yapılan: semfero - 01 Mayıs 2014, 18:40:26
@baranekrem, elimde böyle bir çalışma var.saat-tarih-sıcaklık  belirli aralıklala displayde görülüyor.Alarm var.Kodlar lazımsa gönderebilirim.Bilgisayarım biraz yavaş olduğu için video programı biraz kastı ağır çalışıyor gibi görülüyor.gerçekte öyle değil.
http://youtu.be/Oprh4vxTS0g

videodaki kodlar ccs c ise eklermisin incelemek istiyorum.

Recep METE

Arkadaşım konunun başında söylediğin sorunu çözebildin mi?Bende bu konuda çalışıyorum.Eğer sorunu çözdüysen çözümünü paylaşır mısın?
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d