Thông báo

Collapse
No announcement yet.

Cùng nhau trao đổi về STM8

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

  • Nguyên văn bởi croket_2512 Xem bài viết

    Wow! Hay! Hèn chi em dùng ngắt 1us thử, trong hàm ngắt cho giảm biến toàn cục đếm thời gian, thế mà chip nó không chạy, debug treo luôn! Em hỏi thêm nữa: với MCU tốc độ bao nhiêu thì anh cho là nhanh? Em thấy STM32F103 là 72MHz, như vậy đã được cho là nhanh?
    Nhanh ở đây cốt lõi so về bài toán .... lấy ví dụ bài toán đồng hồ ... mỗi lần nhảy có 1 giây ....thì tốc độ 16mhz cũng là rất nhanh.
    72Mhz ... nếu mỗi chu kỳ máy/lệnh .... thì cũng chỉ tổng cộng 72 lệnh / 1us .... hay nói cách khác 1 lệnh sẽ tiêu tốn mất 1/72us ( Đây là giá trị trung bình, tương đối ) chứ thực tế khi thực hiện 1 lệnh ... nó còn kéo theo vài ba cái lệnh khác tiêu tốn thời gian ( chẳng hạn muốn thực hiện một phép tính thì nó phải load vào thanh ghi, rồi cộng rồi mới ra kết quả phép tính ... bla , bla ...

    Nếu bạn ngắt timer liên tục 1us ... trong timer đó nếu có xử lý ( VD : mất tổng cộng 12 lệnh ) thì hàm main của bạn chỉ dùng được có 60 lệnh ... là lại bị ngắt một lần . ( thực tế sẽ được ít hơn ... do phát sinh các lệnh khác ) ... muốn biết chính xác thì lập trình ASM hoặc view ASM lên xem nó tiêu tốn bao nhiêu. Cứ 1 dòng lệnh ASM thì nó sẽ tốn mất 1/72us ... cứ vậy mà đếm thôi.
    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

    Comment


    • Nó mà dùng vòng lặp thì khó đếm lắm bác Dương

      Comment


      • Nguyên văn bởi queduong Xem bài viết

        Nhanh ở đây cốt lõi so về bài toán .... lấy ví dụ bài toán đồng hồ ... mỗi lần nhảy có 1 giây ....thì tốc độ 16mhz cũng là rất nhanh.
        72Mhz ... nếu mỗi chu kỳ máy/lệnh .... thì cũng chỉ tổng cộng 72 lệnh / 1us .... hay nói cách khác 1 lệnh sẽ tiêu tốn mất 1/72us ( Đây là giá trị trung bình, tương đối ) chứ thực tế khi thực hiện 1 lệnh ... nó còn kéo theo vài ba cái lệnh khác tiêu tốn thời gian ( chẳng hạn muốn thực hiện một phép tính thì nó phải load vào thanh ghi, rồi cộng rồi mới ra kết quả phép tính ... bla , bla ...

        Nếu bạn ngắt timer liên tục 1us ... trong timer đó nếu có xử lý ( VD : mất tổng cộng 12 lệnh ) thì hàm main của bạn chỉ dùng được có 60 lệnh ... là lại bị ngắt một lần . ( thực tế sẽ được ít hơn ... do phát sinh các lệnh khác ) ... muốn biết chính xác thì lập trình ASM hoặc view ASM lên xem nó tiêu tốn bao nhiêu. Cứ 1 dòng lệnh ASM thì nó sẽ tốn mất 1/72us ... cứ vậy mà đếm thôi.
        Cám ơn anh Dương nhé! Đã thông tuệ được phần nào! Có điều em thắc mắc, hồi xưa học 8051, PIC, đều có bảng mô tả 1 lệnh ASM được thực hiện trong bao nhiêu us, bao nhiêu chu kỳ máy. Còn ARM thì em tìm hoài không ra tài liệu nào nói về nó. Vậy 1 lệnh ASM của STM8 và ARM thực hiện trong bao nhiêu chu kỳ máy? Bao nhiêu us đây?

        Comment


        • Nguyên văn bởi duong_act Xem bài viết
          Nó mà dùng vòng lặp thì khó đếm lắm bác Dương
          Vẫn đếm được hết nếu bạn quen đếm, nếu không dùng debug đếm, còn không biết cách đếm khi làm cần thời gian thực thì code inline hay cả block ASM vào cho dễ kiểm soát.
          Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

          Comment


          • Nguyên văn bởi croket_2512 Xem bài viết

            Cám ơn anh Dương nhé! Đã thông tuệ được phần nào! Có điều em thắc mắc, hồi xưa học 8051, PIC, đều có bảng mô tả 1 lệnh ASM được thực hiện trong bao nhiêu us, bao nhiêu chu kỳ máy. Còn ARM thì em tìm hoài không ra tài liệu nào nói về nó. Vậy 1 lệnh ASM của STM8 và ARM thực hiện trong bao nhiêu chu kỳ máy? Bao nhiêu us đây?
            1/main clock (MHz) nếu đó là lệnh NOP ... còn 1 lệnh asm hết bao nhiêu .... thì đếm, cộng các chu trình = kết quả.

            Để ý là cái clock kia là giá trị master clock . Lấy ví dụ pic 8 bit : lắp thạch anh 4Mhz nhưng thực tế chỉ chạy có 1Mhz ... và 1 lệnh NOP sẽ tốn mất 1us.
            Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

            Comment


            • Hi mọi người,

              Mình đang code cho STM8S003, bộ nhớ 8k. Mình test thử hàm sprintf của IAR để convert float sang string, thì thấy nó chiếm tới hơn 6kb bộ nhớ, cộng với chương trình chính 3kb thì vượt cả 8k flash của chip nên trình dịch báo lỗi. Vậy lý do vì sao chỉ có sử dụng sprintf 2 lần thôi mà bộ nhớ code chiếm quá thể? Hay do chính bản thân hàm sprintf nó đã vậy? Mình đã cho tối ưu code ở mức cao nhất rồi.

              Thanks mọi người.

              Comment


              • Nguyên văn bởi croket_2512 Xem bài viết
                Hi mọi người,

                Mình đang code cho STM8S003, bộ nhớ 8k. Mình test thử hàm sprintf của IAR để convert float sang string, thì thấy nó chiếm tới hơn 6kb bộ nhớ, cộng với chương trình chính 3kb thì vượt cả 8k flash của chip nên trình dịch báo lỗi. Vậy lý do vì sao chỉ có sử dụng sprintf 2 lần thôi mà bộ nhớ code chiếm quá thể? Hay do chính bản thân hàm sprintf nó đã vậy? Mình đã cho tối ưu code ở mức cao nhất rồi.

                Thanks mọi người.

                Viết như thế thì chiếm dung lượng lớn là phải rồi. Nhưng phải kiểm tra lại phần thông báo lỗi và kiểm tra lại option project nữa.

                Comment


                • Cũng có thể do trình dịch hoặc tập lệnh, ví như AVR 8K thì viết bét nhè ... nhưng STM8 thì cứ như ăn cướp bộ nhớ.
                  Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                  Comment


                  • Nguyên văn bởi sugus Xem bài viết
                    Mình viết bài này mong muốn kêu gọi được các bạn đã nghiên cứu STM8 cùng nhau trao đổi những kinh nghiện và kiến thức! Ai có tài liệu j thì gửi lên nhé! Tiếng Việt thì càng tốt! ^_^
                    Em có lập ra 1 group! moi người vào cung nhau trao đổi!
                    https://web.facebook.com/groups/1059092380768771/

                    Comment


                    • cho em hỏi là STM8S có giao tiếp được với module thẻ nhớ theo chuẩn SPI không mọi người!
                      nếu có thì có thể cho em xin code được không ạ!

                      Comment


                      • Nguyên văn bởi queduong Xem bài viết
                        Cũng có thể do trình dịch hoặc tập lệnh, ví như AVR 8K thì viết bét nhè ... nhưng STM8 thì cứ như ăn cướp bộ nhớ.
                        Em bị giống anh, chỗ library options chỉnh xuống tiny cho hàm printf, bộ nhớ từ 10kb giảm xuống còn 4kb, chạy ngon lành! May mà đọc lại mấy trang trước của thread này chứ không là không biết làm sao!

                        Còn kỹ năng nào nữa để tinh chỉnh mấy cái Options của IAR không anh nhỉ? Công nhận trình dịch này nhiều tùy chỉnh quá!

                        Comment


                        • Viết mà dùng thư viện nó ăn tài nguyên kinh lắm. Muốn nhỏ gọn chắc phải đọc datasheet rồi tự viết.

                          Comment


                          • Nguyên văn bởi duong_act Xem bài viết
                            Viết mà dùng thư viện nó ăn tài nguyên kinh lắm. Muốn nhỏ gọn chắc phải đọc datasheet rồi tự viết.
                            Tác động trực tiếp lên mấy thanh ghi cũng được mà phê! Cái nào mình cần thì nên làm thôi!

                            Comment


                            • Em đang làm về đọc ADC để đo lường nên cần cái VREF chuẩn 1 chút! Mà khổ cái là con STM8L105K4T6 nó không có chân VREF hay VDDA mà nó điện áp tham chiếu nó nối với nguồn luôn. Nguồn thì hay bị dao động (gợn sóng) ==> Kết quả đọc ADC tính ra Vôn sai tè le.

                              Có anh nào đã làm về ADC của con này chưa?

                              Em đọc tài liệu thấy nó nói có thể dùng Internal Voltage Reference để đo điện áp nguồn (VDD) Nhưng em mò cả tuần nay vẫn ko thể hiểu được tác dụng của cái VREF nội của con này.( trên con này có 3 chân có thể cấu hình là chân VREFINT ).

                              1.Em giả sử, VREF nội của STM8L này có tác dụng như điện áp tham chiếu nội cho ADC . Vì điện áp này khoảng 1.2V ( Giá trị chính xác thì đọc trong byte VREFINT_Factory_CONV)
                              => em có thể dùng cầu phân áp từ nguồn đến chân VREFINT này để đọc ADC -> biết được chính xác điện áp nguồn là bao nhiêu
                              Khi em lập trình ( mò từng bit trong thanh ghi) nhưng kết quả nó vẫn lấy điện áp tham chiếu từ NGUỒN.

                              2. Em giả sử : Chân VREFINT này nó có thể xuất ra điện áp 1.2V
                              => Em kéo chân này đến 1 chân ADC khác để đọc => biết chính xác điện áp nguồn

                              Kết Quả sau khi lập trình : Chân VREFINT ko bao giờ có áp ra 1.2V

                              => đến đây thì em bí toàn tập . Em google khắp các diễn đàn, cả nước ngoài => chỉ thấy đề cập 1 ít đến điện áp tham chiếu chứ ko ai nối sâu về nó cả. Ít thấy mọi người bàn về điện áp tham chiếu trong ADC.

                              Mong các anh trên đây đã từng làm hay có kinh nghiệm thì chỉ cho em chút ít để thoát khỏi trái bí to tướng này

                              P/S: Em code cho nó đọc ADC theo kiểu bỉnh thường ( điện áp tham chiếu là điện áp nguồn) thì OK.
                              Nothing

                              Comment


                              • Góp ý một chút về cách dùng điện áp tham chiếu cho ADC.

                                Thông thường để đo lường một cái gì đó bằng ADC, hiếm khi dùng VCC làm điện áp tham chiếu cho ADC, mặc dù phần cứng MCU cho phép như vậy. Lý do
                                1. VCC không có giá trị chính xác đo lường, điện áp ra từ 7805 hay LDO có thể sai số đến 5%
                                2. VCC thay đổi theo nhiệt độ đáng kể
                                3. VCC thay đổi theo tải, tải là chính cái MCU và cả tải bên ngoài (linh kiên kiện khác cũng dùng chung VCC).

                                Thường dùng tham chiếu VCC khi đo độ chính xác thấp (ví dụ đo núm chiết áp để đặt giá trị nào đó) hoặc MCU giá rất thấp không có Vref nội.

                                Tất cả MCU hiện đại của bất kỳ hãng nào, STM hay AVR hay PIC hay PSoC ... đều có nguồn chuyên tạo điện áp tham chiếu chính xác cho ADC và DAC bên trong MCU, gọi là Vref nội. Nên dùng cái này cho ADC và DAC. Ngoài ra, MCU cũng cho phép một chân nào đó làm external Vref - chân này sẽ nối với linh kiện bên ngoài MCU có tính năng tạo Vref chính xác.

                                Cách dùng Vref nội thế nào tuỳ thuộc và con chip cụ thể. Xem datasheet là ra. Nếu xem nhiều lần rồi vẫn không hiểu thì tốt nhất là nên làm cái khác không liên quan gì tới ADC, DAC, Vref ... để tăng trình độ lên đã, sau này quay lại làm vẫn chưa muộn.
                                Phần mềm tự do hoặc không dùng máy tính nữa !.

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X