Thông báo

Collapse
No announcement yet.

giúp mình giao tiếp Pic 16f877a với PC, điều khiển motor.

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

  • giúp mình giao tiếp Pic 16f877a với PC, điều khiển motor.

    Mình đang làm project về giao tiếp máy tính và mình chọn pic 16f877a để thực hiện.
    Modul gồm có píc6f877a, max232, 1 mạch công suất cho động cơ.
    Ai có kinh nghiệm vụ này rồi giúp mình với. Mình cần 1 cái code mẫu (viết bằng MikroC)
    Nhận dử liệu từ máy tính rồi điều khiển motor qua 2 chân điều xung.
    Ai làm rồi giúp mình với

  • #2
    cái này chưa thử ( vừa viết ) nhưng chắc là chạy . Ở đây ví dụ 1 PWM ... với 2 PWM cách làm tương tự ( có thể khai báo mảng để lưu trữ các giá trị Duty )

    unsigned char uart_rd;

    void main() {
    CMCON=0x07;
    ADCON1=0x07;

    UART1_Init(9600); // Initialize UART module at 9600 bps
    PWM1_Init(5000); // Initialize PWM1 module at 5KHz
    PWM1_Set_Duty(0);
    PWM1_Start();

    Delay_ms(100); // Wait for UART module to stabilize


    while (1) { // Endless loop
    if (UART1_Data_Ready()) { // If data is received,
    uart_rd = UART1_Read(); // read the received data,
    PWM1_Set_Duty(uart_rd);
    }
    }
    }
    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

    Comment


    • #3
      Cám ơn anh QueDuong nhiều.

      Anh cho em hỏi 2 cái thắc mắc ni với:
      CMCON=0x07;
      ADCON1=0x07;
      ADCON1 = 0x07; có phải là set digital cho TẤT CẢ các port ko anh?

      còn giá trị 0x07 trong 2 dòng lệnh trên em có thể thay thế ko anh? và hoạt động của nó như thế nào vậy anh?

      if (UART1_Data_Ready()) { // If data is received,
      uart_rd = UART1_Read(); // read the received data,
      PWM1_Set_Duty(uart_rd);
      biến uart_rd khi nhận dữ liệu có phải kiểu CHAR ko anh? Nếu là kiểu Char (ký tự, giả sử như em truyền đến vdk ký tự "A") thì khi dùng lệnh
      PWM1_Set_Duty(uart_rd);
      VDK sẽ hiểu như thế nào để chạy moto cho đúng tốc độ vậy anh?
      Last edited by vtking; 30-04-2013, 13:27.

      Comment


      • #4
        Em đã làm xong phần code cho pic và cho VB6.0 nhưng mà test code cho pic thì ko chạy như mong muốn. Anh xem giúp em sai chổ nào với nha
        unsigned char uart_rd, x, current_duty, old_duty, current_duty1, old_duty1 ;

        void InitMain() {
        ADCON1=0x07;
        CMCON=0x07;

        TRISC = 0xc0;
        TRISB = 0;
        PORTB = 0;
        TRISD = 0;

        PWM1_Init(5000);
        PWM2_Init(5000);

        UART1_Init(9600); // Initialize UART module at 9600 bps
        Delay_ms(100); // Wait for UART module to stabilize
        }

        void main() {

        InitMain();

        current_duty = 255; // initial value for current_duty
        current_duty1 = 255; // initial value for current_duty1

        PWM1_Start(); // start PWM1
        PWM2_Start(); // start PWM2
        PWM1_Set_Duty(current_duty); // Set current duty for PWM1
        PWM2_Set_Duty(current_duty1); // Set current duty for PWM2


        while (1) { // Endless loop
        if (UART1_Data_Ready()) { // If data is received,
        uart_rd = UART1_Read(); // read the received data,
        //UART1_Write(uart_rd); // and send data via UART
        x = uart_rd;
        PORTB = x ;

        if(x == 0x54 ) // ki tu "T" quay trai motor
        {
        PWM1_Set_Duty(50);
        PWM2_Set_Duty(0);
        Delay_ms(5000); // delay 1 khoang thoi gian
        }
        if(x == 0x50) // ki tu "P" quay phai motor
        {
        PWM2_Set_Duty(50);
        PWM1_Set_Duty(0);
        Delay_ms(5000); // Delay 1 khoang thoi gian
        }
        }
        }
        }

        Comment


        • #5
          Ở VB6.0 thì mình gửi 2 ký tự "T" và "P" cho quay trái, quay phải. giao diện gồm 2 button đơn giản thôi.
          Dim bien As Variant ' bien kieu Variant

          Private Sub Command1_Click()
          MSComm1.Output = Chr(T) 'Gui ky tu "T"
          End Sub

          Private Sub Command2_Click()
          MSComm1.Output = Chr(P) 'Gui ky tu "P"
          End Sub

          Private Sub Form_Load()
          If MSComm1.PortOpen = True Then
          MSComm1.PortOpen = False
          End If 'Cau hinh lai Serial Port
          MSComm1.CommPort = 3 'ket noi cong COM 3
          MSComm1.Settings = "9600,n,8,1" 'set: baud 9600, ko su dung Parity, khung 8bit, 1 bit stop
          MSComm1.RThreshold = 1
          MSComm1.PortOpen = True
          End Sub

          Private Sub MSComm1_OnComm()
          If (MSComm1.CommEvent = comEvReceive) Then ' Nhan du lieu
          bien = MSComm1.Input
          End If

          End Sub

          Comment


          • #6
            chẳng hiểu mong muốn ... MONG MUỐN CÁI ĐIỀU GÌ ?
            Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

            Comment


            • #7
              ak. tức là khi bắt đầu thì em ko cho quay motor. nhưng mà vừa nạp code vào PIC thì nó quay lung tung anh ak. và...nó ko nhận đc ký tự em truyền xuống. Anh xem code đó có đúng chưa anh, sai chổ nào anh chỉ em sửa với.
              cám ơn anh nhiều!
              Last edited by vtking; 01-05-2013, 15:14.

              Comment


              • #8
                em đã đọc một số tài liệu của anh về giao tiếp máy tính nhưng vẫn chưa làm được, hihi

                Comment


                • #9
                  Nguyên văn bởi vtking Xem bài viết
                  em đã đọc một số tài liệu của anh về giao tiếp máy tính nhưng vẫn chưa làm được, hihi
                  Đầu tiên hãy làm cho nó quay không có máy tính đi đã ... chạy tốt rồi mới nghĩ đến máy tính ... Thằng nào đi học mà chẳng học từng phần 1 ... chỉ có cậu ... một phát lên Đại học ngay ... thì nó quay Lung tung là đúng òy .

                  Thử làm cái nút bấm ( không dùng UART , chỉ dùng PWM ) xem moto quay trái phải ... như thế nào đã. Làm xong thì mới dễ hình dung " À thế này , thế kia được " ... chứ " bụp" 1 cái bảo quay lung tung . Quay lung tung là quay như thế nào ? trái rồi lại phải , phải rồi trái , hay giật giật , hay đứng im , hay quay 1 lúc lại đứng im , đứng im 1 lúc lại quay tiếp ....????
                  Chỉ với " lung tung " nó ra cả 1 đống trường hợp.
                  Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                  Comment


                  • #10
                    hì hì. thank anh nhắc nhở. Em đã cho nó chạy ko giao tiếp thành công. tức là chỉ điều xung thôi ấy mà. Quay trái 1 chặp, quay phải 1 chặp, phê lắm.

                    Giờ em chỉ còn lo phần giao tiếp thôi (chắc là cả trên pic, cả trên PC em dùng). Vẫn đang mù mịt anh ơi.
                    ak vì cái mạch của em fix luôn rồi nên em ko có lcd để kiểm tra, làm thế nào để biết PIC nhận được những gì vậy anh?

                    Comment


                    • #11
                      Nguyên văn bởi vtking Xem bài viết
                      hì hì. thank anh nhắc nhở. Em đã cho nó chạy ko giao tiếp thành công. tức là chỉ điều xung thôi ấy mà. Quay trái 1 chặp, quay phải 1 chặp, phê lắm.

                      Giờ em chỉ còn lo phần giao tiếp thôi (chắc là cả trên pic, cả trên PC em dùng). Vẫn đang mù mịt anh ơi.
                      ak vì cái mạch của em fix luôn rồi nên em ko có lcd để kiểm tra, làm thế nào để biết PIC nhận được những gì vậy anh?
                      gắn cái đèn LED vào , gửi lệnh xem led có sáng không đã ... Cứ kiểm tra dần dần từng bước, từng khâu 1 là nó sẽ làm việc tốt !
                      Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                      Comment


                      • #12
                        em nên bắt cái đèn led vào đâu để kiểm tra vậy anh? 1 pin của VDK hay là chân Tx của BD9.

                        Comment


                        • #13
                          Nguyên văn bởi vtking Xem bài viết
                          em nên bắt cái đèn led vào đâu để kiểm tra vậy anh? 1 pin của VDK hay là chân Tx của BD9.
                          Đương nhiên 1 chân của vi điều khiển ... dùng VB điều khiển cái đèn đó bật tắt xem có được hay không ( xem VB có tốt không , có điều khiển được không, xem truyền có thành công không )... Biết chắc VB truyền ngon rồi thì mới áp dụng, mới tính đến việc truyền dữ liệu điều khiển cái mô tơ chớ !
                          ( ĐỘng não lên xem nào, lười suy nghĩ thế ) !
                          Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                          Comment


                          • #14
                            anh xem cái code vb đó của em có đúng ko anh. em cần xác định được 1 cái đúng hay sai để biết cái kia anh ak. Chừ em ko biết code vb sai hay là code pic sai nữa (có khi sai cả 2 cũng nên).

                            Comment


                            • #15
                              Nguyên văn bởi vtking Xem bài viết
                              anh xem cái code vb đó của em có đúng ko anh. em cần xác định được 1 cái đúng hay sai để biết cái kia anh ak. Chừ em ko biết code vb sai hay là code pic sai nữa (có khi sai cả 2 cũng nên).
                              sao không dùng chương trình teminal hoặc mô phỏng proteus để test thử !
                              Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X