Thông báo

Collapse
No announcement yet.

Ds1307 không chạy theo thời gian thực dù đã có battery 3V?

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Ds1307 không chạy theo thời gian thực dù đã có battery 3V?

    Các bác xem giùm e đoạn code này.Em ráp mạch chạy OK hiển thị dc trên led7seg.Thế nhưng khi ngắt nguồn nuôi AVR thì lẽ ra khi bật lại con 1307 phải chạy tiếp theo thời gian thực,đằng này nó lại set về thời gian mặc định lúc khởi tạo là 12'38'00 .Chả biết code e có vấn đề gì các bác cho e ý kiến.Thks cac bác nhiều.




    #include <mega16.h>
    #include <delay.h>

    // I2C Bus functions
    #asm
    .equ __i2c_port=0x15 ;PORTC
    .equ __sda_bit=0
    .equ __scl_bit=1
    #endasm
    #include <i2c.h>

    // DS1307 Real Time Clock functions
    #include <ds1307.h>

    // Declare your global variables here
    unsigned char hour, min, sec;
    char const MAP[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };//Anode
    char DIS1,DIS2,DIS3,DIS4,DIS5,DIS6;

    void main(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A 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
    PORTA=0x00;
    DDRA=0xFF;

    // Port B initialization
    // Func7=In Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=T State6=T State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
    PORTB=0x00;
    DDRB=0xFF;

    // Port C 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=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D 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=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // I2C Bus initialization
    i2c_init();

    // DS1307 Real Time Clock initialization
    // Square wave output on pin SQW/OUT: Off
    // SQW/OUT pin state: 0
    rtc_init(0,0,0);
    rtc_set_time(12,38,00);
    while (1)
    {

    // Place your code here
    rtc_get_time(&hour,&min,&sec);
    DIS6=(MAP[sec%10]);
    PORTA = DIS6;
    PORTB.5=0;
    delay_ms(1);
    PORTB.5=1;

    DIS5 =MAP[sec/10];
    PORTA = DIS5;
    PORTB.4=0;
    delay_ms(1);
    PORTB.4=1;

    DIS4=(MAP[min%10]);
    PORTA = DIS4;PORTA.7=0;
    PORTB.3=0;
    delay_ms(1);
    PORTB.3=1;

    DIS3 =MAP[min/10];
    PORTA = DIS3;
    PORTB.2=0;
    delay_ms(1);
    PORTB.2=1;

    DIS2=(MAP[hour%10]);
    PORTA = DIS2; PORTA.7=0;
    PORTB.1=0;
    delay_ms(1);
    PORTB.1=1;

    DIS1 =MAP[hour/10];
    PORTA = DIS1;
    PORTB.0=0;
    delay_ms(1);
    PORTB.0=1;

    };
    }

  • #2
    Bạn gửi sơ đồ nguyên lý lên được không? Cái này chắc do phần cứng thôi, chứ phần mềm nó ko hư kiểu này đâu. Mà bạn đã làm được phần nút nhấn chỉnh thời gian chưa?
    Nhận làm mạch, ĐAMH sử dụng vđk Pic & AVR tại tp.HCM
    Liên hệ sđt: 0902.808.371

    Comment


    • #3
      Click image for larger version

