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

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


ОК ще го пробвам. Не знам как се дебъгва. Пробвах веднъж с pickit3 и го омазах и оттогава не съм :)


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

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


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

RXbuffer_forslave_1[10]=0xEE;

Хубаво, ама пак пишеш извън масива. Най-вероятно останалите грешки са в същия стил.
Вече изгубих интерес.


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

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


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

RXbuffer_forslave_1[10]=0xEE;

Хубаво, ама пак пишеш извън масива. Най-вероятно останалите грешки са в същия стил.
Вече изгубих интерес.


Благодаря за насоките! Със сигурност нещото не работи, заради мои грешки. Това е и причината заради която питам тук. Съжалявам затова, че досаждам.


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

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: I2C малко помощ
void I2C_MasterRead(
uint8_t *pdata,
uint8_t length,
uint16_t address,
I2C_MESSAGE_STATUS *pflag)

...........


I2C_MasterRead( & RXbuffer_forslave_1,10,1,&statusReadSlave1);
I2C_MasterRead( RXbuffer_forslave_1,10,1,&statusReadSlave1);

Да попитам и аз - тези двете извиквания идентични/еквивалентни ли са ,или зависи от компилатора ?
RXbuffer_forslave_1 е масив.


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

Регистриран на: Пон Дек 19, 2005 12:21 pm
Мнения: 1037
Мнение Re: I2C малко помощ
stefan63 написа:
void I2C_MasterRead(
uint8_t *pdata,
uint8_t length,
uint16_t address,
I2C_MESSAGE_STATUS *pflag)

...........


I2C_MasterRead( & RXbuffer_forslave_1,10,1,&statusReadSlave1);
I2C_MasterRead( RXbuffer_forslave_1,10,1,&statusReadSlave1);

Да попитам и аз - тези двете извиквания идентични/еквивалентни ли са ,или зависи от компилатора ?
RXbuffer_forslave_1 е масив.


Не са еквивалентни. Примам, че масива ти е от тип uint8_t.

RXbuffer_forslave_1 ще е от тип указател към uint8_t и е правилното в случая, защото такъв параметър очаква функцията I2C_MasterRead.

&RXbuffer_forslave_1 ще е от тип указател към масив uint8_t с определен брой елементи. Това би трябвало да ти изгърми с incompatible pointer type. Ако не гърми, то включи си warning-ите.


Сря Авг 16, 2017 8:32 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 9:39 pm
Мнения: 2277
Мнение Re: I2C малко помощ
stefan63 написа:
void I2C_MasterRead(
uint8_t *pdata,
uint8_t length,
uint16_t address,
I2C_MESSAGE_STATUS *pflag)

...........


I2C_MasterRead( & RXbuffer_forslave_1,10,1,&statusReadSlave1);
I2C_MasterRead( RXbuffer_forslave_1,10,1,&statusReadSlave1);

Да попитам и аз - тези двете извиквания идентични/еквивалентни ли са ,или зависи от компилатора ?
RXbuffer_forslave_1 е масив.

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

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!


Сря Авг 16, 2017 9:53 am
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение Re: I2C малко помощ
В "i2c1.c" в слейва има
Код:
#define I2C1_SLAVE_ADDRESS  1
Въпросния макрос трябва да е същия като в заявката от мастъра:
Код:
I2C_MasterRead( RXbuffer_forslave_1,
                1,   // 1 байт е достатъчен за начало
                1,   // = I2C1_SLAVE_ADDRESS
                &statusReadSlave1);

Ако и така не работи, вече незнам от какво може да е...


Сря Авг 16, 2017 11:27 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

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


I2C_MasterRead( & RXbuffer_forslave_1,10,1,&statusReadSlave1);
I2C_MasterRead( RXbuffer_forslave_1,10,1,&statusReadSlave1);

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


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

C::B издаде предупреждение, www.onlinegdb.com нищо не каза,
IAR издаде грешка. Първите 2 не знам какъв резултат са дали като код, но на IAR му казах да не спира на тази грешка
и асемблерлистинга показа еднаква компилация на двата реда.
Интересно беше.


Сря Авг 16, 2017 1:54 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12765
Местоположение: София
Мнение Re: I2C малко помощ
lcr написа:
tolstolob написа:
lcr написа:

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

