колелото енкодер, PIC и прекъсват

A

alirezan

Guest
Здравейте всички,

Опитвам се да се използва колело енкодери на моя робот.Аз съм с PIC18F1320 и програмиране на C.

Използвах PIC за генериране на PWM и да зададете пристанища да определи посоката на движение.Аз приложен хардуера колело енкодер (което работи добре) и нека СПМ получите прекъсват като сензори виж различен цвят кръпка, когато колелото се върти (използва щифт PORTB промяна прекъсват).

Имам много проста програма, но много странен проблем.Когато се симулира в MPLAB СИМ-то работилница глоба.

Тук е проблемът.В моя енкодер, бяло петно генерира 0 и черна 1.Всеки път, когато стартирате робот, колелото движи само малко и спира.Разбрах, че след като възхвала удари черна кръпка, тя спира напълно.Когато включите ръчно колело на сензора, за да видите бяло петно тогава колелото започва да се движи и отново, когато удари черна кръпка, тя спира!

Някой знае ли защо това се случва?

Тук е моят код:

Благодарности

Код:/********/# PIC18F1320 Pragma чип / / CC8E съставител директива за използване 18F1320.H

нищожен Start_PWM (Void);

нищожен Stop_PWM (Void);/************************************************* ********************************************/

/ / 1 макро дефиниции и константи /

//***********************************`/ / Логически Определения:

//====================/ / PIC18F1320 Определения:

//=======================

# определят F_OSC 8000000 / / Frequency (Hz) на осцилатори (Fosc) за момента се използва часовник

/ / ROBOT_PIC Определения:

//======================Int distance_to_move;

Int rotation_constant / / трябва да бъде 1,754

Int time_to_turn;

грозен Int брояч;
# ргадта произход 0x8 / / Посочете къде в програмата памет, за да поставите следния код

/ / (0x8 съответства на висока степен на приоритет Прекъсване вектор)

прекъсват int_server (Void) / / прекъсване на рутинна услуга е специална функция.
Вижте CC8E Ръководство на потребителя за подробности

(

int_save_registers / / CC8E Макро да спаси W, статута и БДЖ регистриIF (RBIF) / / Най-малко един от RB4: RB7 се променя

(

ако (! PORTB.5) / / PB5 е получил прекъсват

(

PORTB.2 = 1;

брояч ;

)RBIF = 0;)IF (TMR2IF)

(

TMR2IF = 0;

)int_restore_registers / / CC8E Макро да се възстанови W, статута и БДЖ регистри

)
/************************************************* ********************************************/

/ / Основна функция /

//*****************`недействителни главната (недействителни)

(/ / Осцилатор Инициализация:

//==========================

SWDTEN = 0;

OSCCON = 0b01110000 / / Конфигуриране за:! IDLEN, 8MHz INTOSC честота, PRI_RUN режим на захранване

OSCTUNE = 0x10; / / Този регистър се използва за компенсиране на oscilator грешка честота плаващите/ / Порт А, Б Инициализация:

//========================

ADON = 0;

ADCON1 = 0b01111111;

TRISA = 0b10000010;

TRISB = 0b00100000;PORTA = 0x00; / / Initialize Пристанища А, Б до 0

PORTB = 0x00;

PORTA.6 = 0;

PORTB.6 = 0;

RBIE = 1;

RBIF = 0;GIE = 1;

PEIE = 1;

Start_PWM ();докато (1);

)нищожен Start_PWM (Void)

(

CCP1CON = 0;

PR2 = 199; / / 249 / / 199 за DC = 25%, 249 за DC = 75%

CCPR1L = 49; / / 186 / / 49 за DC = 25%, 186 за DC = 75%

TRISB.3 = 0;

T2CON = 0x01;

CCP1CON = 0x3C;

TMR2 = 0;

TMR2ON = 1;

TMR2IE = 1;

)нищожен Stop_PWM (Void)

(

TMR2ON = 0;

)/ / КРАЙ НА ФАЙЛА

 

Welcome to EDABoard.com

Sponsor

Back
Top