|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 8:56 pm
| Автор |
Съобщение |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: I2C малко помощ
ОК ще го пробвам. Не знам как се дебъгва. Пробвах веднъж с pickit3 и го омазах и оттогава не съм 
|
| Вто Авг 15, 2017 11:25 pm |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
 Re: I2C малко помощ
Хубаво, ама пак пишеш извън масива. Най-вероятно останалите грешки са в същия стил. Вече изгубих интерес.
|
| Вто Авг 15, 2017 11:29 pm |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: I2C малко помощ
Благодаря за насоките! Със сигурност нещото не работи, заради мои грешки. Това е и причината заради която питам тук. Съжалявам затова, че досаждам.
|
| Вто Авг 15, 2017 11:33 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 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 |
|
 |
|
radolin
Ранг: Форумен бог
Регистриран на: Пон Дек 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 |
|
 |
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 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 |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
 Re: I2C малко помощ
В "i2c1.c" в слейва има Въпросния макрос трябва да е същия като в заявката от мастъра: Ако и така не работи, вече незнам от какво може да е...
|
| Сря Авг 16, 2017 11:27 am |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: I2C малко помощ
При втория случай предаваш адрес-указател към първия елемент на масива - да, при първия - не ми е много ясна терминологията Radolin и Syscop сякаш различни неща са написали. C::B издаде предупреждение, www.onlinegdb.com нищо не каза, IAR издаде грешка. Първите 2 не знам какъв резултат са дали като код, но на IAR му казах да не спира на тази грешка и асемблерлистинга показа еднаква компилация на двата реда. Интересно беше.
|
| Сря Авг 16, 2017 1:54 pm |
|
 |
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 2:21 am Мнения: 12765 Местоположение: София
|
 Re: I2C малко помощ
По-важното е да видиш каква е грешката ти, и да не я повтаряш. Масивът има 10 клетки с адреси от 0 до 9...
|
| Сря Авг 16, 2017 2:03 pm |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 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 |
|
 |
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 2:21 am Мнения: 12765 Местоположение: София
|
 Re: I2C малко помощ
Клокът е ужасен.  Хубаво е поне малко формата да наподобява правоъгълна... Та, намали стойността на пулъп резисторите.
|
| Сря Авг 16, 2017 2:10 pm |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: I2C малко помощ
Това е от китайската измервателна хапаратура 
|
| Сря Авг 16, 2017 2:16 pm |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
 Re: I2C малко помощ
Значи следващия въпрос ще е защо данните от слейва не са такива, каквито трябва да бъдат Язък, дето се плючихме 3 страници да обясняваме разликата между байт и указател към байт.
|
| Сря Авг 16, 2017 2:18 pm |
|
 |
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 2:21 am Мнения: 12765 Местоположение: София
|
 Re: I2C малко помощ
Като гледам картинките, китайската измервателна техника има достатъчен семпълрейт за да хване поне няколко семпъла за стабилна лог. 1. Намали резисторите. Сега колко са, 4к7?
|
| Сря Авг 16, 2017 2:30 pm |
|
 |
|
radolin
Ранг: Форумен бог
Регистриран на: Пон Дек 19, 2005 12:21 pm Мнения: 1037
|
 Re: I2C малко помощ
За първия syscop казва адресът на указателя, което аз го разбирам като указател към указател към uint8_t, но според мен не е така.
|
| Сря Авг 16, 2017 2:43 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|