Thông báo

Collapse
No announcement yet.

có cách nào chống AVR bị "treo" ko?

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

  • có cách nào chống AVR bị "treo" ko?

    em dang dùng con AT8 dùng để truỳen thông lên máy tính.nhwng nhiều khi AVR lại bị treo nên máy tính ko thể truyền hay nhận dwx liệu từ AVR. Vậy có cách nào để khắc phục ki AVR bị treo ko vậy? Và nếu ta muốn Reset AVR từ máy tính thì ta làm thế nào vậy?
    Mong các bác chỉ cho với

  • #2
    Bạn xác định lại xem vdk bị treo thực sự hay là treo do mải xử lí đoạn chương trình khác mà o nhận đc dữ liệu!?
    Nếu treo thực sự (thật ra rất hiếm) thì bạn có thể dùng WDT(watch dog timer) để 'reset' nó
    Muốn 'reset' từ máy tính thì bạn có thể gửi lệnh để vdk làm một cái gì đó lâu lâu gây tràn WDT.
    !e

    Comment


    • #3
      bạn kiểm tra lại lập trình, chứ bình thường AVR rất ổn định, để khắc phục có thể dùng Watchdog Time, nhưng củng chỉ dùng cái này nếu bạn chạy liên tục và sản phẩm làm ra là sản phẩm thương mại. còn khi lập trình kiểu thí nghiệm thì không nên dùng mà phải tìm cách khử nhiễu, treo ...
      *** Thành viên không biết gì về điện ***

      Comment


      • #4
        1 do nguồn ko tốt
        2 chống nhiễu chưa ổn

        bác xem nó bị dì.

        Comment


        • #5
          nguồn cua em thì rất tốt.em su dụng nguồn cảu PC mà.còn trương trình thì chắc là ko sao vì e thử truyền nhận nhiều lần cùng dliệu như vậy ko sao,chỉ thỉnh thoảng nó 'đơ',ko truyền nhận dc và điều khiển trên bo mạch cũng ko dc,phai reset lại.
          âh mà bác zemen ơi!em thử rồi muốn reset AVR từ PC ko cần phải bắt nó hoạt động như vậy đâu(làm khổ nó wa).em truyền một byte có mã lệnh bắt AVR reset là dc.
          còn cụ thể chống nhiễu thì e ko biết phải chống ntn nữa,các bác júp em với.
          Ah mà các pac chỉ rõ cho em phần sử dụng Watch dog timer với. Em đọc datasheet của nó về phần này nhưng mù tịt,chẳng hiểu j cả

          Comment


          • #6
            Thế chắc do chương trình của bạn thuật toán có vấn đề rồi bạn ạ,. trên thực tế ko đơn giản là PC truyền đi VDK chắc chắc nhận đc, hoặc ngược lại. nhất là khi truyền liên tục. đôi khi phải tính cả thời gian thực thi, khả năng đồng bộ với nhau..., tóm lại bạn thử xem lại thuật toán xem. ( thuật toán chuẩn củng khó hơn là viết )
            Watchdog bạn hiểu như này. chẳng qua là 1 time, khi mà tràn sẽ gây Reset chip, Vì thế khi bạn Enable nó, củng như time thông thường nghĩa là nó sẽ đếm... nếu ko có gì tác động nó cú thế đến lúc tràn. Vì thế người ta dùng bằng cách sẽ cho 1 câu lệnh xóa biến đếm của nó cho nó không bao giờ bị tràn.
            Nhưng nếu VDK bị treo, câu lệnh xóa đó không thực hiện được nữa nên nó sẽ đếm đến lúc tràn -> và VDK đc reset -> hết treo.
            và nếu chú ý làm sao để cho thời gian thực hiện giữa các câu lệnh đó bé hơn thơi gian 1 chu kỳ của Watchdog
            *** Thành viên không biết gì về điện ***

            Comment


            • #7
              vâng cam ơn các bác nha.để em tìm hiểu thêm về cái này.có j em hoi sau nha,mong các bác chỉ jáo

              Comment


              • #8
                Mình cũng bị lỗi tương tự mới đầu khi thử với AT8 không nạp được chương trình hoặc có chăng chỉ nạp được một hai phát là nó lại báo không vào được chương trình để nạp, nếu nó cho mình vào thì đến lúc kết thúc nó lại báo lỗi tại địa chỉ gì đó mình không nhớ rõ nhưng tóm lại là không nạp được. Kiểm tra đi kiểm tra lại thì chẳng có lỗi gì cả. Chán quá mình làm sang con AT16 thì mọi thứ lại ok!!! Mình tưởng lúc đầu có ma nên mới thế hoặc không hợp với con AT8. he, nếu bác nào tìm ra lỗi thì nói cho mọi người cùng biết nhé!!!

                Comment


                • #9
                  Nguyên văn bởi mice Xem bài viết
                  Mình cũng bị lỗi tương tự mới đầu khi thử với AT8 không nạp được chương trình hoặc có chăng chỉ nạp được một hai phát là nó lại báo không vào được chương trình để nạp, nếu nó cho mình vào thì đến lúc kết thúc nó lại báo lỗi tại địa chỉ gì đó mình không nhớ rõ nhưng tóm lại là không nạp được. Kiểm tra đi kiểm tra lại thì chẳng có lỗi gì cả. Chán quá mình làm sang con AT16 thì mọi thứ lại ok!!! Mình tưởng lúc đầu có ma nên mới thế hoặc không hợp với con AT8. he, nếu bác nào tìm ra lỗi thì nói cho mọi người cùng biết nhé!!!
                  chào bạn. T cũng thỉnh thoảng bị như vậy nhưng jo thì ổn rrồi
                  t nghĩ là do(đối với các chíp bình thường hiiiiiii):
                  -một là: nguồn nuôi cho AVR ko đủ.
                  _hai là : các chân nạp tiếp xúc ko chắc chắn.
                  _ba là: do mạch nạp của ta vẫn cắm vào chân nạp và PC nên đôi khi ta khởi động PC thì sẽ làm cho con đệm nạp nó ko thích hiii
                  Chẳng biết mấy lý do đó có đúng ko nữa. Nhưng t khắc phục các lý do trên thì nạp OK

                  Comment


                  • #10
                    sắn đây có pác nào đã sử đụng ADC10 bit của con AT8,sử dụng điện áp tham chiếu nôi 2.56V mong chỉ jáo đôi chút.
                    e sử dụng nó mà số nó chuyển đổi rồi đưa lên PC để tính toán mà sai nhiều quá vậy.VD đưa 3,2 V vào ADC3 mà khi chuyển đổi xong nó chỉ còn khoảng 1.87V.
                    chân AVCC nối lên VCC qua biến trở và khi đo trực tiếp trên AVCC thì dc 4.2V
                    VCC=4,2V,chân AREF=4.2V
                    thế là sao hả các pác,do nhiễu hay là sao,mà có nhiễu thì làm j mà sai lệch ác vậy nhỉ.
                    Có pác nào chỉ jaos với,
                    bờ i bi sắc bí rồi

                    Comment


                    • #11
                      Khi dùng điện áp tham chiếu nội 2.56V thì chân AREF chỉ nối với tụ 100nF xuống GND.
                      Bạn cấp vào chân này 4.2V làm gì?

                      Comment


                      • #12
                        Nguyên văn bởi hungnp Xem bài viết
                        Khi dùng điện áp tham chiếu nội 2.56V thì chân AREF chỉ nối với tụ 100nF xuống GND.
                        Bạn cấp vào chân này 4.2V làm gì?
                        thì em cũng biét vậy.nhưng dang sử dụng tren kit lam sẵn rồi nên nó dc nối sãn.mà như vậy thì có sao ko vậy.

                        Comment


                        • #13
                          Nguyên văn bởi AVR_VN Xem bài viết
                          Thế chắc do chương trình của bạn thuật toán có vấn đề rồi bạn ạ,. trên thực tế ko đơn giản là PC truyền đi VDK chắc chắc nhận đc, hoặc ngược lại. nhất là khi truyền liên tục. đôi khi phải tính cả thời gian thực thi, khả năng đồng bộ với nhau..., tóm lại bạn thử xem lại thuật toán xem. ( thuật toán chuẩn củng khó hơn là viết )
                          đúng rrồi bác ạ,ko phai AVR của em bị treo mà nó có nhận dliệu vào nhưng nó lại xác định ko phải địa chỉ nên nó ko làm j.Do vậy pác jup em với,
                          em dùng 3 con SN75176 để truyền nhận giua PC và 2 chú AVR.
                          -PC gửi 6 byte xuống AVR,trong đó có byte đầu là byte chứa địa chỉ của slave.
                          _cả hai con AVR đều xảy ra bgắt nhận và luu byte nhận vào RAm sau đó tăng địa chỉ ram lên,và đếm số byte nhận ,khi nhận đủ 6 byte thì nó so sánh byte nhận đầu tiên(byte chứa địa chỉ),nếu ko phải địa chỉ của nó thì nó ko làm j,con đúng thì nó sẽ chuyển đổi lần lươt 6 kênh ADC và truyền lần lượt 6 byte lên PC(tất cả là 6x6=36 byte cho mỗi lần AVR nhận đúng là địa chỉ cảu mình)
                          Nhưng khi truyền nhận dc một số chu kỳ truyền nhận thì ít nhất là một con AVR nhận dliêu vào bị lỗi.và có khi là cả.
                          KHI em dùng cùng ct đó mà chỉ truyền nhận với một con AVR thì OK,ko có lỗi,nó update lên tục dc.
                          Đường dây nối em dùng dây điện thoại 4 lõi
                          bác júp em với
                          Dính chính: khi truyền nhận một thời jan(vài chục chu kỳ gọi đo đối với khi truyền nhận với một con AVR) thì các AVR nhận dữ liệu đều bị sai.Khi reset lại thì dliệu AVR nhận dc đúng và một thời jan sau lại nhận dliệu sai như trên.
                          Attached Files
                          Last edited by xuanlam163; 19-03-2009, 15:15.

                          Comment


                          • #14
                            bạn nên dùng chế độ truyền thông đa xử lý của avr(đọc datasheet) để khắc phục tình trạng này.trường hợp của bạn là khi 1 slave gởi data cho pc vô tình byte đầu tiên là địa chỉ của slave khác-->nên nó tưởng được pc gọi--> loạn.

                            Comment


                            • #15
                              vấn đề ở đây là khi PC gọi slave1 nhung cả slave2 đều nhận đó là địa chỉ cảu mình nên tại thời điểm đó cả hai slave đều truyền lên PC->xung đột tín hiệu->làm cho tín hiệu bị sai lệch.chỉ có khi ta cho pC tự động gọi từng slave thì một thời jan sau là xay ra như vậy.

                              có pác nào có hướng giải quyết nào ko júp em với

                              và các byte AVR nhận ta luu vao một địa chỉ ram rồi tăng nó lên để luu byte nhận tiếp theo.khi đếm đủ số byte nhận thì nó xử lý dliệu và lại khởi tạo lại địa chỉ ram như trước để bắt đầu luu các byte nhận tiếp theo.

                              làm như vậy có dc ko vậy, liệu các byte ta luu vào ram như vậy có bị sai lệch j ko?

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X