АвторСообщение



Пост N: 1
Зарегистрирован: 24.12.15
Рейтинг: 0
ссылка на сообщение  Отправлено: 24.12.15 18:47. Заголовок: Помощь с программированием в MPLAB IDE!


Добрый день. Я участвую в соревнованиях по роботраффику (сборка и программирование машинок, что бы по линии ездили). И так получилось что мой преподаватель ушел из школы, ну успев до конца научить меня работать с MPLAB. Подскажите пожалуйста, какие нибудь форумы посвященные этому, или уроки...
Не знаю даже откуда взять необходимые библиотеки...

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 4 [только новые]


moderator




Пост N: 706
Зарегистрирован: 01.03.11
Рейтинг: 4
ссылка на сообщение  Отправлено: 25.12.15 19:36. Заголовок: Не понятный вопрос. ..


Не понятный вопрос. Какие в MPLAB библиотеки?
MPLAB среда разработки и программирования, на асм. К нему можно подключить компиляторы для языков.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 08.01.16
Рейтинг: 0
ссылка на сообщение  Отправлено: 09.02.16 21:20. Заголовок: Посмотрел что такое ..


Посмотрел что такое Роботраффик – в общем, интересно.
Жаль вопрошающий пропал... либо удалось разобраться, либо, подозреваю, опираясь на некоторый свой опыт, что не понимает как точно сформулировать вопрос (или их слишком много)...
Молодой(ая) человек (человекА) , если соревнования российские, то время ещё есть, если тАмошние, то лучше постараться сформулировать вопросы. И спросить (если ещё не пропала надобность).
К сожалению, я не смогу Вам помочь в эти сроки -- не приходилось работать с MPLab и PIC-ами.
Судя по вопросам, у Вас всё есть – машинка, софт, программатор и даже программа.
Так что не получается?!
Никто не сможет Вам помочь, пока не поймёт в чём дело – люди должны "увидеть" всЁ Вашими глазами, но опираясь только на Ваши слова.
Правильно сформулированный вопрос – это уже почти половина ответа!

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2
Зарегистрирован: 24.12.15
Рейтинг: 0
ссылка на сообщение  Отправлено: 12.02.16 09:53. Заголовок: Приношу свои извинен..


Приношу свои извинения, за то что так на долго оставил тему. "Прохожий", вы совершенно правы, вопросов навалом, и сформулировать их не легко.
Прежде чем описать основные трудности возникшие при работе с MPLAB'ом, расскажу немного про машинку и железо:
Контроллер, разработанный и предоставленный Израильским институтом Технион, базируется на микроконтроллере- dsPIC30f4011.
Среда разработки (рекомендована разработчиками из Техниона)- MPLAB IDE.
Программатор (рекомендован ими же)- С30.
Компилятор- PICit 2.
Так же присутствует basecod (болванка) который Технион присылает после покупки машины. Там нет кода по управлению ездой машины, только необходимый код для работы платы.
"Внутренности" машинки на фото:
http://shot.qip.ru/00PG4B-456TNY8AJ/
Теперь про основные проблемы с которыми пришлось столкнуться:
1
Решил разобраться, как работает MPLAB, попытаться написать свой код и тд, поэтому поставил MPLAB на другой комп. Поставил ту же версию, что и на старом. Запустил. Создаю новый проект. На том шаге когда надо выбирать программатор, MPLAB отображает рядом с C30 жирный красный крест, а в ошибке говорит, что не может найти путь к нему. Я залезаю на microchip, скачиваю С30, ставлю куда он сам предлагает. Результат тот же. Иду еще раз на Microchip. Посмотрел как решить эту проблему. Сделал все как сказано, результат выдал положительный- должно работать. Но Mplab все равно не видит.
2
Для того что бы понять, как работает машинка, надо понимать что написано в болванке. А того что я там понимаю, катастрофически мало. Если кто что подскажет - буду благодарен. (болванку отправлю ответом к этому посту)
3
Одна из самых важный причин почему решил поставить MPLAB на новый комп, тесно связана с теми самыми библиотеками(header files (.h)), про которые писал в первый раз. Их вы сможете увидеть в болванке( если есть какая нибудь информация именно про отдельную библиотеку, типа за что отвечает и тд, будьте добры, напишите.). Так вот, в код подключены эти библиотеки. Код работает , машина ездит. Но когда захожу в дерево проекта, в папке header files, где они все указаны, почти рядом со всеми, в скобочках написано (not found)! При этом повторюсь машинка нормально ездит. Вот из за чего спрашивал где их найти.



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3
Зарегистрирован: 24.12.15
Рейтинг: 0
ссылка на сообщение  Отправлено: 12.02.16 09:57. Заголовок: P.S. К предыдущему. ..


P.S. К предыдущему. В коде есть место, где надо прописать, сто плате выводить на COM-порт. Если кто знает как правильно прописать , что бы машина вывела в терминал, то что нужно, обучите пожалуйста.
А вот и болванка:
#include<p30f4011.h>
#include<stdio.h>
#include<math.h>
#include<float.h>
#include"libpic30.h"
#include "user_defi.h"

_FOSC(CSW_FSCM_OFF & XT_PLL8);
_FWDT(WDT_OFF);

unsigned char flag = 0x00, i = 0, init = 1, f = 1, traffic_data, y = 1;

unsigned int ch = 0, w = 0, pwm = 0x0200, test = 0xd356, temp, flag1;



float sl3, /* AN0, stripe sensor -> left 3 */
sl2, /* AN1, stripe sensor -> left 2 */
sl1, /* AN2, stripe sensor -> left 1 */
sc, /* AN3, stripe sensor -> centre black stip on/off */
sr1, /* AN4, stripe sensor -> right 1 */
sr2, /* AN5, stripe sensor -> right 2 */
sr3, /* AN6, stripe sensor -> right 3 */
ss, /* AN7, stripe sensor -> stop */
/* */
fl, /* AN8, left front distance sensor */
fr, /* AN9, right front distance sensor */
rl, /* AN10, left rear distance sensor */
rr; /* AN11, right rear distance sensor */





unsigned char h,l;

unsigned int received_data [0x0a] = {0};
unsigned char transmitted_data [0x0c] = {0};
unsigned char a2d_channels [0x0c] = {0x86, 0x8e, 0x96, 0x9e, 0xa6, 0xae, 0xb6, 0xbe, 0xc6, 0xce, 0xd6, 0xde};
unsigned int a2d_data [0x0c] = {0};


void initialization (void);
void a2d_sensors (void);
void SPI1_A2D_init (void);
void uart1A_IrDA_init (void);
void uart2_rs232_init (void);
void putch (char byte);

