Thông báo

Collapse
No announcement yet.

Lấy xung 555 cho VDK : help ! hip ! hop !

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

  • Lấy xung 555 cho VDK : help ! hip ! hop !

    Mình vừa viết chương trình cho led sáng theo 2 kiểu ở P1.(mới tập tọe thôi,nghĩ sao viết vậy nên khá dài) . Vấn đề là khi ráp thực tế ko thể điều chỉnh lại tốc độ chớp theo ý mình được. Mỗi lần cần nhanh hay chậm hơn chẵng lẽ nạp lại VXL? Cho nên mình muốn ráp thêm mạch 555 để lấy sự thay đổi xung làm hàm delay. Kiến thức có tý tẹo nên xin trình bày ý tưởng thôi, mong các bạn giúp mình hướng giải quyết nhé .
    Ý mình là cho 1 chân nào đó của 89 nhận xung từ 555. Hàm delay sẽ nhận biết độ dài ngắn của xung > từ đó Delay sẽ thay đổi độ trễ theo xung. không phụ thuộc vào tần số, chu kỳ của 89
    Như vậy, xung nên đưa vào chân nào thích hợp nhất ? Hàm delay coi như 1 chương trình con tốn 1 khoảng trễ để xử lý xung đó : có lệnh nào làm được ko ? Nếu không phiền xin các bạn sửa lại chương trinh giúp mình theo ý tưởng trên nha.
    Rất cám ơn các bạn quan tâm !!

    #include <sfr51.inc>
    org 0000h
    main:
    mov p1,#0ffh
    lcall kieu1 ;chop tat xen ke (chan-le)
    lcall kieu2 ;them vao thu duoi don
    lcall lapkieu2 ;vong lap 4 lan cua kieu 2
    sjmp main
    ;--------------
    lapkieu2:
    mov r7,#3
    trolai2:
    lcall kieu2
    djnz r7,trolai2
    ret
    ;-------------
    kieu1: mov r7,#8
    trolai1: mov a,#55h
    mov p1,a
    lcall delay2
    mov a,#0aah
    mov p1,a
    lcall delay2
    djnz r7,trolai1
    ret

    kieu2:
    ;-------chu ky 1---
    mov a,#10000000b
    mov p1,a
    lcall delay
    mov a,#01000000B
    mov p1,a
    lcall delay
    mov a,#00100000b
    mov p1,a
    lcall delay
    mov a,#00010000b
    mov p1,a
    lcall delay
    mov a,#00001000b
    mov p1,a
    lcall delay
    mov a,#00000100b
    mov p1,a
    lcall delay
    mov a,#00000010b
    mov p1,a
    lcall delay
    mov a,#00000001b
    mov p1,a
    lcall delay
    ;-----------------chu ky 2------
    mov a,#10000001b
    mov p1,a
    lcall delay
    mov a,#01000001B
    mov p1,a
    lcall delay
    mov a,#00100001b
    mov p1,a
    lcall delay
    mov a,#00010001b
    mov p1,a
    lcall delay
    mov a,#00001001b
    mov p1,a
    lcall delay
    mov a,#00000101b
    mov p1,a
    lcall delay
    mov a,#00000011b
    mov p1,a
    lcall delay
    ;--------------chu ky 3---------
    mov a,#10000011b
    mov p1,a
    lcall delay
    mov a,#01000011B
    mov p1,a
    lcall delay
    mov a,#00100011b
    mov p1,a
    lcall delay
    mov a,#00010011b
    mov p1,a
    lcall delay
    mov a,#00001011b
    mov p1,a
    lcall delay
    mov a,#00000111b
    mov p1,a
    lcall delay
    ;----------chu ky 4----------
    mov a,#10000111b
    mov p1,a
    lcall delay
    mov a,#01000111B
    mov p1,a
    lcall delay
    mov a,#00100111b
    mov p1,a
    lcall delay
    mov a,#00010111b
    mov p1,a
    lcall delay
    mov a,#00001111b
    mov p1,a
    lcall delay
    ;-------------chu ky 5--------
    mov a,#10001111b
    mov p1,a
    lcall delay
    mov a,#01001111B
    mov p1,a
    lcall delay
    mov a,#00101111b
    mov p1,a
    lcall delay
    mov a,#00011111b
    mov p1,a
    lcall delay
    ;--------chu ky 6------------
    mov a,#10011111b
    mov p1,a
    lcall delay
    mov a,#01011111B
    mov p1,a
    lcall delay
    mov a,#00111111b
    mov p1,a
    lcall delay
    ;----chu ky 7----------
    mov a,#10111111b
    mov p1,a
    lcall delay
    mov a,#01111111B
    mov p1,a
    lcall delay
    ;------chu ky 8---------
    mov a,#11111111b
    mov p1,a
    lcall delay

    ;chop 4 cai > sang = 3 lan delay--
    mov a,#00000000b
    mov p1,a
    lcall delay
    mov a,#11111111b
    mov p1,a
    lcall delay
    mov a,#00000000b
    mov p1,a
    lcall delay
    mov a,#11111111b
    mov p1,a
    lcall delay
    lcall delay
    lcall delay
    ;----------------
    delay:
    mov r2,#200
    LLDL: mov r1,#200
    LLA: nop
    djnz r1,LLA
    djnz r2,LLDL
    ret
    ;-------------------
    delay2:
    mov r2,#250
    LLDL2: mov r1,#250
    LLB: NOP
    nop
    djnz r1,LLB
    djnz r2,LLDL2
    ret
    end

    Sorry Mod !! ko biết làm sao chèn code riêng cho nó gọn Thread ???

  • #2
    Chẵng lẽ mình vui tính quá , đi đặt tên cái Subject hơi bị "soock" nên ko sư phụ nào thèm giúp hết ??
    Nếu vậy thì cho mình xin lỗi nha. Rút kinh nghiệm lần sau !!!!

    Comment


    • #3
      Cố gắng lên đi bạn, có khi từ hôm qua tới giờ mà bạn nghiên cứu rồi tự làm thì có khi xong rồi ý chứ
      Ý tưởng của bạn cũng được, chủ yếu xử lý bằng phần mềm thôi, còn xung thì bạn đưa vào chân i/o nào của vi điều khiển chả được. Nếu đưa vào chân i/o bình thường thì phần mềm phải xử lý trong chương trình chính, còn nếu bạn đưa vào chân ngắt ngoài của vi điều khiển thì xử lý trong chương trình ngắt có vẻ dễ hơn.
      Ngoài ra theo mục đích của bạn thì có thể làm đơn giản hơn là dùng 2 phím để điều chỉnh thời gian delay

      Comment


      • #4
        Nguyên văn bởi lidzabt Xem bài viết
        Chẵng lẽ mình vui tính quá , đi đặt tên cái Subject hơi bị "soock" nên ko sư phụ nào thèm giúp hết ??
        Nếu vậy thì cho mình xin lỗi nha. Rút kinh nghiệm lần sau !!!!
        ************************************************** ************************8
        delay:
        jb p3.1,delay ;xung lm555 đưa vao chân p3.1
        ca_chu_ki:
        jnb p3.1,ca_chu_ki
        ret
        tại đầu CT chính nhớ set bit p3.1
        Last edited by tdm; 03-07-2010, 12:27.
        |

        Comment


        • #5
          Tuyệt vời ! rất cảm ơn các bạn. Mình sẽ làm ngay, chiều nay được hay ko cũng sẽ post kết quả cho bạn biết !

          Comment


          • #6
            tôi đã mô phỏng trên proteus và đã chạy tốt.
            |

            Comment


            • #7
              Mình thấy trong code bạn hay dùng cấu trúc :

              mov a,#.............
              mov p1,a
              lcall delay.

              Vậy sao bạn không viết trực tiếp là

              mov p1,#.........
              lcall delay

              cho gọn nhỉ

              Mà nó còn kiểu dịch trái dịch phải gì đó con ngắn hơn nữa đó ( lâu ko viết quên rồi ).

              Comment


              • #8
                Nguyên văn bởi tdm Xem bài viết
                ************************************************** ************************8
                delay:
                jb p3.1,delay ;xung lm555 đưa vao chân p3.1
                ca_chu_ki:
                jnb p3.1,ca_chu_ki
                ret
                tại đầu CT chính nhớ set bit p3.1
                đầu ctrinh mình đặt : setb p3.1 ,hàm delay thì copy của bạn, dịch file hex ko có lỗi nhưng chạy ctrinh thì đứng yên khi gọi delay !!! mình dùng setb có sai ko bạn? bạn vui lòng giúp mình chi tiết tý nhen!
                to dương_act : mình đã viết lại theo ý bạn, đúng là kết quả cũng vậy nhưng ctrình gọn hơn nhiều. cám ơn bạn nhen.
                (Spam tí : mình ko phải dân điện. tự học VXL do ham thích thôi, suốt ngày chỉ ngồi khám bệnh > viết toa thuốc. Tối mới rãnh tập tọe ngồi viết lệnh,kiến thức lại rời rạc ko có hệ thống nên khá vất vã,Quê mình ko ai mở lớp dạy món này hết. Ước chi 1 lần được nghe giảng thực tế về VXL !!)

                Comment


                • #9
                  Nguyên văn bởi lidzabt Xem bài viết
                  đầu ctrinh mình đặt : setb p3.1 ,hàm delay thì copy của bạn, dịch file hex ko có lỗi nhưng chạy ctrinh thì đứng yên khi gọi delay !!! mình dùng setb có sai ko bạn? bạn vui lòng giúp mình chi tiết tý nhen!
                  to dương_act : mình đã viết lại theo ý bạn, đúng là kết quả cũng vậy nhưng ctrình gọn hơn nhiều. cám ơn bạn nhen.
                  (Spam tí : mình ko phải dân điện. tự học VXL do ham thích thôi, suốt ngày chỉ ngồi khám bệnh > viết toa thuốc. Tối mới rãnh tập tọe ngồi viết lệnh,kiến thức lại rời rạc ko có hệ thống nên khá vất vã,Quê mình ko ai mở lớp dạy món này hết. Ước chi 1 lần được nghe giảng thực tế về VXL !!)
                  bạn coi lại xem phần lm555 có xuất xung hay không.
                  |

                  Comment


                  • #10
                    file mô phỏng proteus 7.6
                    Attached Files
                    |

                    Comment


                    • #11
                      Nguyên văn bởi tdm Xem bài viết
                      file mô phỏng proteus 7.6
                      Chạy như ý luôn rồi TDM ơiiiiiiiiiii !! (Hôm qua ko được là do xung 555 quá chậm, lại ko kiên nhẫn chờ đợi đúng là gà ) click Thanks thì quá đơn giản nhưng trong forum thì mình chỉ đành "cám ơn suông" thôi, nếu gặp bạn ofline thì ko chỉ có click thanks ko đâu !! Mình thấy đa số các bạn khác (ở các forum khác nữa ) rất giỏi về điện tử, lập trình nhưng đa số lại sợ phần cơ khí chi tiết ( VD: làm hộp chứa cho mạch, đưa mạch quét led vào quạt máy,...) đối với người thích vọc phá như mình thì những vấn đề như vậy mình rất hứng thú và cũng cảm thấy ... khá khá đó (tự tin, ko phải tự cao à nhen). Bất cứ lúc nào cần bạn cứ email mình sẵn sàng ngay ( chỉ phần cơ thôi còn điện thì đầu hàng ! )
                      Ah mà còn vấn đề nãy sinh : vậy mạch trên mình vẫn phụ thuộc thạch anh à ?? Thêm 1 con thạch anh ko đáng là bao nhưng nếu bỏ được nó thì thật là pro . Nhưng nếu bỏ thạch anh > mạch phức tạp hơn thì thôi. Dẫu sao tạo trễ bằng 555 như bạn giúp đã là quá hay và thực tế đối với mình rồi.
                      Last edited by lidzabt; 05-07-2010, 08:11.

                      Comment


                      • #12
                        tìm mấy ngày trời mới gặp. chương trình e viết thế này thì làm sao chỉnh xung bằng 555 như mấy a ở trên được a. e mới học chi dùm thằng e với

                        #include <regx51.h>
                        #define led P0
                        void delay(unsigned int ms)
                        {
                        unsigned int i;
                        unsigned char j;
                        for(i=0;i<ms;i++)
                        {
                        for(j=0;j<125;j++)
                        {
                        }
                        }
                        }
                        main()
                        {
                        while(1)
                        {
                        P0=0x00;delay(1000);
                        P0=0x00;delay(1000);
                        P0=0x04;delay(1000);
                        P0=0x08;delay(1000);
                        P0=0x10;delay(1000);
                        P0=0x20;delay(1000);
                        P0=0x40;delay(1000);
                        P0=0x80;delay(1000);
                        }
                        }

                        Comment


                        • #13
                          mấy a giúp dùm e

                          Comment


                          • #14
                            Nguyên văn bởi lenhoc91 Xem bài viết
                            mấy a giúp dùm e
                            code:
                            Code:
                                #include <regx51.h>
                            #define led P2
                            #define XUNG P1_0 //LAY XUNG TU 555
                            void delay()
                            {
                             while(XUNG==1)
                             {
                             }
                              while(XUNG==0)
                             {
                             }
                            }
                            
                            main()
                            {
                            while(1)
                            {
                            led=0x01;delay();
                            led=0x02;delay();
                            led=0x04;delay();
                            led=0x08;delay();
                            led=0x10;delay();
                            led=0x20;delay();
                            led=0x40;delay();
                            led=0x80;delay();
                            }
                            }
                            |

                            Comment


                            • #15
                              Nguyên văn bởi tdm Xem bài viết
                              code:
                              Code:
                                  #include <regx51.h>
                              #define led P2
                              #define XUNG P1_0 //LAY XUNG TU 555
                              void delay()
                              {
                               while(XUNG==1)
                               {
                               }
                                while(XUNG==0)
                               {
                               }
                              }
                              
                              main()
                              {
                              while(1)
                              {
                              led=0x01;delay();
                              led=0x02;delay();
                              led=0x04;delay();
                              led=0x08;delay();
                              led=0x10;delay();
                              led=0x20;delay();
                              led=0x40;delay();
                              led=0x80;delay();
                              }
                              }
                              đơn giản mà hiệu quả bạn nhỉ
                              - Mạch nạp vdk 8051, AVR, PIC, EEPROM
                              - Linh kiện điện tử cho sinh viên


                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X