Отговори на тема  [ 281 мнения ]  Отиди на страница Предишна  1 ... 7, 8, 9, 10, 11, 12, 13 ... 19  Следваща
I2C малко помощ 
Автор Съобщение
Ранг: Популярен
Ранг: Популярен

Регистриран на: Пет Юни 25, 2010 3:18 pm
Мнения: 363
Местоположение: Varna
Мнение Re: I2C малко помощ
Не съм ползвал mcc, но погледни тук http://www.microchip.com/forums/m843185.aspx. Може да ти помогне.
И това може да ти е от полза http://microchipdeveloper.com/i2c:chip-select :)


Вто Авг 15, 2017 7:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: I2C малко помощ
Благодаря, колега но аз тези дни изчетох де що намерих по въпроса за приложението на I2C кода, генериран от MCC и нищо ясно (за мен) не намерих.
Принципно нещата са ясни. Описани са добре и в чаршафа и на други места, като втория линк.

Въпросът е, защо не може да се подкара току така MCC кодът, който уж е за улеснение?

В крайна сметка ще се се побалтавя още някой и друг ден с него и накрая ще го зарежа и ще премина, към нещо доста по-разбираемо. Примери, колкото щеш.


Вто Авг 15, 2017 8:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: I2C малко помощ
Направи проекта така,че всички файлове да са в една папка, архивирай я и я прикачи тука - някой разбиращ може да я разгледа.
Имаш осцилоскоп , от който постваш картинки , а дебъгер имаш ли? Пикит3 например?
Постни само проекта за мастера.
Махни слейва и тествай само с осцилоскопа - целта е да изкараш валидна картинка на старт-адресен байт за слейв - стоп.
Наслагай цъкалки и ледове да виждаш събития. Дебъгването е пипкава работа и иска планиране.


Какво значи- ще се предаваш? И2ц си е хубаво нещо и отвреме навреме се налага да се използва. По добре се опитай да разбереш кода,
утре ще се откажеш някъде другаде и и само ще съжаляваш за загубеното време.


Вто Авг 15, 2017 8:44 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: I2C малко помощ
Исках да кажа, че има вероятност да се откажа от "лесния готов" код на MCC. Не и от I2C, което рано или късно все някак ще подкарам. :)

В общи линии на дърти години сам се уча на програмиране на пик-ове. И покрай това - първи стъпки в C. С програмиране съм имал бизнес само с Basic и малко асемблер, но това беше преди 100 г. в студентските ми времена, когато още нямаше и Интернет :)

Досега съм работил само с 8 битови и в общи линии не съм подкарвал още само I2C, UART и USB. С другото се справям :)


Вто Авг 15, 2017 8:54 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: I2C малко помощ
Какво стана с постването на папката?


Вто Авг 15, 2017 9:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: I2C малко помощ
Това е нещото (прикаченото).


Прикачени файлове:
I2c_test_master.X.rar [214.21 KiB]
248 пъти
Вто Авг 15, 2017 9:28 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: I2C малко помощ
не виждам никакъв код в main()

Тази промяна опитва ли я?

void I2C_MasterTRBInsert(
uint8_t count,
I2C_TRANSACTION_REQUEST_BLOCK *ptrb_list,
I2C_MESSAGE_STATUS *pflag)
{

// check if there is space in the queue
if (i2c_object.trStatus.s.full != true)
{
*pflag = I2C_MESSAGE_PENDING;

i2c_object.pTrTail->ptrb_list = ptrb_list;
i2c_object.pTrTail->count = count;
i2c_object.pTrTail->pTrFlag = pflag;
i2c_object.pTrTail++;

// check if the end of the array is reached
if (i2c_object.pTrTail == (i2c_tr_queue + I2C_CONFIG_TR_QUEUE_LENGTH))
{
// adjust to restart at the beginning of the array
i2c_object.pTrTail = i2c_tr_queue;
}

// since we added one item to be processed, we know
// it is not empty, so set the empty status to false
i2c_object.trStatus.s.empty = false;

// check if full
if (i2c_object.pTrHead == i2c_object.pTrTail)
{
// it is full, set the full status to true
i2c_object.trStatus.s.full = true;
}

}
else
{
*pflag = I2C_MESSAGE_FAIL;
}

// for interrupt based


if (*pflag == I2C_MESSAGE_PENDING)
{ if (i2c_state == S_MASTER_IDLE)
{
///////////////////

PIR1bits.SSP1IF = true;
while (PIR1bits.SSP1IF== true) ;


while(i2c_state != S_MASTER_IDLE);
{
// force the task to run since we know that the queue has
// something that needs to be sent
PIR1bits.SSP1IF = true;/////ей тоз ред ми изглежда излишен
}
} ////////////////////////////
} // block until request is complete

}