Name:	ds1307.png
Views:	1
Size:	46.0 KB
ID:	1353644
      chưa minh vẫn chưa làm được phần chỉnh giờ nữa.chỉ mới hiển thị lên led 7 đoạn thôi.với lại mình định làm 1 module dự báo theo sơ đồ nguyen lý này .Chẳng hạn như xác lập tới 03h15' thì sẽ có dòng ra ở 1 port.
      If led1 =0(giá trị giờ theo mình đọc thập phân)
      led2=3
      led3=1
      led4=5
      led5=0
      led6=0

      thì portd=1
      delay_ms(12 000 000) (dòng ra trong khoảng 200 minute) sau đó mới ngắt
      không biết lược đồ cơ bản như vậy đã ổn chưa vậy bác?

      Comment


      • #4
        Nguyên văn bởi binhminhdem Xem bài viết

        #include <mega16.h>
        #include <delay.h>

        // I2C Bus functions
        #asm
        .equ __i2c_port=0x15 ;PORTC
        .equ __sda_bit=0
        .equ __scl_bit=1
        #endasm
        #include <i2c.h>

        // DS1307 Real Time Clock functions
        #include <ds1307.h>

        // Declare your global variables here
        unsigned char hour, min, sec;
        char const MAP[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };//Anode
        char DIS1,DIS2,DIS3,DIS4,DIS5,DIS6;

        void main(void)
        {
        // Declare your local variables here

        // Input/Output Ports initialization
        // Port A 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
        PORTA=0x00;
        DDRA=0xFF;

        // Port B initialization
        // Func7=In Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
        // State7=T State6=T State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
        PORTB=0x00;
        DDRB=0xFF;

        // Port C 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=T State2=T State1=T State0=T
        PORTC=0x00;
        DDRC=0x00;

        // Port D 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=T State2=T State1=T State0=T
        PORTD=0x00;
        DDRD=0x00;

        // Timer/Counter 0 initialization
        // Clock source: System Clock
        // Clock value: Timer 0 Stopped
        // Mode: Normal top=FFh
        // OC0 output: Disconnected
        TCCR0=0x00;
        TCNT0=0x00;
        OCR0=0x00;

        // Timer/Counter 1 initialization
        // Clock source: System Clock
        // Clock value: Timer 1 Stopped
        // Mode: Normal top=FFFFh
        // OC1A output: Discon.
        // OC1B output: Discon.
        // Noise Canceler: Off
        // Input Capture on Falling Edge
        // Timer 1 Overflow Interrupt: Off
        // Input Capture Interrupt: Off
        // Compare A Match Interrupt: Off
        // Compare B Match Interrupt: Off
        TCCR1A=0x00;
        TCCR1B=0x00;
        TCNT1H=0x00;
        TCNT1L=0x00;
        ICR1H=0x00;
        ICR1L=0x00;
        OCR1AH=0x00;
        OCR1AL=0x00;
        OCR1BH=0x00;
        OCR1BL=0x00;

        // Timer/Counter 2 initialization
        // Clock source: System Clock
        // Clock value: Timer 2 Stopped
        // Mode: Normal top=FFh
        // OC2 output: Disconnected
        ASSR=0x00;
        TCCR2=0x00;
        TCNT2=0x00;
        OCR2=0x00;

        // External Interrupt(s) initialization
        // INT0: Off
        // INT1: Off
        // INT2: Off
        MCUCR=0x00;
        MCUCSR=0x00;

        // Timer(s)/Counter(s) Interrupt(s) initialization
        TIMSK=0x00;

        // Analog Comparator initialization
        // Analog Comparator: Off
        // Analog Comparator Input Capture by Timer/Counter 1: Off
        ACSR=0x80;
        SFIOR=0x00;

        // I2C Bus initialization
        i2c_init();

        // DS1307 Real Time Clock initialization
        // Square wave output on pin SQW/OUT: Off
        // SQW/OUT pin state: 0
        rtc_init(0,0,0);
        rtc_set_time(12,38,00);
        while (1)
        {

        // Place your code here
        rtc_get_time(&hour,&min,&sec);
        DIS6=(MAP[sec%10]);
        PORTA = DIS6;
        PORTB.5=0;
        delay_ms(1);
        PORTB.5=1;

        DIS5 =MAP[sec/10];
        PORTA = DIS5;
        PORTB.4=0;
        delay_ms(1);
        PORTB.4=1;

        DIS4=(MAP[min%10]);
        PORTA = DIS4;PORTA.7=0;
        PORTB.3=0;
        delay_ms(1);
        PORTB.3=1;

        DIS3 =MAP[min/10];
        PORTA = DIS3;
        PORTB.2=0;
        delay_ms(1);
        PORTB.2=1;

        DIS2=(MAP[hour%10]);
        PORTA = DIS2; PORTA.7=0;
        PORTB.1=0;
        delay_ms(1);
        PORTB.1=1;

        DIS1 =MAP[hour/10];
        PORTA = DIS1;
        PORTB.0=0;
        delay_ms(1);
        PORTB.0=1;

        };
        }
        Vấn đề chổ dòng code màu đỏ. Mỗi lần vi điều khiển reset thì set lại thời gian DS1307.

        Comment


        • #5
          Nguyên văn bởi binhminhdem Xem bài viết
          [ATTACH=CONFIG]35268[/ATTACH]
          chưa minh vẫn chưa làm được phần chỉnh giờ nữa.chỉ mới hiển thị lên led 7 đoạn thôi.với lại mình định làm 1 module dự báo theo sơ đồ nguyen lý này .Chẳng hạn như xác lập tới 03h15' thì sẽ có dòng ra ở 1 port.
          If led1 =0(giá trị giờ theo mình đọc thập phân)
          led2=3
          led3=1
          led4=5
          led5=0
          led6=0

          thì portd=1
          delay_ms(12 000 000) (dòng ra trong khoảng 200 minute) sau đó mới ngắt
          không biết lược đồ cơ bản như vậy đã ổn chưa vậy bác?
          Hay quá, đang có người làm chung đề tài với mình. Thấy phần cứng của bạn đúng rồi mà, bạn xem lại cục Pin CMOS xem còn điện ko?
          Ý bạn là làm báo thức cho nó đấy hả? Mình cùng mổ xẻ cái Code này nhé, chữ ''reng'' trong chương trình là cái báo thức đó.

          /************************************************** ***
          This program was produced by the
          CodeWizardAVR V1.24.2c Professional
          Automatic Program Generator
          © Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.
          HP InfoTech, Development Tools for Microcontrollers, C Compilers, In-System Programmers
          e-mail:office@hpinfotech.ro

          Project :
          Version :
          Date : 10/7/2008
          Author : Hoang Thang
          Company : thangktvta@gmail.com
          Comments:


          Chip type : ATmega8
          Program type : Application
          Clock frequency : 1.000000 MHz
          Memory model : Small
          External SRAM size : 0
          Data Stack size : 256
          ************************************************** ***/

          #include <mega8.h>
          #include <delay.h>

          // I2C Bus functions
          #asm
          .equ __i2c_port=0x18 ;PORTB
          .equ __sda_bit=0
          .equ __scl_bit=1
          #endasm
          #include <i2c.h>

          // DS1307 Real Time Clock functions
          #include <ds1307.h>

          unsigned char h,m,s,g,p;
          void disp(int add, unsigned char dat);
          void wr(unsigned char add, unsigned char dat);
          void reng();
          unsigned char read(unsigned char add);

          // External Interrupt 0 service routine
          interrupt [EXT_INT0] void ext_int0_isr(void)
          {
          // Nhan 1 phat thi chinh gio
          // -----2----------------phut
          // -----3----------------dat gio
          // -----4----------------Dat phut
          int a=0;
          g=h;
          p=m;

          while(1)
          {

          if (PIND.2==0)
          {
          a++;
          if (a>4) a=0;
          delay_ms(100);
          }
          disp(1,a);
          switch (a)
          {

          case 1:
          {

          if (PIND.0==0)
          {
          h++; // up
          delay_ms(200);
          }

          if (PIND.1==0)
          {
          h--; // Down
          delay_ms(200);
          }

          if (h>12) h=h-12;
          if (h<1) h=12;

          disp(3,(h/10)%10);
          disp(4,h%10);
          break;
          }

          case 2:
          {
          if (PIND.0==0)
          {
          m++; // up
          if (m==60) m=0;
          delay_ms(200);
          }

          if (PIND.1==0)
          {
          m--; // Down
          if (m==0) m=59;
          delay_ms(200);
          }

          disp(3,(m/10)%10);
          disp(4,m%10);
          break;
          }
          case 3:
          {
          if (PIND.0==0)
          {
          g++; // up
          delay_ms(200);
          }
          if (PIND.1==0)
          {
          g--; // Down
          delay_ms(200);
          }
          if (g>12) g=g-12;
          if (g<1) g=12;
          disp(3,(g/10)%10);
          disp(4,g%10);
          break;
          }
          case 4:
          {
          if (PIND.0==0)
          {
          p++; // up
          delay_ms(200);
          }

          if (PIND.1==0)
          {
          p--; // Down
          delay_ms(30);
          }
          if (p<1) p=59;
          if (p>59) p=1;
          disp(3,(p/10)%10);
          disp(4,p%10);
          break;
          }
          }
          if (PIND.3==0) // Thoat chinh gio.
          {
          delay_ms(10);
          rtc_set_time(h,m,s);
          delay_ms(300);
          wr(0,0);
          wr(0x08,g);
          wr(0x09,p);
          break;
          }
          }
          }

          // Declare your global variables here

          void disp(int add, unsigned char dat)
          {
          unsigned char num_led[5]={0,0x7f,0xbf,0xdf,0xef};
          PORTC=dat;
          PORTD=num_led[add];
          delay_ms(1);
          PORTD=0xff;
          }

          void wr(unsigned char add, unsigned char dat)
          {
          i2c_start();
          i2c_write(0xd0);
          i2c_write(add);
          i2c_write(dat);
          i2c_stop();
          }
          void reng()
          {
          PORTB.2=0;
          }

          unsigned char read(unsigned char add) {
          unsigned char data;
          i2c_start();
          i2c_write(0xd0);
          i2c_write(add);
          i2c_start();
          i2c_write(0xd0 | 1);
          data=i2c_read(0);
          i2c_stop();
          return data;
          }



          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=T State2=T State1=T State0=T
          PORTB=0xff;
          DDRB=0xff;

          // 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=0xff;
          DDRC=0xfF;

          // Port D initialization
          // Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
          // State7=0 State6=0 State5=0 State4=0 State3=T State2=T State1=T State0=T
          PORTD=0xff;
          DDRD=0xF0;

          // Timer/Counter 0 initialization
          // Clock source: System Clock
          // Clock value: Timer 0 Stopped
          TCCR0=0x00;
          TCNT0=0x00;

          // Timer/Counter 1 initialization
          // Clock source: System Clock
          // Clock value: Timer 1 Stopped
          // Mode: Normal top=FFFFh
          // OC1A output: Discon.
          // OC1B output: Discon.
          // Noise Canceler: Off
          // Input Capture on Falling Edge
          TCCR1A=0x00;
          TCCR1B=0x00;
          TCNT1H=0x00;
          TCNT1L=0x00;
          ICR1H=0x00;
          ICR1L=0x00;
          OCR1AH=0x00;
          OCR1AL=0x00;
          OCR1BH=0x00;
          OCR1BL=0x00;

          // Timer/Counter 2 initialization
          // Clock source: System Clock
          // Clock value: Timer 2 Stopped
          // Mode: Normal top=FFh
          // OC2 output: Disconnected
          ASSR=0x00;
          TCCR2=0x00;
          TCNT2=0x00;
          OCR2=0x00;

          // External Interrupt(s) initialization
          // INT0: On
          // INT0 Mode: Low level
          // INT1: Off
          GICR|=0x40;
          MCUCR=0x00;
          GIFR=0x40;

          // Timer(s)/Counter(s) Interrupt(s) initialization
          TIMSK=0x00;

          // Analog Comparator initialization
          // Analog Comparator: Off
          // Analog Comparator Input Capture by Timer/Counter 1: Off
          // Analog Comparator Output: Off
          ACSR=0x80;
          SFIOR=0x00;

          // I2C Bus initialization
          i2c_init();

          // DS1307 Real Time Clock initialization
          // Square wave output on pin SQW/OUT: On
          // Square wave frequency: 1Hz
          rtc_init(0,1,0);
          //wr(0,0);
          //rtc_set_time(19,18,0);

          // Global enable interrupts
          #asm("sei")

          while (1)
          {
          // Place your code here
          rtc_get_time(&h,&m,&s);
          if (h>12) h=h-12;
          //if (h<1) h=12;
          if (h==read(0x10)& m==read(0x37)) reng();
          disp(1,(h/10)%10);
          disp(2,h%10);
          disp(3,(m/10)%10);
          disp(4,m%10);
          };
          }
          Nhận làm mạch, ĐAMH sử dụng vđk Pic & AVR tại tp.HCM
          Liên hệ sđt: 0902.808.371

          Comment


          • #6
            A OpenDoor ơi ,Theo e nghĩ là đầu tiên mình phải set time cho con Atmega hiểu được 1 giá trị thoi gian cụ thể trước đã, ở đây là 12h38p sau đó thì nó sẽ cập nhật thời gian này "1 lần" thôi,việc còn lại là tiếp tục lấy giá trị thời gian từ con ds1307 dc nuôi bằng pin 3V(pin trong mach e đã test 3 cục bằng VOM kể cả đế cắm lun rồi ).nếu có sai chắc ko sai phần cứng đâu,hi. các ac có cách nào khắc phục việc rest thơi gian nay ko? chẳng lẽ khi mất nguồn nuôi atmega thì nó sẽ set TG lại sao,như vậy thì cần gì cục pin 3V nữa?

            Comment


            • #7
              Nguyên văn bởi binhminhdem Xem bài viết
              A OpenDoor ơi ,Theo e nghĩ là đầu tiên mình phải set time cho con Atmega hiểu được 1 giá trị thoi gian cụ thể trước đã, ở đây là 12h38p sau đó thì nó sẽ cập nhật thời gian này "1 lần" thôi,việc còn lại là tiếp tục lấy giá trị thời gian từ con ds1307 dc nuôi bằng pin 3V(pin trong mach e đã test 3 cục bằng VOM kể cả đế cắm lun rồi ).nếu có sai chắc ko sai phần cứng đâu,hi. các ac có cách nào khắc phục việc rest thơi gian nay ko? chẳng lẽ khi mất nguồn nuôi atmega thì nó sẽ set TG lại sao,như vậy thì cần gì cục pin 3V nữa?
              OpenDoor nói chính xác rồi đó bạn, chương trình của bạn mỗi lần chạy thì nó lại set lại ngày giờ trên con DS1307 là 12h38'00". Vậy nó chạy đúng như bạn lập trình chứ bạn còn thắc mắc gì nữa? Cái gì bạn viết trong hàm main thì mỗi lần reset vi điều khiển nó lại chay lại mà. Nên đương nhiên mỗi lần chạy thì thời gian lại là 12h38'00" thôi.

              Comment


              • #8
                Hihi mình cũng hiểu như vậy,b có cách nào mà khi reset con vi xu ly no van chay đúng với tg thực ko?mình nghĩ mãi mà vẫn ko ra,sửa đoạn code giùm minh đi.

                Comment


                • #9
                  Nguyên văn bởi binhminhdem Xem bài viết
                  Hihi mình cũng hiểu như vậy,b có cách nào mà khi reset con vi xu ly no van chay đúng với tg thực ko?mình nghĩ mãi mà vẫn ko ra,sửa đoạn code giùm minh đi.
                  bạn bỏ đoạn code set thời gian mà vào hẳn code lấy thời gian ra hiển thị thôi

                  Comment


                  • #10
                    Xong code xin các bac cho y kien;Phần cuối tô đen là e mặc định cứ 11h11p11s là sẽ kích 1 dòng ra tại portD.0 delay khoang 400ms.


                    #include <mega16.h>
                    #include <delay.h>

                    // I2C Bus functions
                    #asm
                    .equ __i2c_port=0x15 ;PORTC
                    .equ __sda_bit=0
                    .equ __scl_bit=1
                    #endasm
                    #include <i2c.h>

                    // DS1307 Real Time Clock functions
                    #include <ds1307.h>

                    // Declare your global variables here
                    unsigned char hour, min, sec;
                    char const MAP[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };//Anode
                    char DIS1,DIS2,DIS3,DIS4,DIS5,DIS6;

                    void main(void)
                    {
                    // Declare your local variables here

                    // Input/Output Ports initialization
                    // Port A 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
                    PORTA=0x00;
                    DDRA=0xFF;

                    // Port B initialization
                    // Func7=In Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
                    // State7=T State6=T State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
                    PORTB=0x00;
                    DDRB=0xFF;

                    // Port C 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=T State2=T State1=T State0=T
                    PORTC=0x00;
                    DDRC=0x00;

                    // Port D 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=T State2=T State1=T State0=T
                    PORTD=0x00;
                    DDRD=0x00;

                    // Timer/Counter 0 initialization
                    // Clock source: System Clock
                    // Clock value: Timer 0 Stopped
                    // Mode: Normal top=FFh
                    // OC0 output: Disconnected
                    TCCR0=0x00;
                    TCNT0=0x00;
                    OCR0=0x00;

                    // Timer/Counter 1 initialization
                    // Clock source: System Clock
                    // Clock value: Timer 1 Stopped
                    // Mode: Normal top=FFFFh
                    // OC1A output: Discon.
                    // OC1B output: Discon.
                    // Noise Canceler: Off
                    // Input Capture on Falling Edge
                    // Timer 1 Overflow Interrupt: Off
                    // Input Capture Interrupt: Off
                    // Compare A Match Interrupt: Off
                    // Compare B Match Interrupt: Off
                    TCCR1A=0x00;
                    TCCR1B=0x00;
                    TCNT1H=0x00;
                    TCNT1L=0x00;
                    ICR1H=0x00;
                    ICR1L=0x00;
                    OCR1AH=0x00;
                    OCR1AL=0x00;
                    OCR1BH=0x00;
                    OCR1BL=0x00;

                    // Timer/Counter 2 initialization
                    // Clock source: System Clock
                    // Clock value: Timer 2 Stopped
                    // Mode: Normal top=FFh
                    // OC2 output: Disconnected
                    ASSR=0x00;
                    TCCR2=0x00;
                    TCNT2=0x00;
                    OCR2=0x00;

                    // External Interrupt(s) initialization
                    // INT0: Off
                    // INT1: Off
                    // INT2: Off
                    MCUCR=0x00;
                    MCUCSR=0x00;

                    // Timer(s)/Counter(s) Interrupt(s) initialization
                    TIMSK=0x00;

                    // Analog Comparator initialization
                    // Analog Comparator: Off
                    // Analog Comparator Input Capture by Timer/Counter 1: Off
                    ACSR=0x80;
                    SFIOR=0x00;

                    // I2C Bus initialization
                    i2c_init();

                    // DS1307 Real Time Clock initialization
                    // Square wave output on pin SQW/OUT: Off
                    // SQW/OUT pin state: 0

                    rtc_init(0,0,0);


                    while (1)
                    {


                    // Place your code here
                    rtc_get_time(&hour,&min,&sec);
                    DIS6=(MAP[sec%10]);
                    PORTA = DIS6;
                    PORTB.5=0;
                    delay_ms(1);
                    PORTB.5=1;

                    DIS5 =(MAP[sec/10]);
                    PORTA = DIS5;
                    PORTB.4=0;
                    delay_ms(1);
                    PORTB.4=1;

                    DIS4=(MAP[min%10]);
                    PORTA = DIS4;PORTA.7=0;
                    PORTB.3=0;
                    delay_ms(1);
                    PORTB.3=1;

                    DIS3 =MAP[min/10];
                    PORTA = DIS3;
                    PORTB.2=0;
                    delay_ms(1);
                    PORTB.2=1;

                    DIS2=(MAP[hour%10]);
                    PORTA = DIS2; PORTA.7=0;
                    PORTB.1=0;
                    delay_ms(1);
                    PORTB.1=1;

                    DIS1 =MAP[hour/10];
                    PORTA = DIS1;
                    PORTB.0=0;
                    delay_ms(1);
                    PORTB.0=1;



                    if

                    (DIS6 ==MAP[1]);

                    (DIS5 ==MAP[1]) ;

                    (DIS4 ==MAP[1]);

                    (DIS3 ==MAP[1]);

                    (DIS2 ==MAP[1]);

                    (DIS1 ==MAP[1]);

                    PORTD.0=1 ;
                    delay_ms(400);





                    };
                    }

                    Comment


                    • #11
                      Đã chạy ổn chưa binhminhdem?
                      Nhận làm mạch, ĐAMH sử dụng vđk Pic & AVR tại tp.HCM
                      Liên hệ sđt: 0902.808.371

                      Comment


                      • #12
                        minh moi viet code thôi.để cuối tuần về ráp mach lại.cái module làm để đâu mất tiêu rồi hi

                        Comment


                        • #13
                          Nguyên văn bởi binhminhdem Xem bài viết
                          minh moi viet code thôi.để cuối tuần về ráp mach lại.cái module làm để đâu mất tiêu rồi hi
                          Đã chạy mô phỏng chưa? Post lên cho a e tham khảo
                          Nhận làm mạch, ĐAMH sử dụng vđk Pic & AVR tại tp.HCM
                          Liên hệ sđt: 0902.808.371

                          Comment


                          • #14
                            Bản mô phỏng đây .Bản này chạy chậm, thực tế mình giữ nguyên code như vầy thì các số giờ phút giây đều hiện ra đều liên tục chứ ko đứt nét.
                            http://www.mediafire.com/?83m398far45c1im

                            Comment


                            • #15
                              E đã cài dc thời gian chạy song song với thực tế và khi reset chip vẫn chạy y như thực tế lun,hihi,nhưng e ko hiểu cách hoạt động.Đầu tiên e đặt cái code y như đầu bài rtc_set_time(thoi gian hiện tai)sau khi nạp vô e tắt mạch.rồi xóa dòng rtc_set_time(thoi gian) sau đó nạp tiếp cho chip thì luc này ngay cả khi reset chip hay tat nguồn thì mach van chay vô tư như thời gian thực.Vậy xin cho e hỏi giao tiep I2C la giao tiep đọc ghi dữ liệu giữa các thiêt bi ngoai vi va chip.Vậy khi lần đầu tiên mình rtc_set_time là mình đã nhờ con AVR ghi thời gian lên 1307 phải ko?e đang băn khoan vấn đề này vì theo e nghĩ 1307 chỉ là slave đọc thôi làm sao như vi xư ly co the write lên dc.moi người cho e ý kiến nha!Click image for larger version

Name:	IMG0587A.jpg
Views:	1
Size:	98.9 KB
ID:	1353679

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X