/*======================================================*/
void initialization (void)
{

/* Interrupt control register */

SRbits.IPL = 1; /* CPU Interrupt Priority Level Status bits, 100 = CPU interrupt priority level is 4 (12) */
CORCONbits.IPL3 = 1; /* CPU interrupt priority level is 7 or less */

INTCON1 = 0x0000;
INTCON2 = 0x0000;

/* init TMR1 */

TMR1 = 0x0000; /* Timer1 register for the Timer0 module */
PR1 = 0x30; /* Period register for the Timer1 module */
T1CON = 0x8030; /* 16-bit 1:1 prescale value */

IPC0bits.T1IP = 2; /* Priority */
IEC0bits.T1IE = 1; /* Enables the TMR1 overflow interrupt */
IFS0bits.T1IF = 0; /* TMR1 Overflow Interrupt Flag bit */

/* init TMR2 */

T2CON = 0x8000;
TMR2 = 0x0000;
PR2 = 0x3ff;

IPC1bits.T2IP = 2; /* Priority */
IEC0bits.T2IE = 1; /* Enables the TMR2 overflow interrupt */
IFS0bits.T2IF = 0; /* TMR2 Overflow Interrupt Flag bit */

/* init TMR3 */

T3CON = 0x8010;
TMR3 = 0x0000;
PR3 = 0x77ff;

IPC1bits.T3IP = 3; /* Priority */
IEC0bits.T3IE = 1; /* Enables the TMR2 overflow interrupt */
IFS0bits.T3IF = 0; /* TMR2 Overflow Interrupt Flag bit */

/* init servo motor control PWM output */

PTCON = 0x8008;
PTMR = 0x0000;
PTPER = 0x47fe;
SEVTCMP = 0x0000;
PWMCON1 = 0x0001;
PWMCON2 = 0x0000;
OVDCON = 0x0101;

/* compare output PWM */

OC1CON = 0x0000;
OC3CON = 0x0006;
IPC4bits.OC3IP = 2;
OC3R = 0x0000;
IEC1bits.OC3IE = 1;
IFS1bits.OC3IF = 0;


/* I/O init */

ADPCFG = 0xffff; /* 1 = Analog input pin in Digital mode */
I2CCON = 0x0000;

TRISE = 0x01fc; /* servo->RE0 pin_38 (output servo_motor) */
PDC1 = 0x0add; /* servo motor PWM */

TRISDbits.TRISD0 = 0; /* dir */
TRISDbits.TRISD2 = 0; /* pwm */


TRISCbits.TRISC13 = 0; /* TX1 */
TRISCbits.TRISC14 = 1; /* RX1 */
TRISFbits.TRISF4 = 1; /* RX2 */
TRISFbits.TRISF5 = 0; /* TX2 */

TRISFbits.TRISF6 = 0; /* sck */
TRISFbits.TRISF3 = 0; /* sdo */
TRISFbits.TRISF2 = 1; /* sdi */
TRISFbits.TRISF0 = 0; /* cs */
TRISFbits.TRISF1 = 1; /* oec */


TRISBbits.TRISB2 = 1; /* run => 1, stop =>0 */



TRISEbits.TRISE1 = 0; /* test point */

PORTEbits.RE1 = 1;


OC3RS = 0x0001; /* DC motor PWM */

}


/*=================================================================================PRINT FUNCTIONS=======================================================================================================================================*/

void _ISR __attribute__((auto_psv)) _T1Interrupt( void)
{
PORTEbits.RE1 = 1;

if( y == 1)
{
printf("Robotraffic 2012, A2D test \n");
y = 0;

}

if( y == 0)
{
uart1A_IrDA_init();
SPI1_A2D_init();
y = 2;
}
if( y== 2)
{
a2d_sensors();

}

if ( flag1 == 0x01ff)
{
// printf( " received_data [0x0a] = {%d} \n",(int)received_data [0]);
// printf( " SL3 = %d \n", a2d_data[0x00]);
// printf( " SL2 = %d \n", a2d_data[0x01]);
// printf( " SL1 = %d \n", a2d_data[0x02]);
// printf( " SC = %d \n", a2d_data[0x03]);
// printf( " SR1 = %d \n", a2d_data[0x04]);
// printf( " SR2 = %d \n", a2d_data[0x05]);
// printf( " SR3 = %d \n", a2d_data[0x06]);
// printf( " SS = %d \n", a2d_data[0x07]);
// printf( " FL = %d \n", a2d_data[0x08]);
// printf( " FR = %d \n", a2d_data[0x09]);

flag1 = 0;

}
if( flag == 0x07)
{

/*
Traffic Light ID;
RED = 0x00,
RED + Yellow = 0x01,
Green = 0x02,
Green + Flash = 0x03,
Yellow = 0x04.

Traffic signal ID;

Pedestrian crossing = 0x05,
Stop = 0x06,
Go Straight = 0x07, *
Go Left = 0x08, *
Go Right = 0x09. *

*/
switch (received_data [0])
{



}


flag = 0x0;
}

flag1++;

PORTEbits.RE1 = 0;

IFS0bits.T1IF = 0;
}

/*==============================================================================PID FUNCTION==========================================================================================================================================*/

void _ISR __attribute__((auto_psv)) _T2Interrupt( void)
{


IFS0bits.T2IF = 0;
}

/*================================================================================TRAFIC FUNCTIONS========================================================================================================================================*/

void _ISR __attribute__((auto_psv)) _T3Interrupt( void)
{
IFS0bits.T3IF = 0;
}
/*======================================================*/
void _ISR __attribute__((auto_psv)) _U1RXInterrupt( void)
{


if(flag == 0x00)
{
for(i=0;i<0x01;i++)
{
while(!IFS0bits.U1RXIF) /* set when register is not empty */
continue;
received_data = U1RXREG;
f4++;
}

flag = 0x07;
}

IFS0bits.U1RXIF = 0;
}
/*======================================================*/
/*======================================================*/

void uart2_rs232_init (void)
{
/* Fcy 7.3728 MHZ */

U2MODE = 0x8000; /* Transmit status and control register */
U2STA = 0x84c0; /* Receve status and control register */
U2BRG = 0x0007; /* Baund rate control register 115200 bps */

IPC6bits.U2RXIP = 2; /* Receiver Interrupt Priority bits */
IEC1bits.U2RXIE = 1; /* Enable RS232 interrupts */
IFS1bits.U2RXIF = 0;
}

/*======================================================*/

void uart1A_IrDA_init (void)
{
/* Fcy 7.3728 MHZ */

U1MODE = 0x8400; /* U1ATX Transmit status and control register */
U1STA = 0x8400; /* Receve status and control register */
U1BRG = 0x0007; /* Baund rate control register 115200 bps */

IPC2bits.U1RXIP = 3; /* Receiver Interrupt Priority bits */
IEC0bits.U1RXIE = 1; /* Enable RS232 interrupts */
IFS0bits.U1RXIF = 0;
}

/*======================================================*/
void putch (char byte)
{
while(!IFS1bits.U2TXIF)
continue;
U2TXREG = byte;
IFS1bits.U2TXIF = 0;
}

/*======================================================*/
void a2d_sensors (void)
{

/***** R E A D Ch_ 0 ************************************/

for(ch=0;ch<0xc;ch++)
{
/***********************************/
SPI1CON = 0x0323;
SPI1CONbits.MODE16 = 0;

PORTFbits.RF0 = 0; //cs = 0;
SPI1BUF = 0x18;
while(!IFS0bits.SPI1IF)
continue;
temp = SPI1BUF;
IFS0bits.SPI1IF = 0;
PORTFbits.RF0 = 1; // cs = 1;

for(w=0;w<0xb;w++) { asm("NOP"); }

/***********************************/
SPI1CON = 0x0323;
SPI1CONbits.MODE16 = 1;

PORTFbits.RF0 = 0; // cs = 0;
SPI1BUF = 0x6a00;
while(!IFS0bits.SPI1IF)
continue;
temp = SPI1BUF;
IFS0bits.SPI1IF = 0;
PORTFbits.RF0 = 1; // cs = 1;

for(w=0;w<0xb;w++) { asm("NOP"); }

/***********************************/
SPI1CON = 0x0323;
SPI1CONbits.MODE16 = 0;

PORTFbits.RF0 = 0; // cs = 0;
SPI1BUF = a2d_channels[ch];
while(!IFS0bits.SPI1IF)
continue;
temp = SPI1BUF;
IFS0bits.SPI1IF = 0;
PORTFbits.RF0 = 1; // cs = 1;

for(w=0;w<0xb;w++) { asm("NOP"); }

SPI1CON = 0x0323;
SPI1CONbits.MODE16 = 1;
SPI1CONbits.DISSDO = 1;

PORTFbits.RF0 = 0; // cs = 0;
SPI1BUF = 0x0000;
while(!IFS0bits.SPI1IF)
continue;
a2d_data[ch] = SPI1BUF;
IFS0bits.SPI1IF = 0;
PORTFbits.RF0 = 1; // cs = 1;
asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP");

}
/***********************************************************/
sl3 = a2d_data[0x00] * 0.8571;
sl2 = a2d_data[0x01] * 0.787;
sl1 = a2d_data[0x02] * 1.0714;
sc = a2d_data[0x03] * 0.00122;
sr1 = a2d_data[0x04] * 1.2765;;
sr2 = a2d_data[0x05] * 0.80808;
sr3 = a2d_data[0x06] * 0.9756;
ss = a2d_data[0x07] * 0.00122;
/* */
fl = a2d_data[0x08] * 0.00122;
fr = a2d_data[0x09] * 0.00122;
// rl = a2d_data[0x0a];
// rr = a2d_data[0x0b];

/***********************************************************/
}
/*======================================================*/

void SPI1_A2D_init (void)
{
/***** R E S E T ****************************************/
SPI1STAT = 0x8000;
SPI1CON = 0x0323;

IFS0bits.SPI1IF = 0;
IEC0bits.SPI1IE = 1;
IPC2bits.SPI1IP = 2;

PORTFbits.RF0 = 0; // cs = 0; /* A2D chip select enable */
SPI1BUF = 0x10; /* reset */
while(!IFS0bits.SPI1IF)
continue;
IFS0bits.SPI1IF = 0;
PORTFbits.RF0 = 1; // cs = 1;

/********** S E T U P *********************************************/
SPI1STAT = 0x8000;
SPI1CON = 0x0323;

SPI1CONbits.MODE16 = 1;

IFS0bits.SPI1IF = 0;
IEC0bits.SPI1IE = 1;
IPC2bits.SPI1IP = 2;

PORTFbits.RF0 = 0; // cs = 0;
SPI1BUF = 0x6a00; /* setup */
while(!IFS0bits.SPI1IF)
continue;
IFS0bits.SPI1IF = 0;
PORTFbits.RF0 = 1; // cs = 1;

/********** A V E R A G I N G *******************************************/
SPI1STAT = 0x8000;
SPI1CON = 0x0323;
SPI1CONbits.MODE16 = 0;
IFS0bits.SPI1IF = 0;
IEC0bits.SPI1IE = 1;
IPC2bits.SPI1IP = 2;
PORTFbits.RF0 = 0; // cs = 0;
SPI1BUF = 0x20;
while(!IFS0bits.SPI1IF)
continue;
IFS0bits.SPI1IF = 0;
PORTFbits.RF0 = 1; // cs = 1;

/******** R E S E T F I F O ********************************/
SPI1STAT = 0x8000;
SPI1CON = 0x0323;

IFS0bits.SPI1IF = 0;
IEC0bits.SPI1IE = 1;
IPC2bits.SPI1IP = 2;
PORTFbits.RF0 = 0; // cs = 0;
SPI1BUF = 0x18;
while(!IFS0bits.SPI1IF)
continue;
IFS0bits.SPI1IF = 0;
PORTFbits.RF0 = 1; // cs = 1;

/***********************************************************/
SPI1STAT = 0x8000;
SPI1CON = 0x0323;

IFS0bits.SPI1IF = 0;
IEC0bits.SPI1IE = 1;
IPC2bits.SPI1IP = 2;

PORTFbits.RF0 = 0; // cs = 0;

SPI1BUF = 0x00de;
while(!IFS0bits.SPI1IF)
continue;
temp = SPI1BUF;
IFS0bits.SPI1IF = 0;

PORTFbits.RF0 = 1; // cs = 1;

for(w=0;w<0x80;w++)
{
asm("NOP");
}

SPI1STAT = 0x8000;
SPI1CON = 0x0323;
SPI1CONbits.MODE16 = 1;

PORTFbits.RF0 = 0; // cs = 0;
SPI1CONbits.DISSDO = 1;
PORTFbits.RF3 = 0;

asm ("CLR _SPI1BUF");
while(!IFS0bits.SPI1IF)
continue;
temp = SPI1BUF;
IFS0bits.SPI1IF = 0;
PORTFbits.RF0 = 1; // cs = 1;

/***********************************************************/
IFS0bits.SPI1IF = 0;
IEC0bits.SPI1IE = 1;
IPC2bits.SPI1IP = 2;
}

/*======================================================*/
/*======================================================*/
int main (void)
{
__C30_UART = 2;
initialization ();
uart2_rs232_init ();

while(1)
{}

}
/*======================================================*/
/*======================================================*/

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 13
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия