Thông báo

Collapse
No announcement yet.

atmega16 và ds1307

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

  • atmega16 và ds1307

    e làm xong nhưng sao nó chạy ko đúng gì hết các anh có thể coi lại giúp e được ko
    đây là code và file mô phỏng của em
    9.rar

  • #2
    Nguyên văn bởi ptit_et Xem bài viết
    e làm xong nhưng sao nó chạy ko đúng gì hết các anh có thể coi lại giúp e được ko
    đây là code và file mô phỏng của em
    9.rar
    rtc_set_date(01,07,1991);

    giá trị năm chỉ từ 0-99 . bạn coi lại datasheet DS1307 đi nhé.

    hàm lcd trong codevision có sẵn sao bạn ko dùng.

    hic không hỉu sao ko tải đc file lên nữa. bạn ném cái này vào thay cho cái code của bạn là chạy

    HTML Code:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.05.0 Professional
    Automatic Program Generator
    © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date    : 7/11/2012
    Author  : NeVaDa
    Company : 
    Comments: 
    
    
    Chip type               : ATmega16
    Program type            : Application
    AVR Core Clock frequency: 8.000000 MHz
    Memory model            : Small
    External RAM size       : 0
    Data Stack size         : 256
    *****************************************************/
    
    #include <mega16.h>
    #include <delay.h>
    
    
    // I2C Bus functions
    #asm
       .equ __i2c_port=0x1B ;PORTA
       .equ __sda_bit=1
       .equ __scl_bit=0
    #endasm
    #include <i2c.h>
    
    // DS1307 Real Time Clock functions
    #include <ds1307.h>
    
    // Alphanumeric LCD Module functions
    // Alphanumeric LCD Module functions
    #asm
       .equ __lcd_port=0x12 ;PORTD
    #endasm
    #include <lcd.h>
    
    // Declare your global variables here
    
    
    // Declare your global variables here
    
    
    
    unsigned char h,m,s,ngay,thang,nam; 
    
    
    
    
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A 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 
    PORTA=0x00;
    DDRA=0x00;
    
    // 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=0x00;
    DDRB=0x00;
    
    // 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: On
    // Square wave frequency: 1Hz
    rtc_init(0,1,0);
    
    // LCD module initialization
    lcd_init(16);
    
    
    rtc_set_time(23,59,59);
    rtc_set_date(01,07,91);
    
    while (1)
          { 
          rtc_get_time(&h,&m,&s);
          rtc_get_date(&ngay,&thang,&nam);
          
          lcd_gotoxy(0,0);
          lcd_putchar(h/10 | 0x30);
          lcd_putchar(h%10 | 0x30);
          lcd_putsf(":");
          lcd_putchar(m/10 | 0x30);
          lcd_putchar(m%10 | 0x30);
          lcd_putsf(":");
          lcd_putchar(s/10 | 0x30);
          lcd_putchar(s%10 | 0x30);
          
          lcd_gotoxy(0,1);
          lcd_putchar(ngay/10 | 0x30);
          lcd_putchar(ngay%10 | 0x30);
          lcd_putsf("--");
          lcd_putchar(thang/10 | 0x30);
          lcd_putchar(thang%10 | 0x30);
          lcd_putsf("--");
          lcd_putchar(nam/10 | 0x30);
          lcd_putchar(nam%10 | 0x30);
          
          delay_ms(500);
          
          
          // Place your code here
    
          }
    }
    (^_^) hoangnv.3i@gmail.com

    Comment


    • #3
      Nguyên văn bởi hoang_3i Xem bài viết
      rtc_set_date(01,07,1991);

      giá trị năm chỉ từ 0-99 . bạn coi lại datasheet DS1307 đi nhé.

      hàm lcd trong codevision có sẵn sao bạn ko dùng.

      hic không hỉu sao ko tải đc file lên nữa. bạn ném cái này vào thay cho cái code của bạn là chạy

      HTML Code:
      /*****************************************************
      This program was produced by the
      CodeWizardAVR V2.05.0 Professional
      Automatic Program Generator
      © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
      http://www.hpinfotech.com
      
      Project : 
      Version : 
      Date    : 7/11/2012
      Author  : NeVaDa
      Company : 
      Comments: 
      
      
      Chip type               : ATmega16
      Program type            : Application
      AVR Core Clock frequency: 8.000000 MHz
      Memory model            : Small
      External RAM size       : 0
      Data Stack size         : 256
      *****************************************************/
      
      #include <mega16.h>
      #include <delay.h>
      
      
      // I2C Bus functions
      #asm
         .equ __i2c_port=0x1B ;PORTA
         .equ __sda_bit=1
         .equ __scl_bit=0
      #endasm
      #include <i2c.h>
      
      // DS1307 Real Time Clock functions
      #include <ds1307.h>
      
      // Alphanumeric LCD Module functions
      // Alphanumeric LCD Module functions
      #asm
         .equ __lcd_port=0x12 ;PORTD
      #endasm
      #include <lcd.h>
      
      // Declare your global variables here
      
      
      // Declare your global variables here
      
      
      
      unsigned char h,m,s,ngay,thang,nam; 
      
      
      
      
      
      void main(void)
      {
      // Declare your local variables here
      
      // Input/Output Ports initialization
      // Port A 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 
      PORTA=0x00;
      DDRA=0x00;
      
      // 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=0x00;
      DDRB=0x00;
      
      // 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: On
      // Square wave frequency: 1Hz
      rtc_init(0,1,0);
      
      // LCD module initialization
      lcd_init(16);
      
      
      rtc_set_time(23,59,59);
      rtc_set_date(01,07,91);
      
      while (1)
            { 
            rtc_get_time(&h,&m,&s);
            rtc_get_date(&ngay,&thang,&nam);
            
            lcd_gotoxy(0,0);
         [COLOR="#FF0000"]   lcd_putchar(h/10 | 0x30);
            lcd_putchar(h%10 | 0x30);
            lcd_putsf(":");
            lcd_putchar(m/10 | 0x30);
            lcd_putchar(m%10 | 0x30);
            lcd_putsf(":");
            lcd_putchar(s/10 | 0x30);
            lcd_putchar(s%10 | 0x30);[/COLOR]
            
            lcd_gotoxy(0,1);
            lcd_putchar(ngay/10 | 0x30);
            lcd_putchar(ngay%10 | 0x30);
            lcd_putsf("--");
            lcd_putchar(thang/10 | 0x30);
            lcd_putchar(thang%10 | 0x30);
            lcd_putsf("--");
            lcd_putchar(nam/10 | 0x30);
            lcd_putchar(nam%10 | 0x30);
            
            delay_ms(500);
            
            
            // Place your code here
      
            }
      }
      anh Hoàng giải thích cho e đoạn bày vs ạh. hàm lcd_putchar để hiển thị h,p,s thì e hiểu nhưng cái a thêm cả | 0x30 ; là sao ạh?
      Nguyễn Huy Biên - 01649 802 694
      gmail :

      Comment


      • #4
        Nguyên văn bởi bienhou Xem bài viết
        anh Hoàng giải thích cho e đoạn bày vs ạh. hàm lcd_putchar để hiển thị h,p,s thì e hiểu nhưng cái a thêm cả | 0x30 ; là sao ạh?
        là để hiển thị kí tự từ '0' đến kí tự '9' trong bảng mã ASII, tra bảng mã ASII là sẽ rõ.
        (^_^) hoangnv.3i@gmail.com

        Comment


        • #5
          ok anh. tks a nhiều@@
          Nguyễn Huy Biên - 01649 802 694
          gmail :

          Comment


          • #6
            Nguyên văn bởi hoang_3i Xem bài viết
            là để hiển thị kí tự từ '0' đến kí tự '9' trong bảng mã ASII, tra bảng mã ASII là sẽ rõ.
            hàm rtc_set_date và rtc_get_date là hàm truyền vào 4 biến, vậy chỉ viết 3 biến như a có được ko ?:S. nó có thứ- ngày- tháng -năm mà anh
            Nguyễn Huy Biên - 01649 802 694
            gmail :

            Comment


            • #7
              tùy bản cvs bản củ không có thứ, bản mới 2.5 trở đi mới có thứ.

              rtc_set_time(23,59,59);
              rtc_set_date(01,07,91);

              có dòng thì ds1307 làm sao lưu tg dc, khi khởi động lại chip, thì tg se về 23,59,59 ngày 01,07,91 rùi chứ kô phải tg hiện tại.

              theo ý mình chỉ nên viết..

              rtc_get_time(&h,&m,&0);
              rtc_get_date(&ngay,&thang,&nam);
              Last edited by hohoanganhfu; 12-07-2012, 18:33.

              Comment


              • #8
                Nguyên văn bởi hohoanganhfu Xem bài viết
                tùy bản cvs bản củ không có thứ, bản mới 2.5 trở đi mới có thứ.

                rtc_set_time(23,59,59);
                rtc_set_date(01,07,91);

                có dòng thì ds1307 làm sao lưu tg dc, khi khởi động lại chip, thì tg se về 23,59,59 ngày 01,07,91 rùi chứ kô phải tg hiện tại.

                theo ý mình chỉ nên viết..

                rtc_get_time(&h,&m,&0);
                rtc_get_date(&ngay,&thang,&nam);
                vâng, vì đây là 1 chuơng trình đơn giản chưa có nút ấn set time nên phải đặt thế này cho ds nó hoạt động thôi bác. thanks bác
                Nguyễn Huy Biên - 01649 802 694
                gmail :

                Comment


                • #9
                  Với CVAVR thì đọc và hiển thị thì quá đơn giản, cái khó là lập trình cho nút set thời gian.

                  Comment


                  • #10
                    nhưng ko biết sao code của e chưa chạy nữa anh ơi, 2 lần rồi code của a và của e nó đều hiện ra lcd toàn 165 ko

                    Comment


                    • #11
                      Nguyên văn bởi nquoccdt Xem bài viết
                      Với CVAVR thì đọc và hiển thị thì quá đơn giản, cái khó là lập trình cho nút set thời gian.
                      cái này phải công nhận là bác nói đúng@@. e táy máy 2 hôm mà chưa lên hồn
                      Nguyễn Huy Biên - 01649 802 694
                      gmail :

                      Comment


                      • #12
                        Code:
                        void key_time()
                        {if(mode==1)
                            {//lcd_clear();
                            lcd_gotoxy(0,1);
                            lcd_putsf("  Chinh Gio");
                            lcd_gotoxy(5,0);
                            //rtc_get_time(&h,&m,0);
                            if((up==0)&(down==1))
                             {if(h==23)
                              h=0;
                              else
                              h++;
                              }
                              if((down==0)&(up==1))
                               {if(h==0)
                                h=23;
                                else
                                h--;
                                }
                         }       
                        }
                        E thử viết đoạn code set giờ nhưng không thấy nó hoạt động. các bác giúp e chỗ e sai sót và còn thiếu với. thanks các bác nhiều
                        Nguyễn Huy Biên - 01649 802 694
                        gmail :

                        Comment


                        • #13
                          xem lại
                          +điện trở kéo lên của hai chân sda và scl
                          +nguồn vbat của ds1307 phải có

                          trước hàm while thên dòng này

                          rtc_get_time(&h,&m,&0);
                          rtc_get_date(&ngay,&thang,&nam);

                          Comment


                          • #14
                            vâng. em hỏi ở đây là cái chuơng trình nút ấn đó bác. e viết để set time nhưng nó ko chạy.
                            các bác cho em hỏi. khi muốn set time ngươi ta thường dừng đọc RTC. vậy muốn dừng đọc RTC vs codevission ta dùng hàm nào ah?
                            Nguyễn Huy Biên - 01649 802 694
                            gmail :

                            Comment


                            • #15
                              hiển như vậy là Âtmeg chưa lấy đươc dữ liệu của ds1307.
                              tham khảo cái này mình làm chạy tốt
                              lcd_ds1307 atmega8.rar
                              lưu ý :mở file "lcd ds1307 new"

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              • nguyendinhvan
                                Trả lời cho Vấn đề về tốc độ quay
                                bởi nguyendinhvan
                                Sử dụng động cơ servor, hoặc lắp thêm một cái encoder vào động cơ bước. Encoder sẽ kiểm soát động cơ có quay hoặc đứng im.
                                Hôm qua, 19:50
                              • Andrea14
                                Vấn đề về tốc độ quay
                                bởi Andrea14
                                Chào mọi người,

                                Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
                                12-12-2025, 12:42
                              • bqviet
                                Trả lời cho Đấu tắt điện cho máy tính bảng
                                bởi bqviet
                                Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
                                06-12-2025, 17:17
                              • nguyendinhvan
                                Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
                                bởi nguyendinhvan
                                Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
                                05-12-2025, 19:59
                              Đang tải...
                              X