Последна промяна stefan63 на Вто Авг 15, 2017 10:27 pm, променена общо 1 път



Вто Авг 15, 2017 10:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: I2C малко помощ
void main(void)
{
// initialize the device
SYSTEM_Initialize();


INTERRUPT_GlobalInterruptEnable();


INTERRUPT_PeripheralInterruptEnable();


unsigned int D; //стойността на D трябва да се прочете от slave

while (1)
{
// Тук трябва да се осъществи I2C комуникацията със slave за да се изчете D.

// по-натам не е интересно. Примерно:
if (D==25)
LATA4=1;
else
LATA4=0;

// Add your application code
}
}


Умишлено не пиша код в main за да фокусираме вниманието си върху I2C.


PS:

Не съм го пробвал това, което предлагаш. Утре ще го пробвам.


Вто Авг 15, 2017 10:26 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение Re: I2C малко помощ
Силно се съмнявам, че микрочеп са дали код, който не работи. Не разбрах - не си писал изобщо код в main или само в дадения от теб код си го пропуснал? Щото ако е първото - не знам какво очакваш... Вероятно цялата тема е заради някаква тъпа грешка в извикването на API-тo (щом не прави разлика между buffer[x] и &buffer[x]).


Последна промяна tolstolob на Вто Авг 15, 2017 11:05 pm, променена общо 2 пъти



Вто Авг 15, 2017 10:52 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: I2C малко помощ
Умишлено не съм дал кода в main защото той няма никакво отношение към I2C и писането му излишно ще усложни постановката.

Докараме ли я дотам, че master да може да чете N на брой променливи от няколко slave, с това казусът от темата може да се счита за решен.


Вто Авг 15, 2017 11:01 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение Re: I2C малко помощ
Дай да видим как извикваш master read или там каквото беше. С всичкия код около него.


Вто Авг 15, 2017 11:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: I2C малко помощ
Това, което предложи Стефан:

uint8_t RXbuffer_forslave_1[10];
I2C_MESSAGE_STATUS statusReadSlave1;

while (1)

{
RXbuffer_forslave_1=0xee;
I2C_MasterRead(RXbuffer_forslave_1,10,1,&statusReadSlave1);
while ((statusReadSlave1!=I2C_MESSAGE_COMPLETE)
&&
(statusReadSlave1!=I2C_MESSAGE_FAIL))
{ //////wait here

};

D=RXbuffer_forslave_1[0];
if(D==25)
LATA4=1;
else
LATA4=0;
};


Вто Авг 15, 2017 11:09 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение Re: I2C малко помощ
Код:
RXbuffer_forslave_1 = 0xee;
Сериозно?


Вто Авг 15, 2017 11:14 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: I2C малко помощ
Напиши един main() , цикъл,
в цикъла
- цък на порт/лед
- дилей 1мс
- децък на порт/лед
- извикване на четене - от слейв 2, адрес 5, 1 байт.
- дилей 10 мс
Във функциите Read,Build , Insert - разцъкай още няколко леда, колкот повече- толкова по-добре.
Покажи горните 4 функции - да видим къде си нацъкал ледчета.
После покажи осцилограми на ледчедата.
Дебъгер нямаш ли?


Вто Авг 15, 2017 11:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: I2C малко помощ
tolstolob написа:
Код:
RXbuffer_forslave_1 = 0xee;
Сериозно?


Извинявам се. Моя техническа грешка.

RXbuffer_forslave_1[10]=0xEE;


Вто Авг 15, 2017 11:22 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 281 мнения ]  Отиди на страница Предишна  1 ... 7, 8, 9, 10, 11, 12, 13 ... 19  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни