Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Ledlerle Analog Saat

Başlatan matador, 03 Eylül 2013, 14:40:04

matador

Eskiden sayıcılarla bir analog saat devresi yapmıştım onlarca sayıcı entegre fazlaca diyot kullanmıştım devre haliyle fazla enerji tüketiyor şimdi pic ile yapmak istedim fakat isis'te denerken devre yavaşlıyor bu yüzden karamsar kaldım devreyi yapsam mı yapmasam mı diye fikir almanın en mantıklısı olduğunu düşünüp buraya yazdım.

Bir hatam var ise göremediğin bu yavaş çalışma ile ilgili yardımcı olursanız sevinirim.

Devre aşağıda ki gibi 60 led sütun halinde olacak 5 satır şeklinde. Toplam 301 led var. Bu devreye benzer örnekler internette bolca var atmelle yapılanlar özellikle neyse fazla uzatmadan kod ile devre:

#include <main.h>
#include <ds1302.c>
  #include <math.h>
  #include <stdio.h>
  #include <string.h>

#define en1     PIN_E0
#define en2     PIN_E1
#define en3     PIN_E2
#define en4     PIN_C0

#use fast_io(a)
#use fast_io(b)
#use fast_io(d)


int gun,ay,yil,hafta,saat,dakika,saniye;


void sanye(int sure)
{

   int sure1,sure2,sure3;
  
   if(sure<16)
   {
      output_high(en4);
      output_e(0x06);
      output_b(sure);
   }
   
   if(sure>15&&sure<32)
   {
      sure1=(sure-16)*16;
      output_b(sure1);
      output_high(en4);
      output_e(0x05);
   }
   
   if(sure>31&&sure<48)
   {
      sure2=(sure-32);
      output_d(sure2);
      output_high(en4);
      output_e(0x03);
   }
   
   if(sure>47)
   {
      sure3=(sure-48)*16;
      output_d(sure3);
      output_e(0xFF);
      output_low(en4);
   }

}

void dakka(int dak)
{

   int dak1,dak2,dak3;
  
   if(dak<16)
   {
      output_high(en4);
      output_e(0x06);
      output_b(dak);
   }
   
   if(dak>15&&dak<32)
   {
      dak1=(dak-16)*16;
      output_b(dak1);
      output_high(en4);
      output_e(0x05);
   }
   
   if(dak>31&&dak<48)
   {
      dak2=(dak-32);
      output_d(dak2);
      output_high(en4);
      output_e(0x03);
   }
   
   if(dak>47)
   {
      dak3=(dak-48)*16;
      output_d(dak3);
      output_e(0xFF);
      output_low(en4);
   }

}

void sat(int saaat)
{
   int zaman;
   
   if(saaat<13)
   {
      zaman=saaat*5;
      
      if(zaman<16)
      {
         output_b(zaman);
         output_high(en4);
         output_e(0x06);
      }
      
      if(zaman>15&&zaman<32)
      {
         output_b(zaman*16);
         output_high(en4);
         output_e(0x05);
      }
      
      if(zaman>31&&zaman<48)
      {
         output_d(zaman);
         output_high(en4);
         output_e(0x03);
      }
      
      if(zaman>47)
      {
         output_d(zaman*16);
         output_e(0xff);
         output_low(en4);
      }
   }
   
   if(saaat>12)
   {
      zaman=(saaat-12)*5;
      if(zaman<16)
      {
         output_b(zaman);
         output_high(en4);
         output_e(0x06);
      }
      
      if(zaman>15&&zaman<32)
      {
         output_b(zaman*16);
         output_high(en4);
         output_e(0x05);
      }
      
      if(zaman>31&&zaman<48)
      {
         output_d(zaman);
         output_high(en4);
         output_e(0x03);
      }
      
      if(zaman>47)
      {
         output_d(zaman*16);
         output_e(0xff);
         output_low(en4);
      }
   }
}

void main()
{
   int gun,ay,yil,hafta,saat,dakika,saniye;
   
   setup_adc_ports(AN0);
   setup_timer_2(T2_DIV_BY_1,199,1);

   setup_ccp1(CCP_PWM);
   set_pwm1_duty((int16)0);
   setup_comparator(NC_NC_NC_NC);
   
   set_tris_b(0x00);
   set_tris_c(0x80);
   set_tris_d(0x00);
   set_tris_e(0x00);
   
   output_b(0x00);
   output_d(0x00);
   output_e(0xff);
   
   rtc_init();
   rtc_set_datetime(2,9,13,1,17,0);

   while(TRUE)
   {
      rtc_get_date(gun,ay,yil,hafta);
      rtc_get_time(saat,dakika,saniye);
      sanye(saniye);
      delay_us(2500);
      dakka(dakika);
      delay_us(2500);
      sat(saat);
   }
}




Eski Devrenin Çalışma Videosu

Kabil ATICI

İsis programı hangi bilgisayarlarda test ediliyor bilmiyorum, ama bizim kullandığımız makinelerde özellikle zamanlama ile ilgili görevlerde zaman şaşması oluyor.
Özellikle çok fazla işlem yapılması gerektiğinde program kaplumbağa hızına düşüyor.
Gerçek devre üzerinde denemek gerekli.
Zaten üzerinde real time çip barındıyorsa bu iş daha kolay.

Sen devreni yap.  En kötü ihtimalle bir devreyi çalıştırmamanın 50 yolunu öğrenirsin.
ambar7


takyildiz

Projenin kaynak kodlarını paylaşabilir misiniz ?

Recep METE

Hocam isis şemasıni  veya semanin resmini yukler misiniz
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d