Toplam 10 adet sonuctan sayfa basi 1 ile 10 arasi kadar sonuc gösteriliyor
  1. #1
    forum üyesi
    Üyelik tarihi
    Mayıs.2011
    Mesajlar
    18

    Standart 16F876A & ds1307 & ds18b20 & max7219 ile geliştirmeye açık saat devresi

    MikroC ile yaptığım ilk çift taraflı plaket çalışmam. Devrede 5 tane button ve buzzer var. Şimdilik yok ama ileride alarm v.b. özellikler ekleyeceğim.



    Dosyaları ekleyemedim. 1.2GB dolsu diyor! Bunun nedenini bilen varmı?

    ds1307.c
    Kod:
    sbit Soft_I2C_Scl           at RC3_bit;
    sbit Soft_I2C_Sda           at RC4_bit;
    sbit Soft_I2C_Scl_Direction at TRISC3_bit;
    sbit Soft_I2C_Sda_Direction at TRISC4_bit;
    
    char okunan1,okunan2,okunan3;
    void Init_I2C()
    {
         Soft_I2C_Init();
    }
    void ds1307_read_time()
    {
         Soft_I2C_Start();
         Soft_I2C_Write(0xD0);
         Soft_I2C_Write(0x00);
         Soft_I2C_Start();
         Soft_I2C_Write(0xD1);
         okunan3=Soft_I2C_Read(1);
         okunan2=Soft_I2C_Read(1);
         okunan1=Soft_I2C_Read(0);
         Soft_I2C_Stop();
    }
    void ds1307_read_date()
    {
         Soft_I2C_Start();
         Soft_I2C_Write(0xD0);
         Soft_I2C_Write(0x04);
         Soft_I2C_Start();
         Soft_I2C_Write(0xD1);
         okunan1=Soft_I2C_Read(1);
         okunan2=Soft_I2C_Read(1);
         okunan3=Soft_I2C_Read(0);
         Soft_I2C_Stop();
    }
    void first_set()
    {
             Soft_I2C_Start();
             Soft_I2C_Write(0xD0);
             Soft_I2C_Write(0x00);
             Soft_I2C_Write(0x00);           // Address PCF8583 for reading R/W=1
             Soft_I2C_Write(0x00);           // Address PCF8583 for reading R/W=1
             Soft_I2C_Write(0x00);           // Address PCF8583 for reading R/W=1
             Soft_I2C_Write(0x00);           // Address PCF8583 for reading R/W=1
             Soft_I2C_Write(0x01);           // Address PCF8583 for reading R/W=1
             Soft_I2C_Write(0x01);           // Address PCF8583 for reading R/W=1
             Soft_I2C_Write(0x12);           // Address PCF8583 for reading R/W=1
             Soft_I2C_Write(0x90);           // Address PCF8583 for reading R/W=1
             Soft_I2C_Stop();
    
    }
    void ds1307_write(char adress,char deger)
    {
             Soft_I2C_Start();
             Soft_I2C_Write(0xD0);
             Soft_I2C_Write(adress);
             Soft_I2C_Write(deger);           //
             Soft_I2C_Stop();
    }
    ds18b20.c
    Kod:
    char eksi;  //0 hayır 1 evet
    char isi;   //tam kısmı
    char ondalik;  //noktadan sonraki bölüm
    short ds18b20bDQ;
    
    void ds18b20_isi_oku()
    {
        char ds18b20Lsb;
        char ds18b20Msb;
        unsigned int sonuc;
        ds18b20bDQ=1;
        Ow_Reset(&PORTB, ds18b20bDQ);                         // Onewire reset signal
        Ow_Write(&PORTB, ds18b20bDQ, 0xCC);                   // Issue command SKIP_ROM
        Ow_Write(&PORTB, ds18b20bDQ, 0x44);                   // Issue command CONVERT_T
        Delay_us(150);
    
        Ow_Reset(&PORTB, ds18b20bDQ);
        Ow_Write(&PORTB, ds18b20bDQ, 0xCC);                   // Issue command SKIP_ROM
        Ow_Write(&PORTB, ds18b20bDQ, 0xBE);                   // Issue command READ_SCRATCHPAD
        eksi=0;
        ds18b20Lsb =Ow_Read(&PORTB, ds18b20bDQ);
        ds18b20Msb =Ow_Read(&PORTB, ds18b20bDQ);
        sonuc =ds18b20Msb;
        sonuc=(sonuc << 8);
        sonuc=sonuc  | ds18b20Lsb;
        if(ds18b20Msb.B7==1)
        {
            sonuc=(~sonuc)+1;
            ds18b20Lsb=sonuc & 0x00FF;
            ds18b20Msb=(sonuc & 0xFF00)>>8;
            eksi=1;
        }
    
        isi=ds18b20Lsb>>4 | ds18b20Msb<<4;
        ondalik=ds18b20Lsb & 0x0F;
        switch(ondalik)
        {
            case 0:
            case 1:
                ondalik=0;
                break;
            case 2:
            case 3:
                ondalik=1;
                break;
            case 4:
                ondalik=2;
                break;
            case 5:
            case 6:
                ondalik=3;
                break;
            case 7:
                ondalik=4;
                break;
            case 8:
            case 9:
                ondalik=5;
                break;
            case 10:
            case 11:
                ondalik=6;
                break;
            case 12:
                ondalik=7;
                break;
            case 13:
            case 14:
                ondalik=8;
                break;
            case 15:
                ondalik=9;
                break;
        }
    
    }
    max7219.c
    Kod:
    sbit max7219_CLOCK at RC0_bit;
    sbit max7219_DATA at RC1_bit;
    sbit max7219_LOAD at RC2_bit;
    sbit max7219_CLOCK_direction at TRISC0_bit;
    sbit max7219_DATA_direction  at TRISC1_bit;
    sbit max7219_LOAD_direction  at TRISC2_bit;
    
    
    
    void send_byte(char byte)
    {
         char sayac;
         char deger;
         deger=0x80;
         max7219_CLOCK=0;
         for(sayac=0;sayac<8;sayac++)
         {
             if(byte & deger)
                max7219_DATA=1;
             else
                max7219_DATA=0;
             max7219_CLOCK=1;
             Delay_us(2);
             max7219_CLOCK=0;
             deger=deger>>1;
         }
    }
    void show()
    {
         max7219_LOAD=1;
         Delay_us(100);
         max7219_LOAD=0;
    }
    
    void max7219_send(char adress,char byte)
    {
         max7219_LOAD=0;
         send_byte(adress);
         send_byte(byte);
         show();
    }
    void Init_max7219()
    {
         max7219_CLOCK_direction=0;
         max7219_DATA_direction=0;
         max7219_LOAD_direction=0;
    
        Delay_ms(800);
         //komutlar
         max7219_send(0x0B,0x05);  // Scan Limit = 6 digit
        Delay_ms(2);
         max7219_send(0x0A,0x0F);  //Intensity = 1/32
        Delay_ms(2);
         max7219_send(0x09,0x00);  //decode mode = No decode for digits 7–0
        Delay_ms(2);
          max7219_send(0x0C,0x01);  //Shutdown = Normal Operation
        Delay_ms(2);
        max7219_send(0x0F,0x00);  //Display test= normal operation
        Delay_ms(2);
    }
    Kod:
    #include "ds1307.c"
    #include "ds18b20.c"
    #include "max7219.c"
    
    
    sbit AYAR           at RA0_bit;
    sbit ARTTIR         at RA1_bit;
    sbit AYAR_Direction    at TRISA0_bit;
    sbit ARTTIR_Direction  at TRISA1_bit;
    
    sbit LED1 at RB2_bit;
    sbit LED2 at RB3_bit;
    sbit LED3 at RB4_bit;
    sbit LED4 at RB5_bit;
    sbit LED1_direction  at TRISB2_bit;
    sbit LED2_direction  at TRISB3_bit;
    sbit LED3_direction  at TRISB4_bit;
    sbit LED4_direction  at TRISB5_bit;
    
    char displays[6];
    char seven_segments[]={0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B, 0x5F, 0x70, 0x7F, 0x7B,
         0x00, //sönük  10
         0x63, //derece işareti   11
         0x01,  //- işareti    12
         0x77, //A    13
         0x0E,  //L    14
         0b01000111 //F
         };
    //1 saat 2 dakika 3 saniye 4 gün 5 ay 6 yıl 7 bitiş
    char adresslist[]={2,1,0,4,5,6};//ds1307 adres listesi
    char oku;
    char okumaisareti;
    char saattarihderece; //0 saat 1 tarih 2 derece
    void Interrupt()
    {
         if(INTCON.INTF==1)
         {
              if(saattarihderece==0)
              {
                  LED1=~LED1;
                  LED2=LED1;
                  LED3=LED1;
                  LED4=LED1;
              }
              oku=1;
              INTCON.INTF=0;
              okumaisareti++;
              if(okumaisareti==15 && saattarihderece==0)
              {
                   okumaisareti=0;
                   saattarihderece=1;   //tarih
                   LED1=0;
                   LED2=1;
                   LED3=0;
                   LED4=1;
              }
              else if(okumaisareti==5 && saattarihderece==1)
              {
                   okumaisareti=0;
                   saattarihderece=2;  //derece
                   LED1=0;
                   LED2=0;
                   LED3=0;
                   LED4=1;
              }
              else if(okumaisareti==5 && saattarihderece==2)
              {
                   okumaisareti=0;
                   saattarihderece=0;  //saat
              }
         }
    }
    void isi_oku()
    {
    
        displays[0]=10;
        ds18b20_isi_oku();
        if(eksi==1)
            displays[1]=12;
        else
            displays[1]=10;
        displays[2]=isi / 10;
        if(displays[2]==0)
            displays[2]=10;
        displays[3]=isi % 10;
        displays[4]=ondalik;
        displays[5]=11;
    
    }
    
    void ayarla()
    {
         if(EEPROM_Read(0)!=0x17)
         {
             first_set();
             EEPROM_Write(0,0x17);
         }
         else
         {
             ds1307_write(0x07,0x90);
        }
    }
    void esitle()
    {
         displays[0]=(okunan1 & 0xF0)>>4;
         displays[1]=okunan1 & 0x0F;
         displays[2]=(okunan2 & 0xF0)>>4;
         displays[3]=okunan2 & 0x0F;
         displays[4]=(okunan3 & 0xF0)>>4;
         displays[5]=okunan3 & 0x0F;
    }
    void saatoku()
    {
         ds1307_read_time();
         esitle();
    }
    void tarihoku()
    {
         ds1307_read_date();
         esitle();
    }
     void send_six_byte()
    {
         char konum;
         char sayac;
         for(sayac=0;sayac<1;sayac++)
         {
           for(konum=0;konum<6;konum++)
           {
                max7219_send(konum+1,seven_segments[displays[konum]]);
           }
         }
    }
    
    void Intterrupt_enable()
    {
         OPTION_REG.INTEDG=1;
         INTCON.INTE=1;
         INTCON.GIE=1;
         
    }
    
    void Init()
    {
         ADCON1=0x06;
         displays[0]=0;
         displays[1]=0;
         displays[2]=0;
         displays[3]=0;
         displays[4]=0;
         displays[5]=0;
    
    }
    void InitPorts()
    {
         PORTA=0;
         AYAR_direction=1;
         ARTTIR_direction=1;
         PORTB=0;
         TRISB.B0=1;
         LED1_direction=0;
         LED2_direction=0;
         LED3_direction=0;
         LED4_direction=0;
         PORTC=0;
    }
    void display12kapat()
    {
        displays[0]=10;
        displays[1]=10;
    }
    void display34kapat()
    {
        displays[2]=10;
        displays[3]=10;
    }
    void display56kapat()
    {
        displays[4]=10;
        displays[5]=10;
    }
    void display3456kapat()
    {
        display34kapat();
        display56kapat();
        send_six_byte();
    }
    void display1256kapat()
    {
        display12kapat();
        display56kapat();
        send_six_byte();
    }
    void display1234kapat()
    {
        display12kapat();
        display34kapat();
        send_six_byte();
    }
    char arttirvemaxkontrol(char *display0,char *display1,char maximum,char minimum)
    {
         char deger;
         *display1=*display1+1;
         if(*display1==10)
         {
            *display0=*display0+1;
            *display1=0;
         }
         deger=(*display0 * 10) + *display1;
         if(deger==maximum)
         {
            *display0=minimum / 10;
            *display1=minimum % 10;
         }
         deger=(*display0 <<4) | *display1;
         return deger;
    }
    void deger_arttir(char ayardurumu)
    {
         char sonuc;
         if(ayardurumu==2)
         {
            sonuc=arttirvemaxkontrol(&displays[2],&displays[3],60,0);
         }
         else if(ayardurumu==3 )
         {
            sonuc=arttirvemaxkontrol(&displays[4],&displays[5],60,0);
         }
         else if(ayardurumu==1)
         {
            sonuc=arttirvemaxkontrol(&displays[0],&displays[1],24,0);
         }
         else if(ayardurumu==4)
         {
            sonuc=arttirvemaxkontrol(&displays[0],&displays[1],32,1);
         }
         else if(ayardurumu==5)
         {
            sonuc=arttirvemaxkontrol(&displays[2],&displays[3],13,1);
         }
         else if(ayardurumu==6)
         {
            sonuc=arttirvemaxkontrol(&displays[4],&displays[5],100,0);
         }
         ds1307_write(adresslist[ayardurumu-1],sonuc);
         send_six_byte();
    }
    void altledleracik()
    {
         LED1=0;
         LED3=0;
         LED2=1;
         LED4=1;
    }
    void butunledleracik()
    {
         altledleracik();
         LED1=1;
         LED3=1;
    }
    void Tus_kontrol()
    {
         char ayardurumu;//1 saat 2 dakika 3 saniye 4 gün 5 ay 6 yıl 7 bitiş
         ayardurumu=0;
         for(;;)
         {
           if(AYAR==0)
           {
               Delay_ms(300);
               ayardurumu+=1;
               if(ayardurumu==7)
                  return;
               if(ayardurumu==1)
               {
                  saatoku();
                  display3456kapat();
                  butunledleracik();
               }
               else if(ayardurumu==2)
               {
                  saatoku();
                  display1256kapat();
                  butunledleracik();
               }
               else if(ayardurumu==3)
               {
                  saatoku();
                  display1234kapat();
                  butunledleracik();
               }
               else if(ayardurumu==4)
               {
                  tarihoku();
                  display3456kapat();
                  altledleracik();
               }
               else if(ayardurumu==5)
               {
                  tarihoku();
                  display1256kapat();
                  altledleracik();
               }
               else if(ayardurumu==6)
               {
                  tarihoku();
                  display1234kapat();
                  altledleracik();
               }
           }
           if(ARTTIR==0)
           {
               Delay_ms(300);
               deger_arttir(ayardurumu);
           }
           if(AYAR==1 && ayardurumu==0)
           {
              Delay_ms(50);
              return;
           }
         }
    }
    
    void main() 
    {
         isi_oku();
         Init();
         InitPorts();
         Init_max7219();
         Init_I2C();
         ayarla();
         okumaisareti=0;
         saattarihderece=0;
         Intterrupt_enable();
         for(;;)
         {
           INTCON.GIE=0;
    
           Tus_kontrol();
           INTCON.GIE=1;
           if(oku==1 && saattarihderece==0)
           {
                  saatoku();
                  oku=0;
                  send_six_byte();
           }
           else if(oku==1 && saattarihderece==2)
           {
                  isi_oku();
                  oku=0;
                  send_six_byte();
           }
           else if(oku==1 && saattarihderece==1)
           {
                  tarihoku();
                  oku=0;
                  send_six_byte();
           }
         }
         
    }

  2. #2
    Surfing...
    Üyelik tarihi
    Ocak.2009
    Mesajlar
    1.814

    Standart Cevap: 16F876A & ds1307 & ds18b20 & max7219 ile geliştirmeye açık saat devresi

    Plaketi SMD ve Çift taraflı olarak tasarladığınız halde neden bukadar büyük tuttunuzki? Yani Biraz israf olmuş.
    Bir ulusu yok etmenin en iyi yolu o ulusun dilini yok etmektir

    Özel mesaj yoluyla yardım istemek Kesinlikle yasaktır

  3. #3
    Yasaklı üye
    Üyelik tarihi
    Ekim.2008
    Mesajlar
    110

    Standart Cevap: 16F876A & ds1307 & ds18b20 & max7219 ile geliştirmeye açık saat devresi

    selam
    güzel calışma kardeş eline saglık

    kardeş önce buraya yükle FileServe - Upload - Free Online Storage & File Upload sonra foruma likkini at

    AB ELEKTRONK-GVENLK-OTOMASYON

  4. #4
    forum üyesi
    Üyelik tarihi
    Mayıs.2011
    Mesajlar
    18

    Standart Cevap: 16F876A & ds1307 & ds18b20 & max7219 ile geliştirmeye açık saat devresi

    Arkadaşlar dosyalar aşağıdaki linktedir. Plaketi bir kutuya koyacağım için boyutlarını büyük yaptım. Birde ilk çift taraflı plaket çalışmam. Fazla zorlamak istemedim.

    Free Online Storage & File Upload with FileServe

  5. #5
    forum üyesi
    Üyelik tarihi
    Kasım.2009
    Nereden
    ANTALYA
    Mesajlar
    124

    Standart Cevap: 16F876A & ds1307 & ds18b20 & max7219 ile geliştirmeye açık saat devresi

    Arkadaşlar devrenin isis ve ares dosyalarını 7.0 versiyonu olarak kaydedip tekrar yükleyebilirmisiniz.

  6. #6
    forum üyesi
    Üyelik tarihi
    Mayıs.2011
    Mesajlar
    18

    Standart Cevap: 16F876A & ds1307 & ds18b20 & max7219 ile geliştirmeye açık saat devresi

    Aşağıdaki linkte 7.0 dosyalarıda mevcuttur.

    File name: saaat_.rar File size: 139.62 KB

  7. #7
    ***Site Kurucusu***
    Üyelik tarihi
    Mart.2007
    Nereden
    Mersin
    Mesajlar
    545

    Standart Cevap: 16F876A & ds1307 & ds18b20 & max7219 ile geliştirmeye açık saat devresi

    güzel çalışma eline saglık başarıların devamını dilerim.
    Özel mesaj yoluyla yardım istemek Kesinlikle yasaktır. www.elektrobilim.org

  8. #8
    forum üyesi
    Üyelik tarihi
    Eylül.2010
    Mesajlar
    40

    Standart Cevap: 16F876A & ds1307 & ds18b20 & max7219 ile geliştirmeye açık saat devresi

    ellerinize sağlık gerçekten güzel bir çalışma, müsadenizle bir sorum olacak, ilk olarak displayler ortak anot mu

  9. #9
    forum üyesi
    Üyelik tarihi
    Mayıs.2011
    Mesajlar
    18

    Standart Cevap: 16F876A & ds1307 & ds18b20 & max7219 ile geliştirmeye açık saat devresi

    Sağolasın. Display ler ortak katot. Max7219 ortak katotu sürebiliyor.

  10. #10
    forum üyesi
    Üyelik tarihi
    Mayıs.2011
    Mesajlar
    18

    Standart Cevap: 16F876A & ds1307 & ds18b20 & max7219 ile geliştirmeye açık saat devresi

    Teşekkürler. Displayler ortak katot. Max7219 ortak katodu sürebiliyor. Kolay gelsin.

 

 

Konu Bilgileri

Bu Konuya Gözatan Kullanıcılar

Şu anda 1 kullanıcı bu konuyu görüntülüyor. (0 kayıtlı ve 1 misafir)

Benzer Konular

  1. DS1307+DS18B20+Pic16F628A Saat+Termometre
    Konu Sahibi eln07 Forum PIC UYGULAMALARI
    Cevap: 6
    Son Mesaj : 10.Şubat.2012, 18:31
  2. 60 led dijital saat ds1307 4028 4067 16f877A PCF8574
    Konu Sahibi omereliusuk Forum PIC UYGULAMALARI
    Cevap: 1
    Son Mesaj : 05.Ocak.2012, 12:27
  3. 60 led dijital saat ds1307 4028 4067 16f877
    Konu Sahibi omereliusuk Forum PIC UYGULAMALARI
    Cevap: 12
    Son Mesaj : 01.Aralık.2011, 21:24
  4. Cevap: 0
    Son Mesaj : 07.Mart.2010, 22:50
  5. 10 CM 7 Segment Display DS18B20 & DS1302 Saat Termometre
    Konu Sahibi aliveli Forum PIC UYGULAMALARI
    Cevap: 5
    Son Mesaj : 14.Şubat.2010, 15:36

Yetkileriniz

  • Konu Acma Yetkiniz Yok
  • Cevap Yazma Yetkiniz Yok
  • Eklenti Yükleme Yetkiniz Yok
  • Mesajınızı Değiştirme Yetkiniz Yok
  •