Thông báo

Collapse
No announcement yet.

Giao Tiếp Máy Tính Với PIC6F877A

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

  • Giao Tiếp Máy Tính Với PIC6F877A

    Chào các huynh.Đệ hiện đang làm Đồ án và có phần giao tiếp máy tính,dùng PIC6F877A.Đệ dùng chương trình VB gửi kí tự xuống cho VĐK PIC và cho xuất giá trị nhận được ra portd (portd Đệ nối với các LED đơn).Nhưng Đệ gửi các ký tự chữ xuống thì kết quả xuất như nhau,ký tự số thì kết quả như nhau.
    -Khi Đệ gửi các kí hiệu chữ như a,b,m,h.... thì các chân D7(MSB),D6,D5,D4,D3 ở mức cao ,các chân còn lại ở mức thấp và giá trị trả về trên VB là ÿ
    -Khi Đệ gửi các kí hiệu số 1,2,3,4.... thì chân D7 sáng,các chân còn lại ở mức thấp và giá trị trả về trên VB là þ
    Như Đệ biết thì VB gửi xuống là gửi mã ASCII.Vậy thì mình gửi các ký tự khác nhau thì kết quả xuất LED phải khác nhau.Nếu Đệ gửi giá trị cần yêu cầu xuống,ví dụ Đệ gửi từ VB xuống giá trị 300 thì làm sao để PIC cũng nhận được giá trị là 300 vậy các huynh?Đệ thực sự bị vướng ở chỗ này.Đệ up đoạn code chương trình VB và code CCS nhờ các huynh xem giúp và hướng giùm Đệ hướng giải quyết để Đệ có thể hoàn thành Đồ Án thật tốt.Đệ cám ơn các huynh nhiều.
    Code CCS C:
    #include <16F877a.h>
    #fuses HS,NOWDT,NOPROTECT,NOLVP
    #use delay(clock=20000000)
    #use rs232(baud=4800, xmit=PIN_C6, rcv=PIN_C7)
    #include <def_877a.h>
    unsigned char data;
    #INT_RDA
    void data_receive(void)
    {
    delay_us(10);
    data = getc();
    }
    void main()
    {
    set_tris_d(0);
    ENABLE_INTERRUPTS(GLOBAL);
    ENABLE_INTERRUPTS(INT_RDA);
    while(true)
    {
    portd=data;
    putc(data);
    }
    }
    (Đệ ko bik cách chèn code như mấy huynh làm trong diễn đàn nên cứ up lên,mong MOD thông cảm)
    Attached Files

  • #2
    Bạn đang có nhiều vấn đề cần giải quyết !
    Thứ nhất :
    Trước khi test RS232 trên VĐK bạn cần test xem con Max232 đã hoạt động đúng chưa? Bằng cách nối tắt 2 chân 11,12 (nếu bạn dùng 2 chân 13,14 của Max để kết nối máy tính) rồi truyền ký tự bất kỳ từ máy tính xem nó có nhận đúng không, sau đó thì mới ghép Max232 với VĐK
    Thứ hai:
    Trong ngắt nhận dữ liệu bạn để delay_us(10) là không ổn,trong ngắt bạn cần nhận dữ liệu ngay
    Thứ ba:
    Gủi 300 từ VB và để PIC nhận ra 300 thì bạn cần đọc hàm atoi trong help của CCS C

    Comment


    • #3
      Cám ơn huynh đã cho đệ hướng.Mà huynh ơi,đoạn Code CCS C đệ sửa lại như sau
      #include <16F877a.h>
      #fuses HS,NOWDT,NOPROTECT,NOLVP
      #use delay(clock=20000000)
      #use rs232(baud=4800, xmit=PIN_C6, rcv=PIN_C7)
      #include <def_877a.h>
      #INT_RDA
      void data_receive(void)
      {
      portd=getc();
      }
      void main()
      {
      set_tris_d(0);
      ENABLE_INTERRUPTS(GLOBAL);
      ENABLE_INTERRUPTS(INT_RDA);
      while(true)
      {
      putc(portd);
      delay_ms(2000);
      }
      }
      Đệ gửi nhạn giá trị qua thẳng portd lun,ko wa biến data nữa thì thấy có khả wan hơn.Đệ gửi xuống chữ a(mã ASCII 61H) thì kết quả theo led là 60H và nhận về "`",b(62H) kết quả vẫn là 60H và vẫn nhân về "`" nhưng chữ c(63H) thì kết quả led xuất đúng và nhận đúng chữ c,chữ d vẫn đúng.đệ thử gửi tiếp số thì số 1,2 kết quả xuất led và nhận sai.Đệ nghi ngờ 2 chân D1 và Do nên lấy đồng hồ ra đo thì mức Vôn chỉ được 2 V,chính vì thế nên kết quả sai.Huynh góp ý giùm đệ với được không?

      Comment


      • #4
        Tức là bạn đã test được con Max232 rồi đúng không ?
        Lệnh putc(portd) trong hàm While(true) có trả lại đúng ký tự bạn gửi không ?
        Tốt nhất là bạn đừng xuất ra port nữa, mà hãy xuất ra LCD (ko có LCD giống như bị mù vậy! )

        Comment


        • #5
          việc gửi nhận như đệ nói là chương trình VB đã gửi xuống đc cho PIC và PIC cũng trả về được giá trị cho máy tính.Nhưng 2 chân D0 và D1 mức Vôn thấp chỉ là 2 Vôn khi máy tính gửi về giá trị mà ứng với D0=1 hay D1=1 nên khi trả lại máy tính thì chỉ hiểu là mức 0.đệ gửi chữ a(61H) hay b(62h) thì máy trả về chỉ là `(60H) nhưng khi gửi chữ c (63H) thì nhận đúng c hay d(64H) thì vẫn nhận đúng.
          Đệ đang muốn kiểm tra phần giao tiếp vì đệ làm về điều khiển động cơ giao tiếp máy tính,mình gửi vận tốc xuống để ra giá trị encoder cần,sau đó hiệu chỉnh và xuất ra duty cho động cơ chạy.
          Thực sự đệ mới chuyển sang xài PIC được 2 3 tuần nay nên còn nhiều chỗ vướng mắc.Mong huynh và các anh trên diễn đàn giúp đỡ.Còn về xuất LCD để đệ wa bạn lấy cái mạch về xuất thử.mà huynh có code về xuất cho LCD không,send cho đệ với vì đệ mới tập tành viết CCS à.Thanks huynh rất nhiều.

          Comment


          • #6
            Trước hết để biết chính xác bạn đã làm đúng chưa thì hãy đừng dùng vội với VB, vì biết đâu ngay chính cái code VB của bạn cũng có vấn đề. Bạn nên dùng chương trình này nhé: http://dientuvietnam.net/forums/showthread.php?t=5077

            Lật lại với vấn đề này, mình thì chưa dùng CCS nhưng đã dùng qua soft của hãng Mikro và chạy rất ngon lành với nhiều project.

            Góp ý 1 chút.
            |

            Comment


            • #7
              Nguyên văn bởi RaulBlanco Xem bài viết
              việc gửi nhận như đệ nói là chương trình VB đã gửi xuống đc cho PIC và PIC cũng trả về được giá trị cho máy tính.Nhưng 2 chân D0 và D1 mức Vôn thấp chỉ là 2 Vôn khi máy tính gửi về giá trị mà ứng với D0=1 hay D1=1 nên khi trả lại máy tính thì chỉ hiểu là mức 0.đệ gửi chữ a(61H) hay b(62h) thì máy trả về chỉ là `(60H) nhưng khi gửi chữ c (63H) thì nhận đúng c hay d(64H) thì vẫn nhận đúng.
              Đệ đang muốn kiểm tra phần giao tiếp vì đệ làm về điều khiển động cơ giao tiếp máy tính,mình gửi vận tốc xuống để ra giá trị encoder cần,sau đó hiệu chỉnh và xuất ra duty cho động cơ chạy.
              Thực sự đệ mới chuyển sang xài PIC được 2 3 tuần nay nên còn nhiều chỗ vướng mắc.Mong huynh và các anh trên diễn đàn giúp đỡ.Còn về xuất LCD để đệ wa bạn lấy cái mạch về xuất thử.mà huynh có code về xuất cho LCD không,send cho đệ với vì đệ mới tập tành viết CCS à.Thanks huynh rất nhiều.
              Vào đây để down Terminal để test nhé ! Vì không chắc chương trình VB của bạn đã chuẩn
              http://www.dientuvietnam.net/forums/...ead.php?t=5077

              Để viết cho LCD khi sử dụng CCS C là rất đơn giản ! Bạn hãy vào trong foder Driver và đọc cái LCD.C

              Comment


              • #8
                Em cám ơn 2 anh Brilliant và anh david.Quả thật chương trình VB của em có vấn để thật rồi,em dùng terinal như các anh nói thì kết quả xuất ra thật chính xác.nhưng em vẫn thắc mắc về chương trình VB của em,em không biết phải sửa lại sao đây cho chính xác.Mong các anh tham khảo và góp ý giúp em
                Private Sub cmdExit_Click()
                MSComm1.PortOpen = False
                End
                End Sub
                Private Sub cmdSend_Click()
                Dim out As String
                out = txtTransmit.Text
                MSComm1.Output = out
                End Sub

                Private Sub Form_Load()
                MSComm1.CommPort = 3
                MSComm1.Settings = "4800,n,8,1"
                MSComm1.PortOpen = True

                MSComm1.RThreshold = 1
                End Sub

                Private Sub MSComm1_OnComm()
                If (MSComm1.CommEvent = comEvReceive) Then
                txtReceive.Text = txtReceive.Text + MSComm1.Input
                End If
                End Sub

                Comment


                • #9
                  Em đang làm về Đếm và phân loại SP trắng và đen Giao tiếp PIC 16F877A voi PC sử dụng VB. Em đã truyền được dữ liệu lên PC nhưng hiển thị không đúng ,xin mấy huynh chỉ em hướng giải quyết. Đây là file gồm Chương trình , mô phỏng bàng proteus và VB. http://www.mediafire.com/?195d8sza5tcjubg
                  Huynh nào rảnh xem và chỉ em hướng giải quyết Mail của em : vuhoan_vu@yahoo.com
                  Last edited by diode1; 23-07-2011, 23:34.

                  Comment


                  • #10
                    mấy pro ơi cho mình hỏi..mình muốn giao tiếp píc6f877a mà qua ft232 để giao tiếp cổng usb thì cũng chỉ cần khai báo
                    #use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7, bits=9) như giao tiếp rs232 qua mx232 ak..

                    Comment


                    • #11
                      Nguyên văn bởi vanhieugn Xem bài viết
                      mấy pro ơi cho mình hỏi..mình muốn giao tiếp píc6f877a mà qua ft232 để giao tiếp cổng usb thì cũng chỉ cần khai báo
                      #use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7, bits=9) như giao tiếp rs232 qua mx232 ak..
                      đúng vậy bạn chỉ cần khai báo cổng RS232 thôi vì pic 16f877a ko có cổng USB, nếu bạn muốn sử dụng cổng USB thì bạn phải mua 1 sợi dây chuyển đổi cổng RS232 thành USB ( lúc này trên pc bạn sử dụng 1 cổng COM ảo ) và giao tiếp bình thường.

                      P/s: cần driver cho sợi dây này.
                      Last edited by thelaxong; 12-04-2012, 16:08.

                      Comment


                      • #12
                        bạn thelaxong oi..bạn có thể share cho mình mạch mô phỏng và code ko..thanks

                        Comment


                        • #13
                          chp mình hỏi là mình giao tiếp PIC với máy tính qua RS232, giao diện PC bằng VB , khi pic gửi tín hiệu, ví dụ xuất ra giá trị 1 port B1 chẳng hạn, thì trong CCS mình dùng hàm gì, và để trên máy tính nhận được giá trị 1, mình dùng hàm gì?

                          Comment


                          • #14
                            dạ mấy a cho e hỏi,chúng ta giao tiếp nhu thế nào ạ.e nghe mơ hồ quá.làm xong mạch,nối dây ok hết ùi.mà ko bít làm sao gửi tín hiệu từ máy xún vdk.gửi bằng cách nào,như thế nào,và bằng cái gì.mấy a chỉ giáo giúp e với

                            Comment


                            • #15
                              đầu tiên ban dùng terminal để test
                              gửi nhận ngon lành rồi thì mới tính đến việc viêts giao diện giao tiếp

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X