Thông báo

Collapse
No announcement yet.

Công cụ học tập và phát triển cho PIC - Hoàn toàn miện phí

Collapse
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Hôm nay rảnh rồi ngồi pót lên một mạch ứng dụng dùng PIC mà ngày trước tôi có thiết kế cho một đội robocon của BKHN thử nghiệm. Chức năng mạch như sau:

    - CPU dùng PIC 40 chân PDIP
    - Hiển thị LCD 16x2
    - 2 kênh điều khiển động cơ kết hợp FET 540N + Relay cho phép điều khiển PWM và đảo chiều động cơ.
    - Bàn phím sử dụng kiểu đọc phím qua ADC
    - Các ngõ vào cho cảm biến quang và encoder
    - Nguồn ổn áp dùng 7805 cấp cho VDK

    (Trên mạch còn gì nữa thì không nhớ hết vì chưa mở ra xem lại.)
    File đính kèm gồm file mạch in ORCAD hoàn chỉnh, chỉ việc đi đặt mạch về làm là OK. Mã nguồn đi kem demo các tính năng của mạch.
    Mạch và code chỉ có tính chất tham khảo cho các bạn muốn học pic và phát triển ứng dụng. Mọi trao đổi xin gửi về email linhnc308@gmail.com
    Attached Files
    Ethernet-RS232, PIC Webserver, RFID Reader
    CallerID, Cảnh báo BTS, ...
    0988006696
    linhnc308@gmail.com
    http://linhnc308.blogspot.com

    Comment


    • Anh Linh cho em hỏi . Em đang làm bài tập lớn về điều khiển động cơ hẹn giờ .Em xài pic 16f877a . Em chỉ điều khiển hen giờ thôi hok diều khiển tốc độ .

      Mạch của em gồm :

      - 1 bàn phim 16 nút để chỉnh đồng 1 đồng hồ .

      - 6 led7 để hiện giờ phút giây

      - 1 động cơ 1 chiều .

      Cho em hỏi là động cơ 1 chiều mình cho ra bằng 2 chân nào . Nối trực tiếp ra hay phải qua gì nữa

      6 Led7 có cần phải nói qua Ds1307 hok hay nói trực tiếp vào PIC luôn .

      Thầy em nói là phải gắn giờ khởi động và tắt động cơ vào 1 vùng nhớ . Sau đó so sánh dzới đồng hồ . Nói thì em hỉu nhưng em hok viết ra 1 chương trình được . Nhờ anh hướng dẫn .

      Comment


      • Em đã down 2 cái mạch nạp của anh rồi nhưng khi mở lên thì thấy proteus hiện thông báo " File : " tên thư mục mà em chứa file " is corrupt or not an isis schematic file" . Vậy là sao anh .

        Em cũng đã download CCS về rồi nhưng file khởi động tên là pcw.exe . Em đọc file hướng dẫn CCS của anh rồi thấy hok giống . Hok biết là do bản em mới hay là tại download lộn phần mềm nữa . àh mà mỗi lần em click vào pcw.exe thì nó hiện thông báo " IDE Installation incomplete . The IDEUTILS must be downloaded anh installed from the CCS web site "

        rồi mới dzo chương trình . Em đọc xong tính dzo site của CCS nhưng chưa dám . ( tại xài đồ ***** mà ^^ )
        Last edited by chienbinhgiu; 26-06-2009, 23:50.

        Comment


        • Nguyên văn bởi chienbinhgiu Xem bài viết
          Em đã down 2 cái mạch nạp của anh rồi nhưng khi mở lên thì thấy proteus hiện thông báo " File : " tên thư mục mà em chứa file " is corrupt or not an isis schematic file" . Vậy là sao anh .

          Em cũng đã download CCS về rồi nhưng file khởi động tên là pcw.exe . Em đọc file hướng dẫn CCS của anh rồi thấy hok giống . Hok biết là do bản em mới hay là tại download lộn phần mềm nữa . àh mà mỗi lần em click vào pcw.exe thì nó hiện thông báo " IDE Installation incomplete . The IDEUTILS must be downloaded anh installed from the CCS web site "

          rồi mới dzo chương trình . Em đọc xong tính dzo site của CCS nhưng chưa dám . ( tại xài đồ ***** mà ^^ )
          Cái này đâu có mở bằng proteus đâu
          Tôi thích màu đen nên tôi đã chọn CAMRY 3.5Q

          Comment


          • Bạn linhnc308 sao ko post tiếp nửa nhỉ ? Mình đang chờ phần mềm CCS-C của bạn để hoàn tất mạch nạp.
            Người nhỏ bé.

            Comment


            • Nguyên văn bởi chienbinhgiu Xem bài viết
              Em đã down 2 cái mạch nạp của anh rồi nhưng khi mở lên thì thấy proteus hiện thông báo " File : " tên thư mục mà em chứa file " is corrupt or not an isis schematic file" . Vậy là sao anh .

              Em cũng đã download CCS về rồi nhưng file khởi động tên là pcw.exe . Em đọc file hướng dẫn CCS của anh rồi thấy hok giống . Hok biết là do bản em mới hay là tại download lộn phần mềm nữa . àh mà mỗi lần em click vào pcw.exe thì nó hiện thông báo " IDE Installation incomplete . The IDEUTILS must be downloaded anh installed from the CCS web site "

              rồi mới dzo chương trình . Em đọc xong tính dzo site của CCS nhưng chưa dám . ( tại xài đồ ***** mà ^^ )
              CÁi đó mở bằng orcad đó.Không mở bằng proteus được đâu.

              Comment


              • Ha cám ơn cám ơn . Còn phần câu hỏi về CCs có ai biết hok

                "Em cũng đã download CCS về rồi nhưng file khởi động tên là pcw.exe . Em đọc file hướng dẫn CCS của anh rồi thấy hok giống . Hok biết là do bản em mới hay là tại download lộn phần mềm nữa . àh mà mỗi lần em click vào pcw.exe thì nó hiện thông báo " IDE Installation incomplete . The IDEUTILS must be downloaded anh installed from the CCS web site "

                rồi mới dzo chương trình"

                Comment


                • Nguyên văn bởi linhnc308 Xem bài viết
                  Em xem lại đi, nó tương đương đấy chứ.

                  1/0.512 ~= 1.96. Trong code vì anh không muốn dùng phép chia nên chuyển qua phép nhân (với VDK, phép chia tốn nhiều clock hơn đó)
                  Ah, thì ra là vậy. Bây giờ thì em đã hiểu. Cảm ơn anh Linh nhiều.

                  Comment


                  • Trả lời các câu hỏi
                    1. Về mạch nạp, ở pót đầu tiên đã gửi kèm đủ sơ đồ mạch nạp, file mạch in và phần mềm dùng để nạp cùng với file hướng dẫn. File mạch in mở bằng phần mềm ORCAD

                    2. Về câu hỏi của chienbinhgiu, file hướng dẫn CCS của anh làm là cho phiên bản 3.xxx khá là cũ vì anh làm lâu rồi, bản mới em đang có là bản 4.xxx, giao diện có khác với bản 3 nhưng phần Wizard thì vẫn giống.
                    Em cài phần mềm CCS nhưng chưa cài IDEUtil, em tìm lại trong gói cài đặt hoặc lên mạng tải lại phần đó về cài là được.
                    Ethernet-RS232, PIC Webserver, RFID Reader
                    CallerID, Cảnh báo BTS, ...
                    0988006696
                    linhnc308@gmail.com
                    http://linhnc308.blogspot.com

                    Comment


                    • Nguyên văn bởi chienbinhgiu Xem bài viết
                      Anh Linh cho em hỏi . Em đang làm bài tập lớn về điều khiển động cơ hẹn giờ .Em xài pic 16f877a . Em chỉ điều khiển hen giờ thôi hok diều khiển tốc độ .

                      Mạch của em gồm :

                      - 1 bàn phim 16 nút để chỉnh đồng 1 đồng hồ .

                      - 6 led7 để hiện giờ phút giây

                      - 1 động cơ 1 chiều .

                      Cho em hỏi là động cơ 1 chiều mình cho ra bằng 2 chân nào . Nối trực tiếp ra hay phải qua gì nữa

                      6 Led7 có cần phải nói qua Ds1307 hok hay nói trực tiếp vào PIC luôn .

                      Thầy em nói là phải gắn giờ khởi động và tắt động cơ vào 1 vùng nhớ . Sau đó so sánh dzới đồng hồ . Nói thì em hỉu nhưng em hok viết ra 1 chương trình được . Nhờ anh hướng dẫn .
                      http://dientuvietnam.net/forums/showthread.php?t=14031

                      Em vào link trên tải mạch PICRobocon, em có thể tham khảo thiết kế điều khiển động cơ DC như trong hình. Như đề bài của em chỉ cần điều khiển động cơ tắt mở thì em có thể dùng một Rơ le cho đơn giản. Một chân của động cơ nối thẳng GND của nguồn cấp cho động cơ, chân kia nối đến tiếp điểm thường hở của rơ le. Khi cần mở động cơ, chỉ cần cấp tín hiệu điện vào cuộn dây rơle là được.

                      6Led 7 em phải nối trực tiếp tới vi điều khiển chứ, con ds1307 là con tạo đồng hồ thời gian thực, k thể nối với led7 được. Em vào link bên dưới tải một số tài liệu lập trình về pic.
                      http://linhnc308.googlepages.com/myprojects
                      Ethernet-RS232, PIC Webserver, RFID Reader
                      CallerID, Cảnh báo BTS, ...
                      0988006696
                      linhnc308@gmail.com
                      http://linhnc308.blogspot.com

                      Comment


                      • Em kiếm không ra . Kiểu này chắc phải cài lại từ đầu . Cái đó là gì vậy , nặng hok , níu được thì anh gửi link cho em được hok . Giờ em còn chưa có Orcad để đọc mấy cái file của anh nữa . T_T chán quá .

                        Comment


                        • Code:
                          //*****************************************************************************
                          // Author  : nhh
                          // Date    : 03/04/06
                          // Hardware: PIC16F877A
                          //*****************************************************************************
                          #include <16F877A.h>
                          #fuses NOWDT,PUT,XT,NOPROTECT
                          #use delay(clock=4000000)
                          #use fast_io(b)
                          #use fast_io(c)
                          #byte portb = 0x06
                          #byte portc = 0x07
                          #bit RB0 = 0x06.0
                          #bit RB1 = 0x06.1
                          #bit RB2 = 0x06.2
                          #bit RB3 = 0x06.3
                          #bit RB4 = 0x06.4
                          #bit RB5 = 0x06.5
                          #bit RB6 = 0x06.6
                          #bit RB7 = 0x06.7
                          #bit RBIF=intcon.0 //dinh nghia co ngat RB
                          #bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB
                          int a;
                          const unsigned char dig[]={0b00111111,0b00000110, 0b01011011,0b01001111,\
                          0b01100110,0b01101101,0b01111101,0b00000111,0b01111111,0b01101111,0b01110111,\
                          0b01111100,0b00111001,0b01011110,0b11111001,0b11110001};
                                            // ma hoa digital duoi dang mang
                          // Chuong trinh ngat
                          #int_RB
                          void ngat_RB()
                          {
                          if((RBIF)&&(RBIE))
                             {
                                   {
                                   if(RB4&&RB0)
                                   a=dig[0];
                                   }
                                   {
                                   if(RB4&&RB1)
                                   a=dig[4];
                                   }
                                   {
                                   if(RB4&&RB2)
                                   a=dig[8];
                                   }
                                   {
                                   if(RB4&&RB3)
                                   a=dig[12];
                                   }
                          //.......
                                   {
                                   if(RB5&&RB0)
                                   a=dig[1];
                                   }
                                   {
                                   if(RB5&&RB1)
                                   a=dig[5];
                                   }
                                   {
                                   if(RB5&&RB2)
                                   a=dig[9];
                                   }
                                   {
                                   if(RB5&&RB3)
                                   a=dig[13];
                                   }
                          //........
                                    {
                                   if(RB6&&RB0)
                                   a=dig[2];
                                   }
                                   {
                                   if(RB6&&RB1)
                                   a=dig[6];
                                   }
                                   {
                                   if(RB6&&RB2)
                                   a=dig[10];
                                   }
                                   {
                                   if(RB6&&RB3)
                                   a=dig[14];
                                   }
                          //........
                                    {
                                   if(RB7&&RB0)
                                   a=dig[3];
                                   }
                                   {
                                   if(RB7&&RB1)
                                   a=dig[7];
                                   }
                                   {
                                   if(RB7&&RB2)
                                   a=dig[11];
                                   }
                                   {
                                   if(RB7&&RB3)
                                   a=dig[15];
                                   }
                             RBIF=0; //Xoa co ngat RB
                             }
                          }
                          // Chuong trinh chinh
                          main()
                          {
                          set_tris_b(0b11110000);
                          set_tris_c(0);
                          enable_interrupts(global);
                          enable_interrupts(int_RB);
                          ext_int_edge(H_to_L);
                          portb=0;
                          portc=0;
                          while(true)
                             {
                             portb=1;  
                             portb=2;
                             portb=4;
                             portb=8;
                             portc=a;
                             }
                          }

                          Đây là bài Giãi mã bàn phím của anh Nờ hắt hắt (nhh) bên picvietnam.com . Đúng ngay bài em cần . Có điều của em là 6 led và là đồng hồ .

                          Em đó điều muốn hỏi là :

                          Code:
                          const unsigned char digital[]={0b00000110, 0b01011011, 0b01001111, 0b01100110,\
                          						0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111};
                                            // ma hoa digital duoi dang mang


                          Code:
                          const unsigned char dig[]={0b00111111,0b00000110, 0b01011011,0b01001111,\
                          0b01100110,0b01101101,0b01111101,0b00000111,0b01111111,0b01101111,0b01110111,\
                          0b01111100,0b00111001,0b01011110,0b11111001,0b11110001};
                          Tại sao có lúc dùng cái trên và có lúc dùng cái dưới vậy .

                          Code:
                          while(true)
                             {
                             portb=1;
                             portb=2;
                             portb=4;
                             portb=8;
                             portc=a;
                             }
                          cái này nghĩa là sao mấy anh .

                          Comment


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

                            Tại sao có lúc dùng cái trên và có lúc dùng cái dưới vậy.
                            Cái trên hay cái dưới thì ở bạn chứ bạn để ý là: portc=a mà a=dig[..] or digital[..] => các trạng thái mà cổng portc nhận đc sẽ là giá trị của biến a vậy bạn mong muốn các chân của portc có trạng thái như thế nào thì bạn lập dig hoặc digital như thế.
                            Còn thằng này
                            Code:
                            while(true)
                               {
                               portb=1;
                               portb=2;
                               portb=4;
                               portb=8;
                               portc=a;
                               }
                            thì ko biết bạn đã đọc về ngắt RB chưa. Nói một cách lan man thì nó hoạt động thế này:
                            - Dùng ngắt RB ngắt ở sườn âm do:
                            Code:
                            ext_int_edge(H_to_L)
                            .
                            - Portb sẽ liên tục nhận các giá trị 1=00000001b, 2=00000010b, 4=00000100b, 8=00001000b (khi đó thì chỉ một chân của portb nhận mức logic 1).
                            - Giả sử khi portb=1 thì ta bấm phím khi đó một trong các chân từ RB3 đến RB7 sẽ được đặt lên mức cao và khi ta nhả phím ra thì mức logic của chân đó lại đc chuyển xuống mức logic 0 => xảy ra hiện tượng ngắt, khi đó trong CT ta sẽ xử lý ngắt đó và xác định đc phím đc bấm.
                            Nhớ quá khứ buồn rơi nước mắt.
                            Nhìn tương lai lạnh buốt sống lưng.
                            Y!M: nhamdtk4.

                            Comment


                            • Hỏi về DS1337

                              Trong đoạn code viết cho ds1337 của anh linhnc có đoạn:
                              ampm = bit_test(hour,5); // test AM PM
                              if(ampm == 0) {RA4 = 0;RA5=1;} // AM
                              if(ampm == 1) {RA4 = 1;RA5=0;} // PM
                              Anh linhnc có thể cho em hỏi đoạn lệnh {RA4 = 0;RA5=1;}, {RA4 = 1;RA5=0;} có tác dụng gì không ạ?

                              Comment


                              • Sao cái PCW của em hok xuất file hex được vậy

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X