RXbuffer_forslave_1[10]=0xEE;

Хубаво, ама пак пишеш извън масива. Най-вероятно останалите грешки са в същия стил.
Вече изгубих интерес.


Благодаря за насоките! Със сигурност нещото не работи, заради мои грешки. Това е и причината заради която питам тук. Съжалявам затова, че досаждам.

По-важното е да видиш каква е грешката ти, и да не я повтаряш. Масивът има 10 клетки с адреси от 0 до 9...


Сря Авг 16, 2017 2:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

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

1 - Пуснах I2C_MasterRead() в цикъла:


uint8_t RXbuffer_forslave_1[10];
I2C_MESSAGE_STATUS statusReadSlave1;


while (1)
{


RXbuffer_forslave_1[0]=0xEE;
I2C_MasterRead(RXbuffer_forslave_1[0],1,1,&statusReadSlave1);




while ((statusReadSlave1!=I2C_MESSAGE_COMPLETE)
&&
(statusReadSlave1!=I2C_MESSAGE_FAIL))
{
//////wait here

}


// Add your application code

}


при тази ситуация няма нищо по шината.

И тогава в тъпата ми тиква ми блесна мисълта, че цикъл няма, защото той виси заради:

while ((statusReadSlave1!=I2C_MESSAGE_COMPLETE)
&&
(statusReadSlave1!=I2C_MESSAGE_FAIL))

{
//////wait here

}

2 - Разкарах от цикъла въпросното условие и шината се раздвижи:

Изображение


3 - Вързах насреща един slave с адрес 0x02 и върнах условието while ((statusReadSlave1!=I2C_MESSAGE_COMPLETE)
&&
(statusReadSlave1!=I2C_MESSAGE_FAIL))
{
}

и отново (очаквано) комуникация - йок.


4 - Смених адресния аргумент в I2C_MasterRead() на 0x02 и така цикълът придоби окончателния вид:

while (1)
{


RXbuffer_forslave_1[0]=0xEE;
I2C_MasterRead(RXbuffer_forslave_1[0],1,2,&statusReadSlave1);




while ((statusReadSlave1!=I2C_MESSAGE_COMPLETE)
&&
(statusReadSlave1!=I2C_MESSAGE_FAIL))
{
//////wait here

}


// Add your application code

}



При тази ситуация на шината се наблюдава:

Изображение

като slave се припознава и си изпълнява вектора на прекъсване.

Дотук - добре :)

Остава ми да пробвам реално четене на данни.


Сря Авг 16, 2017 2:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12765
Местоположение: София
Мнение Re: I2C малко помощ
Клокът е ужасен. :D Хубаво е поне малко формата да наподобява правоъгълна...
Та, намали стойността на пулъп резисторите.


Сря Авг 16, 2017 2:10 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: I2C малко помощ
itso.t написа:
Клокът е ужасен. :D Хубаво е поне малко формата да наподобява правоъгълна...
Та, намали стойността на пулъп резисторите.


Това е от китайската измервателна хапаратура :)


Сря Авг 16, 2017 2:16 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение Re: I2C малко помощ
Значи следващия въпрос ще е защо данните от слейва не са такива, каквито трябва да бъдат :mrgreen:
Язък, дето се плючихме 3 страници да обясняваме разликата между байт и указател към байт.


Сря Авг 16, 2017 2:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12765
Местоположение: София
Мнение Re: I2C малко помощ
lcr написа:
Това е от китайската измервателна хапаратура :)

Като гледам картинките, китайската измервателна техника има достатъчен семпълрейт за да хване поне няколко семпъла за стабилна лог. 1.
Намали резисторите. Сега колко са, 4к7?


Сря Авг 16, 2017 2:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Дек 19, 2005 12:21 pm
Мнения: 1037
Мнение Re: I2C малко помощ
stefan63 написа:
syscop написа:
При първия случай - параметърът, който подаваш е адресът на указателя към първия елемент на масива.
При втория случай - указател към първия елемент на масива.


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

За първия syscop казва адресът на указателя, което аз го разбирам като указател към указател към uint8_t, но според мен не е така.


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

Кой е на линия

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


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

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