PIC 16f628a thành công lập trình và mô phỏng nhưng không hoạt động trên mạch


2

Tôi đã mô phỏng mạch này thành công trong proteus nhưng nó không hoạt động trên Breadboard.

Động cơ là động cơ bước đơn cực

Tôi đã kiểm tra động cơ và IC bóng bán dẫn ULN2003A darlington.

Họ làm việc hoàn hảo. Chỉ có vấn đề với pic. Tôi đã sử dụng 16f628a

chỉnh sửa 1: thiết bị lập trình phát hiện và lập trình PIC. Nhưng khi tôi đặt PIC lên bảng, nó không làm gì cả.

chỉnh sửa 2: thiết bị lập trình là "brenner 8" và phần mềm là "USburn"

chỉnh sửa 3: mạch và mã cố định sau khi trả lời và bình luận

chỉnh sửa 4: sau khi sửa; chỉ có 2 đèn led liên tục sáng và không có gì khác xảy ra.

chỉnh sửa 5: (ngày 10 tháng 5 năm 2019 11:15 giờ GMT) nó không hoạt động cho dù tôi đã cố gắng gì (tôi đã thử tất cả các câu trả lời cho đến ngày nay). May mắn là giáo viên đã cho tôi một lớp tốt. Tôi sẽ thử với pickit 3 nếu tôi muốn thử lại (hiện đang sử dụng brenner 8).

đây là lược đồ

// CONFIG
#pragma config FOSC = INTOSCIO  // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

#include <xc.h>

void wait();

void main(void)
{
    CMCON = 7;
    TRISA = 255;
    TRISB = 0;
    PORTB = 1;
    PORTA = 0;

    int portb_value = 1;
    int minimum_step_count = 3;
    int counter = 0;

    wait();

    while(1)
    {
        if(PORTA == 1)
        {          
            while( counter < minimum_step_count )
            {
                counter++;
                if(portb_value != 16)
                    portb_value=2*portb_value;        
                if(portb_value == 16)
                    portb_value=1;
                PORTB = portb_value;    
                wait();
            }
            counter=0;
        }
        if(PORTA == 2)
        {           
            while( counter < minimum_step_count )
            {
                counter++;
                if(portb_value == 1)
                    portb_value=16;
                if(portb_value != 1)
                    portb_value=portb_value/2;
                PORTB = portb_value;     
                wait(); 
            }
            counter=0;
        }

            PORTB = 0;

    }

}

void wait()
{
    int time = 0;
    while( time < 30000 )  
    {
        time++;
    }
}

Nó làm gì sai? Nó có cháy lên, nổ tung, nằm đó không làm gì hay đứng dậy và hút hamster của bạn và cho thuốc lá của bạn?
JRE

xD nó không làm gì cả. thiết bị lập trình phát hiện và lập trình PIC. nhưng khi tôi đặt vào bánh mì thì nó không làm gì cả.
hfc

2
Cài đặt CONFIG của bạn ở đâu? Mặc định (nếu có) của trình biên dịch đó có thể không phải là những gì bạn cần.
Spehro Pefhany

tôi vừa tải xuống "MPLAB X IDE v5.15" cho "vi điều khiển PIC tầm trung 8 bit (còn gọi là PIC 16f628a)" tôi đang sử dụng trình biên dịch x8, nó là mặc định của MPLAB. tôi đã không làm bất kỳ cấu hình.
hfc

2
Và cũng: Bạn cần phải làm một cái gì đó với các chân của PORTA mà bạn không sử dụng. Có chúng nổi sẽ dẫn đến hành vi không xác định. Buộc chúng vào GND.
MartinF

Câu trả lời:


6

Bạn cần thiết lập cấu hình. Xem bảng dữ liệu 14-1 .

Cụ thể, đặt / MCLR thành đầu vào hoặc buộc nó vào Vdd bằng điện trở 10K và đặt đồng hồ lên để sử dụng đồng hồ RC bên trong và vô hiệu hóa WDT.

nhập mô tả hình ảnh ở đây

Mặc dù bạn thường có thể thiết lập điều này trong IDE, bạn nên chèn các câu lệnh pragma để đặt nó trong mã của mình. Dưới đây là một ví dụ ( không phù hợp với tình huống của bạn) từ hướng dẫn này .

nhập mô tả hình ảnh ở đây

Ω


Câu trả lời của bạn có vẻ tốt. tôi đang cấu hình. nhưng tôi không có lập trình PIC. nó ở trong trường kiểm tra xấu vào thứ hai. Ngoài ra giáo viên sử dụng trình biên dịch CC5x thay vì trình biên dịch x8. Anh ta không cấu hình pic, vì vậy có vẻ như vì cc5x. Nhưng tôi không thể cài đặt cc5x, nó không hoạt động.
hfc

tôi đã sao chép một mã đã dán vào tệp nguồn của mình
hfc

#pragma cấu hình FOSC = INTOSCIO #pragma cấu hình WDTE = OFF #pragma cấu hình PWRTE = OFF #pragma cấu hình MCLRE = OFF #pragma cấu hình Boren = ON #pragma cấu hình LVP = ON #pragma cấu hình CPD = OFF #pragma cấu hình CP = OFF
HFC

