Thông báo

Collapse
No announcement yet.

[Hiển thị] [Điều khiển] Dùng PIC16F877A thết kế đèn giao thông

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

  • [Hiển thị] [Điều khiển] Dùng PIC16F877A thết kế đèn giao thông

    Chào các anh chị và các bạn!
    Mình đang làm đề tài như sau: Dùng PIC16F877 điều khiển LED 7 đoạn, 6 LED đơn làm mạch điều khiển đèn giao thông. Thời gian cho đèn xanh là 20s, vàng 5s, đỏ 25s; dùng ngôn ngữ assembly. Mô phỏng trên Proteus.
    Mình ko rành lắm về PIC, mong các bạn giúp đỡ!
    Thanks!

  • #2
    trước hết , u post mạch + code mà u tập tò viết lên , để mọi ng góp í hoặc chữa giúp . Chứ u ko rành PIC , lại chưa thử làm thì sao bit khó . Chả lẽ u chỉ việc Ctrl C & Ctrl V là song đề tài của mình !!! khuyên u với PIC 16F877 thì nên viết = C cho nhanh , dùng CCS hoặc HTPIC đều được .

    Comment


    • #3
      cảm ơn bạn. Tất nhiên là phải phải làm rồi, nhưng có điều vừa làm vừa mò. hihi
      Mình viết được chương trình rồi, dùng ASM.Nhưng mình ko biết mô phỏng trên Ptotues.
      Mình xin gửi kèm file ảnh mà mình dựa vào nó để vẽ, nhưng mình ko nhìn rõ 4 con IC kết nối với lED là con IC gì!
      A/e nào nhòm hộ mình phát!
      Attached Files

      Comment


      • #4
        4 con đó là ULN2803.
        Nhưng nếu nhìn vào mạch thì chỉ có thể biểu thị dc 2 hướng, còn 2 hướng nữa đâu?

        Comment


        • #5
          2 hướng nào nữa! Ngã tứ thì nối 2 cái còn lại theo kiểu // là OK rồi mà! chả lẽ còn làm đủ cả 4
          Trần Đức Sơn

          tel:0934691385

          Comment


          • #6
            chính xác là nối song song ... dại chi mà làm cả 4 cho tốn chất xám. Nhưng trên hình vẽ thế kia thì .... lúc làm mạch thì sao đây!

            @chủ topic: với đề tài thế này mình đã làm với 8051 (đã post lên diễn đàn cả mạch và code) và AVR. Bạn có thể tìm lại trong các bài viết của mình.
            Last edited by gtvt45; 04-12-2008, 10:35. Lý do: sửa: cách >> các

            Comment


            • #7
              Nguyên văn bởi gtvt45 Xem bài viết
              4 con đó là ULN2803.
              Nhưng nếu nhìn vào mạch thì chỉ có thể biểu thị dc 2 hướng, còn 2 hướng nữa đâu?
              Ngắm kỹ lại mạch rồi mới được phán bạn nhé. Ngay trên mạch nó cũng ghi rõ đó là 4 con IC số chốt đệm tên 74HC573. ULN lấy đâu ra chân OE với LE. Mà kể cả không có tên IC thì nhìn trên mạch, chức năng và thứ tự chân thì cũng có thể phán được nó là IC 74573.

              Mạch sử dụng 573 để chốt dữ liệu ra LED. Có 4 chân từ PIC nối đến các chân LE của từng IC chính là dùng để điều khiển chốt dữ liệu. Ưu điểm của mạch là trong suốt quá trình chạy không cần quét Led, khi nào cân thay đổi dữ liệu LED nào thì xuất dữ liệu ra bus và chốt dữ liệu chân LE tương ứng. Cách này cũng hay nhưng hơi tốn chân PIC, có cách khác là dùng IC 74HC595 chốt dữ liệu kiểu ghi dịch, sẽ chỉ tốn 3 chân CLK-DATA-LAT để điều khiển.
              Ethernet-RS232, PIC Webserver, RFID Reader
              CallerID, Cảnh báo BTS, ...
              0988006696
              linhnc308@gmail.com
              http://linhnc308.blogspot.com

              Comment


              • #8
                dư chân PIC tè le mà , mắc chi phải tốn thêm 3 con 573 nữa ta ?Thêm linh kiện thì chạy dây cũng phế hơn . U ko bit scan led ?hay mún led sáng đẹp rõ !?

                Comment


                • #9
                  Nguyên văn bởi Zz_Bi_zZ Xem bài viết
                  dư chân PIC tè le mà , mắc chi phải tốn thêm 3 con 573 nữa ta ?Thêm linh kiện thì chạy dây cũng phế hơn . U ko bit scan led ?hay mún led sáng đẹp rõ !?
                  e có chương trình sau nhung khi kiểm tra lõi bằng ccs c thì có những thông báo sau undefined identifier portb . em không bít sửa ra sao xin mọi người giúp đở.
                  #include <16F877A.h>
                  #include <defs_16F877A.h>
                  #fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
                  #use delay(clock=10000000)
                  #use fast_io(b)
                  #define tocdo0 0 //toc do bang 0
                  #define td_macdinh 80 //toc do mac dinh
                  #define tocdo1 124 //1/5 toc do cuc dai
                  #define tocdo2 248 //2/5 toc do cuc dai
                  #define tocdo3 372 //3/5 toc do cuc dai
                  #define tocdo4 496 //4/5 toc do cuc dai
                  #define tocdo5 620 //toc do cuc dai
                  int16 duty1=0;
                  int16 duty2=0;
                  int8 bientocdo=0;
                  int1 bienthuan=0;
                  int1 biennghich=0;
                  void main() //bo PMW1 dk dong o quay thuan
                  { //bo PMW2 dk dco quay nghich
                  set_tris_b(0x0ff); //khoi tao port B la port nhap
                  setup_ccp1(CCP_PWM); //khoi tao bo PWM1
                  setup_ccp2(CCP_PWM); //khoi tao bo PWM2
                  setup_timer_2(T2_div_by_16,154,1); //tao chu ky xung 1ms
                  //(1/clock)*4*t2div*(period+1)
                  //(1/10e6)*4*16*(154+1)=1e-3=1ms

                  set_pwm1_duty(duty1); set_pwm2_duty(duty2);
                  //gia tri duty cua PWM duoc tinh theo cong thuc duty1*t2div/clock
                  //khoi tao duty=0 -> tat dong co
                  while(true)
                  {

                  if (!bit_test(portb,1)) //neu nhan phim FO : chay thuan
                  {
                  duty1=tocdo0;
                  duty2=tocdo0;
                  set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de
                  set_pwm2_duty(duty2); //tat dong co
                  delay_ms(1000); //delay 1s de giam quan tinh dong co
                  bienthuan=1;
                  biennghich=0;
                  goto next;
                  }
                  if (!bit_test(portb,2)) //neu nhan phim RE : chay nghich
                  {
                  duty1=tocdo0;
                  duty2=tocdo0;
                  set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de
                  set_pwm2_duty(duty2); //tat dong co
                  delay_ms(1000); //delay 1s de giam quan tinh dco
                  bienthuan=0;
                  biennghich=1;
                  goto next;
                  }
                  if (!bit_test(portb,3)) //nhan phim toc do 1
                  {
                  bientocdo=1;
                  goto next;
                  }
                  if (!bit_test(portb,4)) //nhan phim toc do 2
                  {
                  bientocdo=2;
                  goto next;
                  }
                  if (!bit_test(portb,5)) //nhan phim toc do 3
                  {
                  bientocdo=3;
                  goto next;
                  }
                  if (!bit_test(portb,6)) //nhan phim toc do 4
                  {
                  bientocdo=4;
                  goto next;
                  }
                  if (!bit_test(portb,7)) //nhan phim toc do 5

                  bientocdo=5;
                  next:
                  if (!bit_test(portb,0)) //neu nhan phim OFF
                  {
                  duty1=tocdo0;
                  duty2=tocdo0;
                  set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de
                  set_pwm2_duty(duty2); //tat dong co
                  bienthuan=0;
                  biennghich=0;
                  bientocdo=0; //xoa bien toc do
                  }
                  if (bienthuan)
                  {
                  duty2 = tocdo0;
                  switch (bientocdo)
                  {
                  case 1: duty1= tocdo1;
                  break;
                  case 2: duty1= tocdo2;
                  break;
                  case 3: duty1= tocdo3;
                  break;
                  case 4: duty1= tocdo4;
                  break;
                  case 5: duty1= tocdo5;
                  break;
                  default : duty1 = td_macdinh;
                  break;
                  }
                  set_pwm1_duty(duty1); //cho dco chay thuan
                  set_pwm2_duty(duty2);
                  }

                  if (biennghich)
                  {
                  duty1 = tocdo0;
                  switch (bientocdo)
                  {
                  case 1: duty2= tocdo1;
                  break;
                  case 2: duty2= tocdo2;
                  break;
                  case 3: duty2= tocdo3;
                  break;
                  case 4: duty2= tocdo4;
                  break;
                  case 5: duty2= tocdo5;
                  break;
                  default : duty2 = td_macdinh;
                  break;
                  }
                  set_pwm1_duty(duty1); //cho dco chay nghich
                  set_pwm2_duty(duty2);
                  }
                  }
                  }

                  #include <defs_16F877A.h> dòng này thì không có trong thư viện làm sao để có được, cam ơn . chờ thư trả lời, thân

                  Comment


                  • #10
                    Nguyên văn bởi hoangquan_d Xem bài viết
                    e có chương trình sau nhung khi kiểm tra lõi bằng ccs c thì có những thông báo sau undefined identifier portb . em không bít sửa ra sao xin mọi người giúp đở.
                    #include <defs_16F877A.h> dòng này thì không có trong thư viện làm sao để có được, cam ơn . chờ thư trả lời, thân
                    xóa dòng #include <defs_16F877A.h> đi , chỗ nào báo lỗi undefined identifier

                    vd : lỗi undefined identifier portb , vô C:\Program Files\PICC\Devices\16F877A.h (mở 16F877A.h = notepad ) , thêm vào #byte PORTB =0x06 . Đây là cách mà lần sau ta khỏi phải khai báo lại PORTB , nếu ở 1 chương trình khác...

                    Còn cách chữa cháy là thêm vô chương trình dòng #byte PORTB =0x06

                    mấy cái địa chỉ này , lật datasheet ra , chỗ I/O pins có hết mà

                    Comment


                    • #11
                      Nguyên văn bởi Zz_Bi_zZ Xem bài viết
                      xóa dòng #include <defs_16F877A.h> đi , chỗ nào báo lỗi undefined identifier

                      vd : lỗi undefined identifier portb , vô C:\Program Files\PICC\Devices\16F877A.h (mở 16F877A.h = notepad ) , thêm vào #byte PORTB =0x06 . Đây là cách mà lần sau ta khỏi phải khai báo lại PORTB , nếu ở 1 chương trình khác...

                      Còn cách chữa cháy là thêm vô chương trình dòng #byte PORTB =0x06

                      mấy cái địa chỉ này , lật datasheet ra , chỗ I/O pins có hết mà
                      cảm ơn bác , cho e hỏi thêm là em đang làm mạch điều khiển dộng cơ bước thì nên dùng mạch dệm cầu chử H hay dùng con uln2803 / cái nào tốt hơn

                      Comment


                      • #12
                        Nguyên văn bởi hoangquan_d Xem bài viết
                        cảm ơn bác , cho e hỏi thêm là em đang làm mạch điều khiển dộng cơ bước thì nên dùng mạch dệm cầu chử H hay dùng con uln2803 / cái nào tốt hơn
                        nếu công suất động cơ của u ko lớn (dòng tiêu thụ nhỏ) thì dùng L298A là đc . (L298A cấp dòng tới 4A , nhưng thực tế thì ko tới đâu nhá) .

                        Comment


                        • #13
                          Bạn Ngọc Lan chắc là K52 BKHN rùi. làm đè tài nhóm nào thế? làm đc nhiều chưa? Mình cũng đang tò mò lên đây. Hi vọng đc các sư huynh chỉ giáo!!!!

                          Comment


                          • #14
                            Nguyên văn bởi ZzNgocLanzZ Xem bài viết
                            Chào các anh chị và các bạn!
                            Mình đang làm đề tài như sau: Dùng PIC16F877 điều khiển LED 7 đoạn, 6 LED đơn làm mạch điều khiển đèn giao thông. Thời gian cho đèn xanh là 20s, vàng 5s, đỏ 25s; dùng ngôn ngữ assembly. Mô phỏng trên Proteus.
                            Mình ko rành lắm về PIC, mong các bạn giúp đỡ!
                            Thanks!
                            chắc ku này cúp tiếc liên tục nên mới hỏi chuối thế này, đây là bt cơ bản mờ. ráng đi họ đều nhe em
                            |

                            Comment


                            • #15
                              ban pot so do nguyen ly len di

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X