vấn đề đồng hồ thời gian thực dùng atmega8

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • hungtrinh36
    Thành viên tích cực
    • Apr 2011
    • 346

    #1

    vấn đề đồng hồ thời gian thực dùng atmega8

    -hôm qua mới code cái đồng hồ bằng con atmega 8,chỉ cần có giờ và phút thôi(làm bằng led đơn ghép lại),nhưng mô phỏng chỉ có số 8585 mà chưa biết chỉnh sửa sao,bác nào từng làm chỉ em với
    -với lại em định làm bằng led đơn ghép lại thì nên nối song song hay nối tiếp nhẩy(1 đoạn là 5 con,mạch em đang vẽ song song) và nối kiểu anot hay catot chung thì sáng tốt nhất, có cần tran để đưa mã led hay đưa thẳng giống led 7 thường thôi
    -các bác cho em ý kiến với
    code:
    PHP Code:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V1.24.6 Professional
    Automatic Program Generator
    © Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    e-mail:office@hpinfotech.com
    
    Project : 
    Version : 
    Date    : 10/27/2012
    Author  : F4CG                            
    Company : F4CG                            
    Comments: 
    
    
    Chip type           : ATmega8L
    Program type        : Application
    Clock frequency     : 8.000000 MHz
    Memory model        : Small
    External SRAM size  : 0
    Data Stack size     : 256
    *****************************************************/
    
    #include <mega8.h> 
    #include <delay.h>
    #include <ds1307.h>
    #include <i2c.h>
    // portc.4.5 la chan sda va scl
    #define led PORTD // port d de xuat ma led
    // port c de quet cac led
    #define led1 PORTC.0
    #define led2 PORTC.1
    #define led3 PORTC.2
    #define led4 PORTC.3  
    // cac chan pin b de nhan cac phim bam
    #define set PINB.0
    #define up PINB.1
    #define down PINB.2                   
    //Cac bit de quan ly trang thai cac phim
    bit set0=1,set1=1,up0=1,up1=1,down0=1,down1=1;
    
    unsigned char led7[]={0b00000011,
                          0b10011111,
                          0b00100101,
                          0b00001101,
                          0b01001001,
                          0b01000001,
                          0b00011111,
                          0b00000001,
                          0b00010001
                          } ;
    
    // I2C Bus functions
    #asm
       .equ __i2c_port=0x15 ;PORTC
       .equ __sda_bit=4
       .equ __scl_bit=5
    #endasm
    
    unsigned char h=10,m=00,s=00;//Bien gio phut giay
    unsigned char kt=0,a=0,x=0;
    
    //Ham con
    
    void kt_phim();   // ham kiem tra phim
    void read_ds1307();  // ham doc chip ds1307
    void hien_thi();    // ham hien thi led
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=P State2=P State1=P State0=P 
    PORTB=0x0F;
    DDRB=0x00;
    
    // Port C initialization
    // Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out 
    // State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0 
    PORTC=0x00;
    DDRC=0x0F;
    
    // Port D initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1 
    PORTD=0xFF;
    DDRD=0xFF;
    
    // I2C Bus initialization
    i2c_init();// khoi tao i2c
    
    // DS1307 Real Time Clock initialization
    // Square wave output on pin SQW/OUT: On
    // Square wave frequency: 1Hz
    
    rtc_init(0,1,0);// khoi tao rtc
    
    
    while (1)
          {
          x++;//Bien chay quan ly nhap nhay cac so tuong ung voi che do cai dat
          kt_phim();
          read_ds1307();
          hien_thi();
          if(x==100)
          {
          x=0;
          }
          };
    }    
    //  ham kiem tra va cai dat cho ds1307
    void read_ds1307()
    {
       if(kt==0)
         {
          if(a==1) //Kiem tra truoc do co cai dat lai gio,phut,giay khong
             { //Neu co thi cai dat lai du lieu dau vao cho DS1307
              rtc_set_time(h,m,s);a=0;
              delay_us(300);
              }
            rtc_get_time(&h,&m,&m); //Doc du lieu tu DS1307
         }
    }
    void hien_thi()
    {
     if((kt==0)||(kt!=1)||((kt==1)&&(x<50)))
     {
     led = led7[h/10];led1=1;delay_us(2000);led1=0;
     led = led7[h%10];led2=1;delay_us(2000);led2=0;
     }
     if((kt==0)||(kt!=2)||((kt==2)&&(x<50))) //Tuong tu nhu KT gio
     {
     led = led7[m/10];led3=1;delay_us(2000);led3=0;
     led = led7[m%10];led4=1;delay_us(2000);led4=0;
     }
    }
    void kt_phim()
    {
     set0=set1;
     set1=set; //Kiem tra trang thai ban dau cua phim
    if((set0==1)&&(set1==0)) //Kiem tra xem phim co dc nhan nha hay khong
     {                        //Neu dc nhan nha thi tang kt++,neu khong thi
      kt++;                   //doi toi khi nao phim dc nha moi tang bien kt
      if(kt>3)
      kt=0;                  
     }
    switch(kt) //Lua chon che do ung voi gia tri cua bien kt
     {
      case 0:break; //Tro lai che do chay binh thuong
      case 1: //Che do cai dat gio
      { 
       up0=up1;up1=up;a=1;
       if((up0==1)&&(up1==0))
        {
         h++;
         if(h>23)h=0;
        }
         down0=down1;down1=down;
         if((down0==1)&&(down1==0))
        {
         h--;
         if(h>23)h=23;
         }
        case 2: //Che do cai dat phut
        {
         up0=up1;up1=up;a=1;
         if((up0==1)&&(up1==0))
          {
          m++;
         if(m>59)m=0;
           }
           down0=down1;down1=down;
         if((down0==1)&&(down1==0))
           {
            m--;
         if(m>59)m=59;
         }
    break;
    }
    
    
    }
    }
         
    } 
    

    sao mà cái file .rar đính kem không được nhẩy
    em đính tạm cái hình
    Attached Files
  • nhuttan.lhu
    Thành viên chính thức
    • Sep 2011
    • 84

    #2
    có bác nào có mạch đồng hồ số khi mất điện và có điện lại vẫn chạy không, không cần chỉnh sửa lại giờ
    em đang cần!!!!

    Comment

    • dquy05
      Thành viên chính thức
      • Aug 2009
      • 73

      #3
      Nguyên văn bởi nhuttan.lhu Xem bài viết
      có bác nào có mạch đồng hồ số khi mất điện và có điện lại vẫn chạy không, không cần chỉnh sửa lại giờ
      em đang cần!!!!
      DS1307 dùng Pin nuôi là ok mà bác.
      Phạm Duy Quý

      PN:0973291335


      Dám nghĩ,dám nói,dám làm

      Comment

      • nhuttan.lhu
        Thành viên chính thức
        • Sep 2011
        • 84

        #4
        ý mình là chỉ có sử dụng 1 nguồn điện thôi không sử dụng nguồn khác

        Comment

        • chung1608
          Thành viên tích cực
          • Sep 2009
          • 4160

          #5
          Nguyên văn bởi nhuttan.lhu Xem bài viết
          ý mình là chỉ có sử dụng 1 nguồn điện thôi không sử dụng nguồn khác
          ko có điện thì ko có gì chạy hết, pin của ds1307 là pin chỉ nuôi con DS khi nguồn chính của mạch bị mất. Nó là cục 3V giống như trong máy tính, tới máy tính cũng cần có pin để nuôi BIOS mờ.

          Comment

          Về tác giả

          Collapse

          hungtrinh36 Tìm hiểu thêm về hungtrinh36

          Bài viết mới nhất

          Collapse

          Đang tải...