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

                              Đang tải...
                              X