Thông báo

Collapse
No announcement yet.

Quét phím + PWM

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

  • #16
    Nguyên văn bởi myth-coder Xem bài viết
    Bạn có hiểu cách này họ tạo PWM như thế nào không? còn mình thì chưa hiểu, vì cách của mình khác hoàn toàn với cách ở trên. Bạn có thể tưởng tượng như sau: *4 tần số cần tạo xung lên vậy là với mỗi xung ta có thể chia nhỏ thành 4 phần hình nó như thế này
    [ATTACH=CONFIG]78065[/ATTACH]
    Nếu bạn chọn tích cực duơng thì khi 25% xung thì nó sẽ như thế này
    [ATTACH=CONFIG]78066[/ATTACH]
    Và khi 50% nó thế này
    [ATTACH=CONFIG]78067[/ATTACH]
    75% thì thành thế này
    [ATTACH=CONFIG]78068[/ATTACH]
    Về mặt tư duy thì mình sẽ làm đúng theo cách như thế này, còn về code thì có lẽ bạn nên tự thực hiện, nó không quá khó nếu bạn tiếp xúc vấn đề theo cách này.
    Khi đi làm, thợ xây chẳng hạn, người ta chỉ quan tâm xem hết 1 ngày anh xây được bao nhiêu mét tường, tường có thẳng không, có chắc không. Người ta không quan tâm tới ý tưởng của người thợ xây là gì và cách làm ra sao.
    Là người đi "nhờ", nói ra điều này chắc không phải lắm, nhưng cảm ơn bạn đã bớt chút thời gian đọc bài của mình.

    Comment


    • #17
      Nguyên văn bởi tmtm Xem bài viết
      Khi đi làm, thợ xây chẳng hạn, người ta chỉ quan tâm xem hết 1 ngày anh xây được bao nhiêu mét tường, tường có thẳng không, có chắc không. Người ta không quan tâm tới ý tưởng của người thợ xây là gì và cách làm ra sao.
      Là người đi "nhờ", nói ra điều này chắc không phải lắm, nhưng cảm ơn bạn đã bớt chút thời gian đọc bài của mình.
      thế thì bạn chờ tiếp đi, hoặc post cái code:
      Nguyên văn bởi tmtm Xem bài viết
      Em loay hoay mãi mà code không chạy.
      lên cho mọi người sửa
      |

      Comment


      • #18
        Đã sửa xong, cảm ơn các bác nhiều. Hoá ra cũng đơn giản thôi.
        Biết thì nói là biết, không biết thì nói là không biết. Giúp được người thì giúp, không giúp được thì để cho người ta yên.
        ==> Tự túc là hạnh phúc vì xã hội bây giờ có nhiều người làm nghề "chém gió" quá.
        P/S: MOD đi ngang thì close giúp em nhé!

        Comment


        • #19
          Nguyên văn bởi tmtm Xem bài viết
          Khi đi làm, thợ xây chẳng hạn, người ta chỉ quan tâm xem hết 1 ngày anh xây được bao nhiêu mét tường, tường có thẳng không, có chắc không. Người ta không quan tâm tới ý tưởng của người thợ xây là gì và cách làm ra sao.
          Là người đi "nhờ", nói ra điều này chắc không phải lắm, nhưng cảm ơn bạn đã bớt chút thời gian đọc bài của mình.
          Không hiểu ý cậu là gì, lại thêm cái khoản [==> Tự túc là hạnh phúc vì xã hội bây giờ có nhiều người làm nghề "chém gió" quá.] thì thật sự lại chẳng hiểu gì nữa, nếu cậu không hiểu mình nói gì thì chịu thôi, có điều tớ dám cá với cậu nếu phần cứng mạnh 1 chút thực hiện theo cách mình nói thì VSL rảnh hơn rất nhiều so với cách thông thường và code thì nhàn hơn rất nhiều, quan trọng là độ chính xác sẽ cao nhất so với tất cả mọi cách mà cậu đã từng biết.

          Comment


          • #20
            Nguyên văn bởi myth-coder Xem bài viết
            Không hiểu ý cậu là gì, lại thêm cái khoản [==> Tự túc là hạnh phúc vì xã hội bây giờ có nhiều người làm nghề "chém gió" quá.] thì thật sự lại chẳng hiểu gì nữa,
            Bạn thật sự không hiểu ah?
            Cũng định không nói thêm gì nhưng thôi vậy. Mình đã từng đi làm thuê, và mình thấy rằng người thuê mình họ chẳng bao giờ thèm quan tâm tới mình nghĩ gì và làm như thế nào, họ chỉ quan tâm tới kết quả công việc của mình có đạt yêu cầu hay không thôi và tất nhiên là trả tiền cho kết quả.
            Công việc của mình hơi vất vả, mình bỏ và đi học nghề để kiếm cái bằng tìm việc khác. Nói chung là đầu óc kém nên khi làm mấy bài tập kiểu này toàn phải nhờ mấy thằng em cùng lớp làm giúp. Ôi chao, chúng nó chém gió thì thôi rồi, nếu mới nghe thì chắc mấy Tiến sỹ giấy chắc cũng tin sái cổ và phục sát đất (mình nghĩ vậy). Nhưng bảo mày làm đi và đưa anh kết quả (như người đi thuê ấy) thì nó chịu. Thế mới nói rằng: Tự túc là hạnh phúc vì xã hội bây giờ có nhiều người làm nghề "chém gió" quá.
            Mà VXL thì chính xác hơn là VSL bạn nhỉ?

            Comment


            • #21
              Nguyên văn bởi tmtm Xem bài viết
              Bạn thật sự không hiểu ah?
              Cũng định không nói thêm gì nhưng thôi vậy. Mình đã từng đi làm thuê, và mình thấy rằng người thuê mình họ chẳng bao giờ thèm quan tâm tới mình nghĩ gì và làm như thế nào, họ chỉ quan tâm tới kết quả công việc của mình có đạt yêu cầu hay không thôi và tất nhiên là trả tiền cho kết quả.
              Công việc của mình hơi vất vả, mình bỏ và đi học nghề để kiếm cái bằng tìm việc khác. Nói chung là đầu óc kém nên khi làm mấy bài tập kiểu này toàn phải nhờ mấy thằng em cùng lớp làm giúp. Ôi chao, chúng nó chém gió thì thôi rồi, nếu mới nghe thì chắc mấy Tiến sỹ giấy chắc cũng tin sái cổ và phục sát đất (mình nghĩ vậy). Nhưng bảo mày làm đi và đưa anh kết quả (như người đi thuê ấy) thì nó chịu. Thế mới nói rằng: Tự túc là hạnh phúc vì xã hội bây giờ có nhiều người làm nghề "chém gió" quá.
              Mà VXL thì chính xác hơn là VSL bạn nhỉ?
              Bạn thuê cậu myth-coder gía bao nhiêu đấy ?

              Comment


              • #22
                Nguyên văn bởi tmtm Xem bài viết
                Bạn thật sự không hiểu ah?
                Cũng định không nói thêm gì nhưng thôi vậy. Mình đã từng đi làm thuê, và mình thấy rằng người thuê mình họ chẳng bao giờ thèm quan tâm tới mình nghĩ gì và làm như thế nào, họ chỉ quan tâm tới kết quả công việc của mình có đạt yêu cầu hay không thôi và tất nhiên là trả tiền cho kết quả.
                Công việc của mình hơi vất vả, mình bỏ và đi học nghề để kiếm cái bằng tìm việc khác. Nói chung là đầu óc kém nên khi làm mấy bài tập kiểu này toàn phải nhờ mấy thằng em cùng lớp làm giúp. Ôi chao, chúng nó chém gió thì thôi rồi, nếu mới nghe thì chắc mấy Tiến sỹ giấy chắc cũng tin sái cổ và phục sát đất (mình nghĩ vậy). Nhưng bảo mày làm đi và đưa anh kết quả (như người đi thuê ấy) thì nó chịu. Thế mới nói rằng: Tự túc là hạnh phúc vì xã hội bây giờ có nhiều người làm nghề "chém gió" quá.
                Mà VXL thì chính xác hơn là VSL bạn nhỉ?
                Cứ tưởng nói tui, còn nếu thích thì tui demo cho xem cách tui làm cái này tui chỉ tạo xung 1Khz có điều code đơn giản hơn của cậu post lên rất nhiều.
                PHP Code:
                #include <at89x52.h>

                #define pulse P1_0
                volatile char num=1count=0;
                //     1 -> 25%
                //     2 -> 50%
                //     3 -> 75%
                //     4 -> 100%
                // Do tiến hành chia 4 lên sẽ có 8 đỉnh -> có thể đạt >100% có nghĩa là tới 175%
                void main(void)
                {
                    
                pulse=0;
                    
                TMOD=0x02;// Chế độ 2 (8bit auto reload)
                    
                TH0=256-125;
                    
                /*
                    Chỗ này theo như tính toán thì phải là 250 (vì tần số cần tạo là 4.000Hz -> 1.000.000/4.000=250)
                    nhưng không hiểu sao nếu dùng 250 thì tần số tạo ra chỉ là 2.000, nên đành phải 250/2 để x2 tần số
                    */
                    
                ET0=1;
                    
                TR0=1;
                    
                EA=1;
                    while(
                1)
                    {
                        
                PCON=IDL_;
                    }
                }


                void ISR_timer0(void)interrupt TF0_VECTOR
                {
                    if(
                count>7)// >=8 do chia tần cho 4 nên khoảng cách giữa mỗi đỉnh con sẽ là 8 khoảng
                    
                {
                        
                pulse=1;
                        
                count=0;
                    }
                    if(
                pulse && (count>=num))// Nếu đang ở đỉnh dương thì tiến hành san đỉnh tạo hiệu ứng PWM
                        
                pulse=0;
                    
                count+=1;

                Như vậy cách này liệu có đơn giản và chính xác nhất không?
                Attached Files

                Comment


                • #23
                  Nguyên văn bởi ken___ Xem bài viết
                  Bạn thuê cậu myth-coder gía bao nhiêu đấy ?
                  Dường như bạn này đang cười nhạo mình? Vui nhỉ.

                  Comment


                  • #24
                    Nguyên văn bởi myth-coder Xem bài viết
                    Dường như bạn này đang cười nhạo mình? Vui nhỉ.
                    Cười nhạo gì.Cậu bỏ công giúp đỡ cậu kia thi sao tôi cười cậu.Tôi thấy câu kia nói buồn cười quá.

                    Comment


                    • #25
                      Nguyên văn bởi myth-coder Xem bài viết
                      Cứ tưởng nói tui, còn nếu thích thì tui demo cho xem cách tui làm cái này tui chỉ tạo xung 1Khz có điều code đơn giản hơn của cậu post lên rất nhiều.
                      PHP Code:
                      #include <at89x52.h>

                      #define pulse P1_0
                      volatile char num=1count=0;
                      //     1 -> 25%
                      //     2 -> 50%
                      //     3 -> 75%
                      //     4 -> 100%
                      // Do tiến hành chia 4 lên sẽ có 8 đỉnh -> có thể đạt >100% có nghĩa là tới 175%
                      void main(void)
                      {
                          
                      pulse=0;
                          
                      TMOD=0x02;// Chế độ 2 (8bit auto reload)
                          
                      TH0=256-125;
                          
                      /*
                          Chỗ này theo như tính toán thì phải là 250 (vì tần số cần tạo là 4.000Hz -> 1.000.000/4.000=250)
                          nhưng không hiểu sao nếu dùng 250 thì tần số tạo ra chỉ là 2.000, nên đành phải 250/2 để x2 tần số
                          */
                          
                      ET0=1;
                          
                      TR0=1;
                          
                      EA=1;
                          while(
                      1)
                          {
                              
                      PCON=IDL_;
                          }
                      }


                      void ISR_timer0(void)interrupt TF0_VECTOR
                      {
                          if(
                      count>7)// >=8 do chia tần cho 4 nên khoảng cách giữa mỗi đỉnh con sẽ là 8 khoảng
                          
                      {
                              
                      pulse=1;
                              
                      count=0;
                          }
                          if(
                      pulse && (count>=num))// Nếu đang ở đỉnh dương thì tiến hành san đỉnh tạo hiệu ứng PWM
                              
                      pulse=0;
                          
                      count+=1;

                      Như vậy cách này liệu có đơn giản và chính xác nhất không?
                      Mình thì dựa vào mấy cái code sau (P1.7 phát tần 1KHz, P1.7 phát tần 10KH thạch anh 12MHz)
                      ORG 0000H
                      JMP START
                      ORG 000BH ; NGAT TIMER 0
                      LJMP NGAT_TIME_0
                      ORG 001BH ; NGAT TIMER 1
                      LJMP NGAT_TIME_1


                      START:

                      MOV TMOD,#21H ; TIMER 0 CHE DO 1, TIMER1 CHE ĐỘ 2
                      MOV TL0,#0FEH ; 1KHZ
                      MOV TH0,#0CH ;

                      MOV TH1,#-50H ; 10KHZ
                      SETB ET0
                      SETB ET1
                      SETB TR0
                      SETB TR1
                      SETB EA
                      DUNG: JMP DUNG
                      NGAT_TIMER_0:
                      CLR TR0
                      CLR TF0
                      CPL P1.7
                      MOV TL0,#0FEH ;
                      MOV TH0,#0CH
                      SETB TR0
                      RET
                      NGAT_TIMER_1:
                      CLR TR1
                      CLR TF1
                      MOV TH1,#-50H
                      CPL P1.6
                      SETB TR1
                      RET
                      END
                      Chế lại, cắt ghép loằng ngoằng, chuyển sang C mãi rồi cũng xong.
                      P/S: Bạn có biết Quách Tĩnh trong tiểu thuyết Anh hùng xạ điêu của Kim Dung không?

                      Comment


                      • #26
                        Nguyên văn bởi myth-coder Xem bài viết
                        Hay quá nhỉ, đã vậy làm 1 hiệp đấu coi của ai chính xác hơn. Cái này tuy là ứng dụng nhỏ nhưng lại đánh đúng vào điểm yếu của họ 89xx vì xung của họ này quá thấp, nó giống như kiểu jindo đá bóng rất giỏi nhưng nếu cứ đem chiều cao ra mà so thì lại chẳng bằng ai cả. Nhưng nếu làm mạch thực tế cứ cho là mình có đủ linh kiện để làm thì cũng chỉ cho nó chạy được chứ không có máy hiển thị sóng để biết được dạng hình nó ra sao còn đếm xung thì cứ coi như đúng như tính toán hoặc có thể làm bằng 1 con 89xx kết hợp với 4 led 7 đoạn.
                        vâng bạn đúng tôi thua, bạn làm như tôi chưa đem cái ocilo ra xài bjo ko bằng. cái bài này nó chính là cái đồ án môn trường tôi ngày xưa mấy ông thầy bắt làm mạch rồi đem cả ocilo ra đo chắc lúc đó tôi nhìn nhầm cơ mà lúc đó thạch anh là 12mhz chứ chả cần tới 24mhz... tôi cũng chả rảnh đấu đá vs cậu, chỉ muốn góp ý cho chủ thớt và xem chủ thớt làm đc những j thôi chứ thớt vất toẹt cái đề kia lên thì có giời giúp
                        Website chính thức đổi địa chỉ website thành
                        Mời các bạn ghé thăm !!!

                        Comment


                        • #27
                          Nguyên văn bởi tmtm Xem bài viết
                          Mình thì dựa vào mấy cái code sau (P1.7 phát tần 1KHz, P1.7 phát tần 10KH thạch anh 12MHz)


                          Chế lại, cắt ghép loằng ngoằng, chuyển sang C mãi rồi cũng xong.
                          P/S: Bạn có biết Quách Tĩnh trong tiểu thuyết Anh hùng xạ điêu của Kim Dung không?
                          Thua bạn, bạn nói là PWM mà có thấy PWM ở trong code đó đâu? đấy chỉ là tạo xung thôi chứ có đụng chạm gì đến PWM? bạn thử lôi code của tui về xem có phải là có thể tạo và PWM không? mà code của tui cũng đâu có loằng ngoằng gì đâu?

                          Mà mình có góp ý với đoạn code của cậu thế này:
                          Trong chuơng trình phục vụ ngắt timer nếu số lệnh là ít và kiểm soát đựoc thời gian nạp cho TH TL (có nghĩa là không xảy ra timer chồng timer) thì đừng nên dừng timer có nghĩa là bỏ cái cặp TRx=0, với TRx=1(vì khi timer dừng đếm, trong thời gian dừng thực hiện bao nhiêu phép tính thì sai số của timer sẽ là bấy nhiêu đấy) và còn xóa cờ tràn TFx=0 cái này cũng không cần thiết luôn. và trong môi trường mô phỏng cũng có máy đếm xung đấy, thử gắn máy đếm xung đó vào xem thời gian nạp cho TH1 đã chuẩn chưa, đã tạo được xung 10khz chưa? lấy ngay file mô phỏng của tui về sửa lại cổng cho đúng rồi nạp hex cho nó chạy thì sẽ rõ.
                          Last edited by myth-coder; 13-11-2013, 02:54.

                          Comment


                          • #28
                            Nguyên văn bởi mast090 Xem bài viết
                            vâng bạn đúng tôi thua, bạn làm như tôi chưa đem cái ocilo ra xài bjo ko bằng. cái bài này nó chính là cái đồ án môn trường tôi ngày xưa mấy ông thầy bắt làm mạch rồi đem cả ocilo ra đo chắc lúc đó tôi nhìn nhầm cơ mà lúc đó thạch anh là 12mhz chứ chả cần tới 24mhz... tôi cũng chả rảnh đấu đá vs cậu, chỉ muốn góp ý cho chủ thớt và xem chủ thớt làm đc những j thôi chứ thớt vất toẹt cái đề kia lên thì có giời giúp
                            Lại 1 lần nữa phải nói điều này. Có thể tất cả những gì mình làm hoặc mình nghĩ mang tính lý thuyết và "mô phỏng" nhiều, nhưng chắc chắn 1 điều cách mà mình tiếp cận các vấn đề chắc chắn là khác so với mọi người bởi vì mọi người quá phụ thuộc vào delay mà delay thì có nghĩa là tiêu tốn năng lực xử lý 1 cách quá phí phạm và lập trình cũng không dễ hơn cách mình tiếp cận tẹo nào. Vấn đề tính chính xác của timer hoàn toàn có thể điều chỉnh thông số nạp cho nó theo thực tế, còn cách mà đơn giản hóa vấn đề thì không phải là ai cũng làm tốt được thử hỏi nhìn code ở phía trên mà mình code thì có hơn mấy dòng so với tạo xung thuần đâu mà đảm nhiệm được luôn cả PWM? Liệu cách tư duy này là không nên?

                            Comment


                            • #29
                              Nguyên văn bởi myth-coder Xem bài viết
                              Thua bạn, bạn nói là PWM mà có thấy PWM ở trong code đó đâu? đấy chỉ là tạo xung thôi chứ có đụng chạm gì đến PWM? bạn thử lôi code của tui về xem có phải là có thể tạo và PWM không? mà code của tui cũng đâu có loằng ngoằng gì đâu?
                              ko hiểu cách viết code của người ta lại hay chém to, chính xác nó là code tạo pwm 3.9khz với duty 50%, code này chỉ cần chỉnh giá trị nạp cho TH0 và TL0 là thành 10khz
                              Nguyên văn bởi myth-coder Xem bài viết
                              Lại 1 lần nữa phải nói điều này. Có thể tất cả những gì mình làm hoặc mình nghĩ mang tính lý thuyết và "mô phỏng" nhiều, nhưng chắc chắn 1 điều cách mà mình tiếp cận các vấn đề chắc chắn là khác so với mọi người bởi vì mọi người quá phụ thuộc vào delay mà delay thì có nghĩa là tiêu tốn năng lực xử lý 1 cách quá phí phạm và lập trình cũng không dễ hơn cách mình tiếp cận tẹo nào. Vấn đề tính chính xác của timer hoàn toàn có thể điều chỉnh thông số nạp cho nó theo thực tế, còn cách mà đơn giản hóa vấn đề thì không phải là ai cũng làm tốt được thử hỏi nhìn code ở phía trên mà mình code thì có hơn mấy dòng so với tạo xung thuần đâu mà đảm nhiệm được luôn cả PWM? Liệu cách tư duy này là không nên?
                              chắc chỉ có mỗi bạn biết xài cái timer tạo pwm và người khác tạo pwm bằng delay, haizzz. việc sử dụng các ngắt để lập trình nó tùy thuộc vào số lượng công việc của con chip, nếu số lượng công việc ít đơn giản và ko đòi hỏi cao thì chả xài mấy cái ngắt ngủm làm j vì vốn dĩ nó cũng đáp ứng đc, với các chương trình lớn người ta sẽ tận dụng tối đa các ngắt và khả năng đáp ứng được của con chip để đáp ứng đc yêu cầu, ví dụ như cái bài này chả xài 1 tí tẹo delay nào, cái trò mà nhét tất cả vào main chỉ dành cho người mới học mà thôi.
                              P/s: ko nên phán người khác ra sao trước khi ko biết họ thế nào, ai cũng có phần xanh và non cả
                              Website chính thức đổi địa chỉ website thành
                              Mời các bạn ghé thăm !!!

                              Comment


                              • #30
                                Nguyên văn bởi mast090 Xem bài viết
                                vâng bạn đúng tôi thua, bạn làm như tôi chưa đem cái ocilo ra xài bjo ko bằng. cái bài này nó chính là cái đồ án môn trường tôi ngày xưa mấy ông thầy bắt làm mạch rồi đem cả ocilo ra đo chắc lúc đó tôi nhìn nhầm cơ mà lúc đó thạch anh là 12mhz chứ chả cần tới 24mhz... tôi cũng chả rảnh đấu đá vs cậu, chỉ muốn góp ý cho chủ thớt và xem chủ thớt làm đc những j thôi chứ thớt vất toẹt cái đề kia lên thì có giời giúp
                                Mình dám khẳng định sai số của timer phần nhiều là do trong chuơng trình phục vụ ngắt mọi người cho dừng timer, sau đó xử lý gì đó rồi lại cho đếm timer, chính cái thời gian dừng đếm đó là tác nhân chính gây sai số cho timer đó. Còn mình thì không phải bên điện tử nên chắc chắn là ít điều kiện để test thử mọi thứ hơn, nhưng kém cái "lọ" chắc chắn sẽ có cái "chai" để bù.

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X