Thông báo

Collapse
No announcement yet.

Vi điều khiển PHILIP

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

  • Vi điều khiển PHILIP

    Các bạn sinh viên các trường kĩ thuật chắc
    đã quen thuộc với loại vi điều khiển 8051 của
    atmel .Tuy nhiên ,còn một loại VĐK thuộc họ
    này do hãng PHILIP sản xuất ,đây cũng là loại chíp
    có tính ưu việt hơn hẳn dòng 89c51 ,tui tạo ra topic này nhằm
    để chúng ta có thể thảo luận kĩ hơn về loại chip này

    Nhìn chung chíp Philip có đầy đủ những tính năng của loại chíp 89c51 của atmel như timer/counter , ngắt .vvv.vvBên cạnh đó , chíp philip có những tính năng nổi bật hơn con 89c .

    - Bộ nhớ ROM có dung lượng lớn
    16/32/64 kb flash rom và 1024 bytes RAm ( so với 8 k rom ,128 bytes ram của
    89x) bộ nhớ của chíp PHILIP
    -Chức năng ISP ( insystem -programming)
    ISP là khả năng nạp trực tiếp chương trình vào chip ngay trên mạch mà không cần phải rút chíp ra khỏi mạch .đối với vdk của atmel chỉ có con AVR ,và 89s52 mới có chức năng này.Nhờ chức năng này ,mạch nạp cho chip philip rất đơn giản dễ chế tạo chức năng ISP dung 5 chân VDK (TxD,RxD,RST ,VDD,VSS)

    - chức năng IAP (in-application programmable)
    ,chức năng IAP cho phép bộ nhớ flash có khả năng cấu hình lại trong khi các ứng dụng đang chạy
    - 3 bộ định thời 16 bít chức năng của philip giống hệt chíp 89c51
    - SPI (serial peripheral interface)
    chức năng này cho phép truyền dữ liệu đồng bộ với tốc độ cao
    giữa chíp philip và các thiết bị ngoại vi khác ,hay giữa các chíp với nhau
    - PWM (pulse width modulation)
    đây là một chức năng rất đặc biệt của philip ,khi chíp hoạt động ở chế độ này một chân của chíp sẽ ra phát xung với tần số khác nhau (tần số này do người lập trình xác định) . Philip có chế độ băm xung 8 bit (con AVR còn hỗ trợ băm xung 10 bít ADC) với 5 chân băm xung.
    -Chức năng ngắt
    philip 8 ngắt với 4 mức ưu tiên ngắt ,nó cũng có ngắt ngoài ,ngắt timer , nối tiếp như 89c ,ngoài ra còn có chức năng ngắt PCA ,UART/SPI

    Có thể nói chip philip là loại chíp rất ưu việt ,có thể thay thế
    rất tốt cho loại chip 89c52 thường được dùng trong các kì
    ROBOCON.cac ban co the tham khao them datasheet ve loai chip nay o trang
    http//www.alldatasheet.com ( tim loai p89v51rd ,p89v51rc
    SHARE KHO PHIM LỚN

  • #2
    Re: Vi điều khiển PHILIP

    Nguyên văn bởi giaosucan
    Các bạn sinh viên các trường kĩ thuật chắc
    đã quen thuộc với loại vi điều khiển 8051 của
    atmel .Tuy nhiên ,còn một loại VĐK thuộc họ
    này do hãng PHILIP sản xuất ,đây cũng là loại chíp
    có tính ưu việt hơn hẳn dòng 89c51 ,tui tạo ra topic này nhằm
    để chúng ta có thể thảo luận kĩ hơn về loại chip này
    Theo tui được biết, bạn nằm trong một đội robocon rất mạnh, đã lọt vào 1/8 hay 1/4 gì đó. Chỉ thiếu một tý may mắn đã ko vào sau được hơn nữa. Đội bạn đã dùng vi điều khiển PHILIP nên khá tối ưu trong việt thiết kế mạch so với họ 89 thông dụng.
    Mong bạn ko ngại chia sẻ kinh nghiệm đó cho đàn em làm robocon thế hệ sau: như mạch nạp, trình dịch, một vài đoạn code để topic này thêm sôi động. Đặc biệt là một số module thông dụng trong robocon!

    Comment


    • #3
      Re: Vi điều khiển PHILIP

      Vay theo cac bac thi tui muon thu con nay thi phai mua o dau, gia ca the nao. Theo tui thi con 89C51 do rat do te so voi cac con # nhung li do lon nhat de no tro len pho dung nhat hien nay la do no re, de kiem, bo nap thi ban cung san, tai lieu tieng viet nhieu. Vay tui co the kiem con do o dau bay gio . . . . :twisted:
      du rang nghe qua thay cac bac noi ve may con Phillip thi thich that day nhung . . . . .
      Troi ko so dat ko so chi so minh ko biet so

      Comment


      • #4
        Muốn mua con gì thì cứ hỏi bác Binh Anh là có ngay, tháng nào bác ấy chả đi du lịch ở Digi-Key 1 hoặc 2 lần
        Work is glory

        Comment


        • #5
          Nói đến dòng 89C51 của Philips cũng không nên bỏ qua tính năng mảng bộ đếm khả trình PCA (Programable Counter Array) và Watch-dog Timer.
          Hiện nay có thêm một dòng 89V51 cũng cùng tính năng nhưng tiêu thụ điện năng và công suất thấp.
          Lai như lưu thuỷ hề, thệ như phong
          Bất tri hà xứ lai hề, hà sở chung

          Comment


          • #6
            Vâng loại chip 89c là loại chip rất được ưa chuộng ,bởi vì giá
            rẻ , tài liệu tiếng việt có nhiều .Tuy nhiên nhược điểm của nó
            là chết rất nhiều .Vừa rồi ,đội mình đã đốt ít nhất 50 chục con
            89c (25 k /1 con),trong khi đó nếu dùng chip philip cậu chỉ
            cần 10 con cho cả mùa giải cũng đủ (kinh tế hơn nhiều).Thực ra ,trong miền nam loại chip này đã được sử dụng từ lâu (đôi FXR họ cũng chơi loại
            chíp này) .Thật ra ,chip philip thuộc họ 8051 nên nó có
            đầy đủ tính năng như 8051 ,cho nên bạn chỉ cần học chắc dòng 89
            thì chuyển sang philip cũng không khác gì.
            Hiện nay loại chíp này thằng bạn tui nó có (10 con lận) ,nếu bác
            cần xin liên hệ với tui email: giaosucan2000@yahoo.com ,mà
            bác binhanh cũng chuyên nhập chip từ nước ngoài về mà .
            Mạch nạp của nó thiết kế rất đơn giản(chỉ vài chục khìn một cái mạch) ,nếu cần có thể giúp bạn làm cũng được .
            cậu có thể thiết kế những cái mạch cho 8051 rồi cắm chip philip
            vào cũng chạy vô tư
            đây là một đoạn code nhỏ dành cho chip philip

            #include<P89x51rd2.h>
            #define ON 1
            #define OFF 0
            #define Reload_valueH 0xFF
            #define Reload_valueL 0xDC
            /* ----- DC define----*/
            sbit DC_right1 = P1^4;
            sbit DC_right2 = P1^5;
            sbit DC_left1 = P1^6;
            sbit DC_left2 = P1^7;
            sbit DC_nang1 = P1^2;
            sbit DC_nang2 = P1^3;
            sbit DC_nha_bong = P1^1;
            /*-----sensor-----*/
            sbit sensor0 = P2^0; /* INT0*/
            sbit sensor1 = P2^1;
            sbit sensor2 = P2^2;
            sbit sensor3 = P2^3;
            sbit sensor4 = P2^4;
            sbit sensor5 = P2^5 ; /*INT1*/
            /*-----hanh trinh nang------------*/
            sbit Hanh_trinh_tren =P2^7;
            sbit Hanh_trinh_duoi =P2^6;
            /*-----------External variabes-----------------------*/
            unsigned char pdata vach_trang; /* dem vach trang */
            unsigned char select;
            /*---------LED Display-------*/
            Led_display[10]={0xA0,0xF9,0xC4,0xD0,0x99,0x92,0x82,0xF8,0x80,0x9 0};

            /* -----external function-------*/
            void Both_counter(void)
            {
            TMOD=0x55;
            TR0=ON;
            TR1=ON;
            }
            void Counter1_set(void)
            {
            TMOD=0x55; /* 16 bit counter*/
            TR1=ON;
            }
            void Counter1_reset(void)
            {
            TR1=OFF;
            TL1=0x00;
            TH1=0x00;
            }
            void Counter0_set()
            {
            TMOD=0x55; /* 16 bit counter*/
            TR0=ON;
            }
            void Counter0_reset(void)
            {
            TR0=OFF;
            TL0=0x00;
            TH0=0x00;
            }
            void Ext1_init(void)
            {
            EX1=ON; /*Enable external interrupt*/
            EA=ON;
            IT1=ON;/* Edge Trigerred*/
            // IE1=OFF;
            }
            void Ext0_init(void)
            {
            EX0=ON;
            EA=ON;
            IT0=ON;/* Edge Trigerred*/
            IE0=OFF;
            }
            void Ext0_reset()
            {
            EX0=OFF;
            IT0=OFF;
            }
            int Encoder_right(void) // encoder right in timer 1
            {
            int C1;
            C1=TL1;
            return(C1);
            }
            int Encoder_left(void) // encoder left in timer 0
            {
            int C2;
            C2=TL0;
            return(C2);
            }
            void External_interrupt(void) interrupt 0
            {
            vach_trang++;
            P0=Led_display[vach_trang];
            }
            /*-----delay function-------*/
            void Delay( long xdata sec)
            {
            long xdata i,j;
            for(i=0;i<=100;i++)
            for(j=0;j<=sec;j++);
            }

            /* -----------Pulse width modulation ---------*/

            void Speed_right( char xdata duty1)
            {
            CCAP1H=duty1;
            }

            void Speed_left (char xdata duty2)
            {
            CCAP4H=duty2;
            }

            void Speed_back_right(char xdata duty3)
            {
            CCAP2H=duty3;
            }
            void Speed_back_left( char xdata duty4)
            {
            CCAP3H=duty4;
            }
            /*------------Motor controll----------*/
            void Run_up (char speed1,speed2)
            {
            Speed_right(speed1);
            Speed_back_right(0xFF);
            Speed_left(speed2);
            Speed_back_left(0xFF);
            }
            void Motor_right (char speed2)
            {
            Speed_right(speed2);
            Speed_back_right(0xff);
            }
            void Motor_right_back(char pdata speed3)
            {
            Speed_right(0xFF);
            Speed_back_right(speed3);
            }
            void Motor_left(char speed4)
            {
            Speed_left(speed4);
            Speed_back_left(0xff);
            }
            void Motor_left_back(char pdata speed5)
            {
            Speed_left(0xff);
            Speed_back_left(speed5);
            }
            void Back (char xdata speed6)
            {
            Speed_right(0xFF);
            Speed_back_right(speed6);
            Speed_left(0xFF);
            Speed_back_left(speed6);
            }
            void Stop(void)
            {
            Speed_right(0xFF);
            Speed_back_right(0xFF);
            Speed_left(0xFF);
            Speed_back_left(0xff);
            }
            void Hold (void)
            {
            Speed_right(0x00);
            Speed_back_right(0x00);
            Speed_left(0x00);
            Speed_back_left(0x00);
            }
            void PWM_module(void)
            {
            CCAPM1=0x42; /* enable PWM mode */
            CCAPM2=0x42;
            CCAPM3=0x42;
            CCAPM4=0x42;
            CL=0x00; /* start counter at 0x00*/
            CR=ON; /* start PCA timer*/
            }
            void PWM_OFF (void)
            {
            CR=OFF; /*stop PCA timer*/
            }
            //go foward by following line
            void Follow_line (unsigned char speed_right,speed_left)
            {
            if(sensor2 && sensor3) { Run_up(speed_right,speed_left);}
            else
            {
            if((sensor2)&& !(sensor3)) { Motor_left(speed_right);Motor_right(0xff);}
            if(!(sensor2)&&(sensor3)){Motor_left(0xff) ;Motor_right(speed_left);}
            if ((!sensor2) && (!sensor3))
            {
            if(sensor1) { Motor_left(20);}
            if(sensor4) { Motor_right(20);}
            }
            if(!(sensor2) && !(sensor3) && !(sensor1) && !(sensor4)) {Stop();}
            }
            }
            // go forward using 4 sensor
            void Follow_line_by_sensor (unsigned char speed_right,speed_left)
            {
            if(sensor2 && sensor3) { Run_up(speed_right,speed_left);}
            else
            {
            if(sensor2 && !(sensor1)) {Motor_right(speed_right+20);Motor_left(0xff);}
            if(sensor2 && sensor1) {Motor_right(speed_right+10);Motor_left(0);}
            if(!(sensor2) && sensor1) {Motor_right(speed_right);Motor_left(0);}
            if(sensor3 && !(sensor4)) { Motor_right(0xff);Motor_left(speed_left+20);}
            if(sensor3 && sensor4) {Motor_right(0);Motor_left(speed_left+10);}
            if(!(sensor3) && sensor4){Motor_right(0);Motor_left(speed_left);}
            }
            }
            // quay robot

            void Quay_trai(void) // quay trai
            {
            Counter1_reset();
            Counter1_set();
            while(TL1<=60)
            {
            if(TL1<=30) {Speed_right(40); Speed_back_right(0xFF);Speed_left(0xff);Speed_back _left(100);}
            if(TL1>30) { Speed_right(70);Speed_back_right(0xFF);Speed_left( 0xff);Speed_back_left(140);}
            }
            while(!(sensor2) && !(sensor3))
            {Speed_right(80);Speed_back_right(0xff);Speed_left (0);Speed_back_left(0);}
            Stop();
            }
            void Quay_trai_without_encoder(void)
            {
            Motor_right(200);
            Motor_left(0xff);
            Delay(300);
            while(!(sensor2) | !(sensor3))
            {
            Motor_right(220);
            Speed_left(0);
            Speed_back_left(0);
            }
            }
            void Quay_phai(void) //quay phai
            {
            Counter0_reset();
            Counter0_set();
            while(TL0<=70)
            {
            if(TL0<=50) {Speed_right(0xff);Speed_back_right(120);Speed_lef t(40);Speed_back_left(0xff);}
            if(TL0>50) { Speed_right(0);Speed_back_right(0);Speed_left(60); Speed_back_left(0xff);}
            }
            while(!(sensor2) && !(sensor3))
            {
            Speed_right(0);
            Speed_back_right(0);
            Speed_left(60);
            Speed_back_left(0xFF);
            }
            }
            void Quay_phai_without_encoder(void)
            {
            Motor_right(0xff);
            Motor_left(220);
            Delay(500);
            while(!(sensor2) | !(sensor3))
            {
            Speed_right(0xff);
            Speed_back_right(0xff);
            Speed_left(230);
            Speed_back_left(0xff);
            }
            }
            void Start()
            {
            Motor_right(230);
            Motor_left(230);
            Delay(1000);
            }
            void Run_in_line(unsigned char data line)
            {
            vach_trang=0x00;
            Ext0_init();
            while(vach_trang<line)
            {
            if(vach_trang <line-1){ Follow_line(0,0);}
            else { Follow_line(90,90);}
            }
            Ext0_reset();
            }
            void Go_by_encoder(int pulse)
            {
            Counter0_reset();
            Counter1_reset();
            Both_counter();
            while((Encoder_right()<=pulse)&&(Encode r_left()<=pulse))
            {
            if(Encoder_left() >Encoder_right()) {Motor_left(50);Motor_right(0xff);}
            else
            {
            if(Encoder_left()< Encoder_right()) {Motor_left(0xff);Motor_right(50);}
            else {Motor_right(40);Motor_left(40);}
            }
            }
            }
            void Nha_bong()
            {
            CCAPM0=0x42;
            while(Hanh_trinh_tren)
            {
            DC_nang1=OFF;
            CCAP0H=200;
            }
            CCAPM0=0x00;
            DC_nang1=ON;DC_nang2=ON;
            DC_nha_bong=ON;Delay(5000);
            DC_nha_bong=OFF;
            }
            void Ha_tay()
            {
            while(Hanh_trinh_duoi)
            {
            DC_nang1=ON;
            DC_nang2=OFF;
            }
            DC_nang1=ON;//hold
            DC_nang2=ON;
            }
            /*------------------Main Program---------------------*/
            main(void)
            {
            PWM_module();
            select= P3_7 && 0x01;
            switch(select)
            {
            case 0 :goto Ghi_diem_xa;
            case 1:goto Ghi_diem_gan;
            }
            Ghi_diem_gan:
            DC_nha_bong=OFF;
            Go_by_encoder(150);
            Run_in_line(5);
            Stop();
            Delay(200);
            Quay_phai_without_encoder();
            Run_in_line(4);
            Quay_phai_without_encoder();
            Run_in_line(2);
            Stop();
            Delay(1000);
            Nha_bong();
            // Ha_tay();
            while(ON);
            Ghi_diem_xa:
            DC_nha_bong=OFF;
            Start();
            Run_in_line(9);
            Quay_trai_without_encoder();
            Run_in_line(4);
            Quay_trai_without_encoder();
            Run_in_line(2);
            Stop();
            Delay(1000);
            Nha_bong();
            while(1);//Mission completed
            }
            bạn có thể thấy ,cách lập trình cho con này không khác gì so với 89c
            bạn hoàn toàn có thể lấy code cho con 8051 dùng cho philip vãn ok
            datasheet của loại chíp này bạn có thể tìm hiểu tại trang
            http://datasheetarchive.com
            ( tu khoa tim kiem p89v51rd)
            SHARE KHO PHIM LỚN

            Comment


            • #7
              chuong trinh dich thi bac cu dung chuong trinh keil C cua loai 8051 ma dung thui
              khong biet dien dan cho gui file bao nhieu MB ko tui up luon len
              SHARE KHO PHIM LỚN

              Comment


              • #8
                Thật ra ,chip philip thuộc họ 8051 nên nó có
                đầy đủ tính năng như 8051 ,cho nên bạn chỉ cần học chắc dòng 89
                thì chuyển sang philip cũng không khác gì.
                Hiện nay loại chíp này thằng bạn tui nó có (10 con lận) ,nếu bác
                cần xin liên hệ với tui email: giaosucan2000@yahoo.com ,mà
                bác binhanh cũng chuyên nhập chip từ nước ngoài về mà .
                Mạch nạp của nó thiết kế rất đơn giản(chỉ vài chục khìn một cái mạch) ,nếu cần có thể giúp bạn làm cũng được .
                Rất cảm ơn bạn. Mình hiện nay đang bập bẹ con 8951 và làm được một ví dụ đơn giản rồi. Nhưng do nó ko có PWM, EEPROM.. năm sau mình làm robocon sẽ rất khó. Bởi vậy, mình đang có ý định nghiên cứu về vi điêu khiển họ 8051 của Philips. Nhưng bạn phải đảm bảo là có nguồn để mình mua chip đó. Vì năm sau thi robocon mà ko có thì chán lắm. Tiền thì ko quan trọng lắm, nhưng đừng có đắt quá là được.
                Đọc qua mã của bạn viết, mình cũng thấy nó chẳng khác gì 89C51. he he...
                Bạn có thể post lên mạch nạp,cách nạp để hưởng ứng phong trào vi điêu khiển Philips được ko? Mình thấy phần này là khó khăn, vì cách lập trình và hiểu về họ 89 thì mình cũng làm tương đối rồi.

                Comment


                • #9
                  vâng mạch nạp rất đơn giản để tui sẽ post sau
                  còn phần mềm nạp các bạn dùng phần mềm flash magic
                  SHARE KHO PHIM LỚN

                  Comment


                  • #10
                    phan mem nap tui co day
                    tiec qua ko up len duoc vi dung luong ko cho phep
                    bac nao can tai lieu ve philip lien he voi
                    tui gui cho
                    con nguon mua cac cau khoi lo ,vi thang ban tui no cung
                    co 10 con ,chua ke bac binhanh con nhap tu nuoc ngoai ve nua co ma
                    dung philip kinh te hon 8051 nhieu (mac du gia cua no dathon)
                    SHARE KHO PHIM LỚN

                    Comment


                    • #11
                      http://esacademy.com
                      trang này cung cấp phần mềm nạp co philip
                      mã nguồn ,mạch nạp .vv.v.v tha hồ xài
                      SHARE KHO PHIM LỚN

                      Comment


                      • #12
                        nếu bạn đăng ký tham dự robocon và thuộc các trường đại học phía nam thì đến trường DH BK tp để đăng ký nhận 89V51RD do phillip tài trợ ,lúc đầu sẽ được nhận 4 con ,sau đó trong wá trình làm mà thiếu thì có thể xin thêm 4 con nữa ,8 con là làm say lun rùi (các đội trường BK hầu như dùng con này hit ,miễn phí mà tội gì ,kekeke )

                        Comment


                        • #13
                          các bác cho tui bàn về con philip với tui cũng từng làm với con philip ròi

                          Comment


                          • #14
                            bác giaosucan post chương trình của người khác mà không xin bản quyền à.Dạo này bác giaosucan có làm với 51 nữa không

                            Comment


                            • #15
                              giaosucan cho em cái sơ đồ mạch nạp phillip nhé
                              Cty TNHH Cơ Điện tử Hiệp Phát.
                              ------------------------------------------
                              Trần Hoàng Giang
                              11-04-1985

                              Mobil: 0905 438 533

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X