tôi đã thử vào thứ hai nhưng không hoạt động :(
hfc

bạn đã buộc MCLR với Vdd qua 10K như đề xuất chưa? microchipdeveloper.com/8bit:guide microchipdeveloper.com/8bit:mclr
pm101

3

Bạn có chương trình được cấu hình để sử dụng bộ dao động nội? ( Trang 99 của biểu dữ liệu ) Bạn cũng nên thử buộc chân MCLR vào Vdd hoặc sử dụng một trong các mạch được mô tả trên trang 108

BIÊN TẬP:

Hãy chắc chắn để thêm một tụ tách rời 0,1uF gần đầu vào nguồn của vi điều khiển.

Có một số vấn đề bổ sung tôi nhận thấy với mã của bạn. Bạn nên tăng thời gian cho hàm Wait () vì 30.000 tick sẽ là một khoảng thời gian ngắn. Tôi sẽ sử dụng một số nguyên không dấu và đưa nó tới 150.000. Một điều khác là bạn cần thay đổi câu lệnh if thứ hai trong vòng lặp while của bạn thành một if khác. Hiện tại khi portb_value == 1 thì nó được đổi thành 16, nó tạo ra portb_value! = 1 cho câu lệnh if tiếp theo và do đó, nó trở thành 8 khi nó được ghi vào PORTB.

Bạn cũng có thể xác nhận bằng điện rằng các công tắc đang hoạt động?


1

Những bức ảnh này có thể được lập trình ở chế độ điện áp thấp hoặc chế độ điện áp cao. Bạn đã chọn điện áp thấp với #pragma config LVP = ON

Trong chế độ này, chân RB4 không phải là I / O có thể lập trình và trở thành chế độ chọn chương trình đầu vào. Vì nó không được kết nối, PIC có thể ở chế độ chương trình - Trừ khi bạn có lý do chính đáng, luôn sử dụng lập trình điện áp cao ...... vì vậy

#pragma config LVP = OFF

Ngoài ra, int minim_step_count = 3; có lẽ là 4

Cũng có thể các bit cao hơn được đặt trong cổng A được đặt. Hãy thử chỉ nhìn vào 2 bit

if((PORTA & 3) == 1) ...

if((PORTA & 3) == 2) ...

hoặc tốt hơn

while((PORTA & 3) == 1) ...

while((PORTA & 3) == 2) ...


0

Tôi không thể nhận xét vì tôi có ít hơn 50 đại diện nên tôi đang viết ở đây. Bạn đang viết mã bằng MPLAB, vì vậy một trong những điều có thể dẫn đến một vấn đề bạn gặp phải là khi bạn tạo một dự án trong MPALB, bạn phải chọn một công cụ phần cứng bạn sẽ sử dụng và mã của bạn được định cấu hình cho Đó là loại công cụ tôi đoán. Bạn có thể kiểm tra xem công cụ của bạn có trong menu lựa chọn không.

Bạn đã kiểm tra rằng tất cả các dây được kết nối đúng cách, nếu không nó có thể tạo ra một vấn đề.

Kiểm tra xem nguồn điện của bạn có đủ tốt không (điện áp, cường độ dòng điện).

Cuối cùng nhưng không thể bỏ qua là chức năng pic của bạn? Đôi khi công cụ phần cứng có thể phát hiện bộ điều khiển của bạn nhưng điều đó không có nghĩa là nó hoạt động chính xác.


0

Thành thật mà nói, tôi không khuyên bạn nên sử dụng phần mềm giả lập để dự đoán hành vi của các mạch của bạn, đặc biệt là các phần mềm xoay quanh bộ vi điều khiển. Lý do là, mô hình MCU được đưa vào phần mềm sim quá "tha thứ" có nghĩa là nó bỏ qua hầu hết các lỗi bạn mắc phải. Tuy nhiên, những sai lầm này sẽ tạo ra một đầu ra hoàn toàn khác nhau trong việc thực hiện phần cứng.

Bây giờ đến lý do tại sao mạch của bạn không hoạt động? Dưới đây là một vài gợi ý -

  1. kiểm tra lại các kết nối - đặc biệt là Vcc và Gnd. Nếu nối đất không được kết nối, tín hiệu điều khiển sẽ có điện áp nổi (trạng thái điện áp không xác định), do đó động cơ sẽ không hoạt động như mong đợi.

  2. Thay vì lái trực tiếp một bước, hãy kiểm tra mạch (thực hiện phần cứng) bằng cách điều khiển động cơ dc bình thường trước. Chỉ cần gửi tín hiệu điện áp CAO hoặc tín hiệu điện áp thay đổi đến ULN2003. Nếu trục động cơ quay, thì hãy vui mừng khi thực hiện phần cứng của bạn. Đơn giản

  3. Một khi phần cứng ổn, tập trung vào phần mềm. Đặt các chân cổng làm đầu ra. Kiểm tra xung đồng hồ, đặt lại xung và sau đó là mẫu điện áp pha (được tạo bởi uC) trên DSO (bạn có thể sử dụng trình giả lập cho cái cuối cùng). Kiểm tra xem các pha động cơ được cung cấp theo trình tự thích hợp.

  4. Thật tốt và tiện lợi khi có đèn LED (hoặc đèn LED) được kết nối với uC. Sử dụng đèn LED này để chỉ trạng thái hiện tại của mã. Điều này có thể cung cấp cho bạn một dấu hiệu trực quan của dòng mã. Sau mỗi lần thay đổi pha, nhấp nháy đèn LED một lần để kiểm tra xem tín hiệu pha có được tạo đúng hay không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.