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).
// 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++;
}
}