Thông báo

Collapse
No announcement yet.

Watchdog Timer của ATmega8 ko hoạt động

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

  • Watchdog Timer của ATmega8 ko hoạt động

    Chào các anh em trong diên đàn, em đang nghiên cứu watchdog Timer của atmega8 nhưng thử mãi mà nó ko chạy anh em nào có kinh nghiệm vụ này giúp mình với.
    Đây là code mà em dùng để test watchdog timer của con atmega8.
    Tình hình là em đặt watchdog timer cứ 1s sẽ reset chip 1 lần.
    Ý đồ của em trong chương trình này là :
    + khởi tạo PORTD output, PORTD=0x00;
    +delay 3s
    + vào vòng lặp while, delay 250 ms, cho PORTD.7 = đảo của PORTD.7 // chân PORT.7 nối với led bên ngoài.
    + nếu con led nhấp nháy thì watchdog timer chưa hoạt động nên ko reset dc chip
    + nếu con led ko nhấp ==> watchdog timer đã hoạt động , chip đã bị reset.
    nhưng kết quả là con led nhấp nháy liên tục, em thử cách ồi, nhưng ko có cách nào làm cho nó hoạt động dc hết.
    Mong các bác chỉ bảo !
    Code:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.03.9 Standard
    Automatic Program Generator
    © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date    : 02/08/2010
    Author  : CQ50Z
    Company : 
    Comments: 
    
    
    Chip type               : ATmega8
    Program type            : Application
    AVR Core Clock frequency: 11.059200 MHz
    Memory model            : Small
    External RAM size       : 0
    Data Stack size         : 256
    *****************************************************/
    
    #include <mega8.h>
    #include <delay.h>
    
    // Declare your global variables here
    
    
    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=0x00;
    DDRB=0x00;
    
    // Port C initialization
    // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // 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=0xFF;
    
    // 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
    // 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
    MCUCR=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;
    
    // Watchdog Timer initialization
    // Watchdog Timer Prescaler: OSC/1024k
    #pragma optsize-
    WDTCR=0x1E;
    WDTCR=0x0E;
    #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
    #endif
    
    delay_ms(3000);
    
    while (1)
          {
                delay_ms(250);
                PORTD.7=!PORTD.7;
          };
    }
    Nguyễn Xuân Thanh - 0905848525 - 01686996698
    Chuyên: Quảng Cáo Điện Tử
    =>Led Siêu Sáng - Board điều khiển led động
    =>Các loại Màn Hình Led trong nhà, ngoài trời

  • #2
    Đã Fuse Watchdog on chưa ???

    Comment


    • #3
      Mình đã Fuse bit rồi, đọc datasheet phần watchdoog Timer rồi nhưng chẳng biết sai chỗ nào mà nó ko chạy
      Attached Files
      Nguyễn Xuân Thanh - 0905848525 - 01686996698
      Chuyên: Quảng Cáo Điện Tử
      =>Led Siêu Sáng - Board điều khiển led động
      =>Các loại Màn Hình Led trong nhà, ngoài trời

      Comment


      • #4
        Xin lỗi các bạn, mình chen ngang. Vui lòng nói cho mình biết sơ sơ về Watchdog Timer được ko ? Nghe nhiều, thấy phần lớn MCU đều có, nhưng chưa biết để làm gì, ứng dụng ra sao.

        Cám ơn.

        Comment


        • #5
          trước delay_ms(3000); thử dùng lệnh Clear để mồi xem sao
          asm("wdr")

          --- Mạch code trên test watchdog reset OK mà !

          Comment


          • #6
            Nguyên văn bởi phuchiepjsc Xem bài viết
            trước delay_ms(3000); thử dùng lệnh Clear để mồi xem sao
            asm("wdr")

            --- Mạch code trên test watchdog reset OK mà !
            Mình đã thử mồi theo cách bạn nói, nhưng ko có tác dụng gì hết. cái đèn led vẫn nhấp nháy liên tục, (watchdog timer vẫn chưa reset chip).
            Hiện tại mình vẫn đang pó tay.
            Mình đã thử thay chip atmega8 khác, nhưng ko có gì thay đổi.
            Các bác có cao kiến gì chỉ mình với.
            Nguyễn Xuân Thanh - 0905848525 - 01686996698
            Chuyên: Quảng Cáo Điện Tử
            =>Led Siêu Sáng - Board điều khiển led động
            =>Các loại Màn Hình Led trong nhà, ngoài trời

            Comment


            • #7
              Nguyên văn bởi tdlong506 Xem bài viết
              Xin lỗi các bạn, mình chen ngang. Vui lòng nói cho mình biết sơ sơ về Watchdog Timer được ko ? Nghe nhiều, thấy phần lớn MCU đều có, nhưng chưa biết để làm gì, ứng dụng ra sao.

              Cám ơn.
              Bạn tham khảo luồng này: http://www.dientuvietnam.net/forums/...read.php?t=100
              Các cao thủ đã phân tích rất rõ .
              Nguyễn Xuân Thanh - 0905848525 - 01686996698
              Chuyên: Quảng Cáo Điện Tử
              =>Led Siêu Sáng - Board điều khiển led động
              =>Các loại Màn Hình Led trong nhà, ngoài trời

              Comment


              • #8
                mình nhớ là
                ...
                WDTCR=0x1F;
                WDTCR=0x0F;
                ...
                Cung cấp Oscilocope , Inverter , Switching , DC power supply , AC millivolt meter ....

                Comment


                • #9
                  Nguyên văn bởi hiodong Xem bài viết
                  mình nhớ là
                  ...
                  WDTCR=0x1F;
                  WDTCR=0x0F;
                  ...
                  Trong datasheet nó nói thế này :

                  Code:
                  • Bit 3 – WDE: Watchdog Enable
                  When the WDE is written to logic one, the Watchdog Timer is enabled, and if the WDE is written
                  to logic zero, the Watchdog Timer function is disabled. WDE can only be cleared if the WDCE bit
                  has logic level one. To disable an enabled Watchdog Timer, the following procedure must be
                  followed:
                  1. In the same operation, write a logic one to WDCE and WDE. A logic one must be written
                  to WDE even though it is set to one before the disable operation starts.
                  2. Within the next four clock cycles, write a logic 0 to WDE. This disables the Watchdog.
                  • Bits 2..0 – WDP2, WDP1, WDP0: Watchdog Timer Prescaler 2, 1, and 0
                  The WDP2, WDP1, and WDP0 bits determine the Watchdog Timer prescaling when the Watch-
                  dog Timer is enabled. The different prescaling values and their corresponding Timeout Periods
                  are shown in Table 17.
                  Bác có thể xem kỹ lại trong datasheet của atmega 8 trang số 43.

                  Nếu viết rõ ra là nó như thế này nè:
                  WDTCR=0x1F; <==> WDTCR=0b00011111;
                  WDTCR=0x0F; <==> WDTCR=0b00001111;

                  3 bit từ 0-2: là để set prescaler cho watchdog thôi
                  Bit 3 (WDE): chọn enable watch dog timer
                  Ở đây là bác đang để "OSC/2048k", tức là cứ sau 2,1s nó sẽ reset chip 1 lần.
                  còn trong chương trình của mình đang để "OSC/1024k", tức là cứ sau 1.0s nó sẽ reset chip 1 lần.
                  Tham khảo datasheet atmega8 trang 44.
                  Nguyễn Xuân Thanh - 0905848525 - 01686996698
                  Chuyên: Quảng Cáo Điện Tử
                  =>Led Siêu Sáng - Board điều khiển led động
                  =>Các loại Màn Hình Led trong nhà, ngoài trời

                  Comment


                  • #10
                    Các cao nhân nhà mình bận đi kinh doanh quá, ko ghé vào giúp thằng em 1 cái với.!
                    Nguyễn Xuân Thanh - 0905848525 - 01686996698
                    Chuyên: Quảng Cáo Điện Tử
                    =>Led Siêu Sáng - Board điều khiển led động
                    =>Các loại Màn Hình Led trong nhà, ngoài trời

                    Comment


                    • #11
                      Bản thân lệnh delay_ms() của codevisionAVR đã tự nó reset watchdog rồi mà. Trong trường hợp này, bạn đơn giản chỉ cần làm thế này, nếu thấy con led nó nháp nháy, có nghĩa là watchdog đã hoạt động.
                      void main(void)
                      {
                      DDRD.7=1;PORTD.7=0;
                      while (1)
                      {
                      };
                      }
                      These functions are intended for generating delays in C programs.
                      The prototypes for these functions are placed in the file delay.h, located in the .\INC subdirectory. This file must be #include -ed before using the functions.
                      Before calling the functions the interrupts must be disabled, otherwise the delays will be much longer then expected.
                      Also it is very important to specify the correct AVR chip Clock frequency in the Project|Configure|C Compiler|Code Generation menu.


                      The functions are:


                      void delay_us(unsigned int n)


                      generates a delay of n mseconds. n must be a constant expression.


                      void delay_ms(unsigned int n)


                      generates a delay of n milliseconds.
                      This function automatically resets the wtachdog timer every 1ms by generating the wdr instruction.


                      Example:


                      void main(void) {
                      /* disable interrupts */
                      #asm("cli")


                      /* 100ms delay */
                      delay_us(100);


                      /* ............. */


                      /* 10ms delay */
                      delay_ms(10);


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


                      /* ............. */
                      }

                      Comment


                      • #12
                        kiểm tra linh kiện điện tử mà ko cần gở nó ra khỏi mạch

                        mình có một cái board bi hư ! mình muốn test xem co em linh kiện nào bị hỏng ko ! ai có cách nào test mà ko cần phải gỡ linh kiện ra khỏi mạch thì chỉ cho mình với xin cảm ơn nhé

                        Comment


                        • #13
                          Mình dùng bản Codevision cổ 1.04 phần COde của bạn Reset watchdog bình thường... Nếu bạn dùng bản 2 trở lên ( thì chú ý ) thư viện delay bên trong đã có lệnh Clear Watchdog nên nó không reset ... thử cho vòng While(1) ... hoặc for ( lớn ) ... chắc chắn là được . 0x0E với 0x0F chỉ là thời gian timeout để reset mà thôi .

                          ( Code trên làm việc tốt với Codevision bản 1.04 ) ... dùng bản 2 thì test theo kiểu mrcuongcon là chuẩn. nên cho delay chèn giữa lệnh này DDRD.7=1;PORTD.7=0; nếu không nó tắt nhanh quá không nhìn thấy nhấp nháy đâu.

                          Comment


                          • #14
                            Nguyên văn bởi mrcuongcon Xem bài viết
                            Bản thân lệnh delay_ms() của codevisionAVR đã tự nó reset watchdog rồi mà. Trong trường hợp này, bạn đơn giản chỉ cần làm thế này, nếu thấy con led nó nháp nháy, có nghĩa là watchdog đã hoạt động.
                            Thanks bác mrcuongcon và bác phuchiepjsc.
                            Em đã thành công rồi.
                            nhưng hình như bác viết code bị nhầm chỗ này
                            Code:
                            void main(void)
                            {
                            DDRD.7=1;PORTD.7=0;
                            while (1)
                            {
                            };
                            }
                            em sữa lại thế này nó mới chạy

                            Code:
                            void main(void)
                            {
                            DDRD.7=1;
                            PORTD.7=1;delay_ms(100);PORTD.7=0;
                            while (1)
                            {
                            };
                            }
                            tình hình là khi em test nó đã hoạt động ( con led đã nhấp nháy ).
                            Nguyễn Xuân Thanh - 0905848525 - 01686996698
                            Chuyên: Quảng Cáo Điện Tử
                            =>Led Siêu Sáng - Board điều khiển led động
                            =>Các loại Màn Hình Led trong nhà, ngoài trời

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X