|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 8:03 pm
| Автор |
Съобщение |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 Re: I2C малко помощ
Ама и без нея ... пак си е малко рисково, рачиташ че нещо ще се случи, ама то може да не се случи, аз би му турил един таймер, препдолагам някой таймер ти прави тайм бейс и е на прекъсване, зареждаш си някакъва променлива и в тялото на while само я проверяваш, и за да е бърза проверката може да я сетваш така че да следиш определен бит, примерно искаш 16 тайм бейза, и я зареждаш 1F и проверяваш само 5-ти бит, стане ли 0 преебваш whilе и караш нататък. така проверката ти е една команда, не е някакво съществено забавяне.
|
| Сря Авг 16, 2017 9:19 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: I2C малко помощ
Е, това е за друга тема вече  "Многозадачна риълтайм система с ПИК12Ф508."
|
| Сря Авг 16, 2017 9:26 pm |
|
 |
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 8:04 pm Мнения: 2663 Местоположение: София / Велико Търново
|
 Re: I2C малко помощ
Само да вметна относно квадратните скоби: Името на масива е указател към неговият първи елемент : Rxbuffer = &Rxbuffer[0]
|
| Чет Авг 17, 2017 12:09 am |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: I2C малко помощ
Може ли един pic (16F1847) да работи едновременно, като SPI master и като I2C master?
Като SPI master, управлява LCD контролер а като I2C master трябва да чете данни от I2C slave МК за да се визуализират на дисплея.
Това, което наблюдавам е, че щом се инициализира I2C, SPI спира да работи.
|
| Пон Авг 21, 2017 1:13 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: I2C малко помощ
Имаш 2 серийни устройства в чипа - ако са им свободни краката, така че изборът си е твой; Ако искаш да ползваш само един - викаш инициализация за СПИ преди трафика, после викаш инициализация за И2Ц - преди трафика - и така си ги редуваш ; Хубаво е И2Ц Д-поне да не е общ пин и за 2-та режима ; Другият подводен камък е - че И2Ц устройства могат да се ошашавят и по КЛОК жицата ; Така че - най добре ползвай двете устройства на чипа;
|
| Пон Авг 21, 2017 1:28 pm |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: I2C малко помощ
Аз ползвам двете устройства:
MSSP1 (SPI master) с пинове SDO1 (RB2) и SCK1 (RB4).
и
MSSP2 (I2C master) с пинове SDA2 (RB2) и SCL2 (RB5)
Пиновете ми ги е конфигурирал MCC и както е видно този за данните на двата модула съвпада.
|
| Пон Авг 21, 2017 2:00 pm |
|
 |
|
ig_ivanov
Ранг: Професионалист
Регистриран на: Съб Май 21, 2016 9:47 pm Мнения: 577 Местоположение: Бургас
|
 Re: I2C малко помощ
Пробвал съм да ползвам SPI и I2C за две различни устройства- понякога работи, понякога- не. Говорих по случая и с един колега- и той също каза, че е ненадеждно. Пробата беше такава- инициализация I2C, предаване и приемане на данни, забрана на модула, инициализация ма SPI, разрешаване на slave (-SS), предаване/приемане на данни, забрана на модула... Доколкото успях да установя- губеше ми се първия входящ байт при SPI при превключването I2C->SPI. Най-вероятно се получава (поне според мен), щото и двата протокола ползват един и същ регистър (SSPBUF).
Последна промяна ig_ivanov на Пон Авг 21, 2017 3:25 pm, променена общо 1 път
|
| Пон Авг 21, 2017 3:20 pm |
|
 |
|
Stoimen
Ранг: Популярен
Регистриран на: Пет Юни 25, 2010 3:18 pm Мнения: 363 Местоположение: Varna
|
 Re: I2C малко помощ
SDO1 можеш да го ремапнеш на RA6 чрез bit6 на APFCON0. Описано е на стр. 120 от datasheet-a.
|
| Пон Авг 21, 2017 3:23 pm |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: I2C малко помощ
Много ти благодаря! Прехвърлих SDO1 на RA6 и така SPI вече работи без да спира след инициализацията на I2C. Сега остава да тествам I2C.
|
| Пон Авг 21, 2017 4:00 pm |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: I2C малко помощ
Всичко е точно и с I2C. Предстои да тествам доколко стабилно работят двата протокола с повечко премятани данни и с повече slave устройства. Благодаря Ви за насоките!
|
| Пон Авг 21, 2017 5:34 pm |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: I2C малко помощ
В I2C.c на slave има функцията: когато въведа в буфера някакви константи, примерно: EEPROM_Buffer[1]=66; EEPROM_Buffer[2]=80; те се четат успешно от master - а. Но аз искам да въвеждам променливи, които се формират в цикъла while(1). Примерно: EEPROM_Buffer[3]= d11; Къде и как трябва да декларирам променливата d11 за да може стойността и от основния цикъл да се запише в EEPROM_Buffer[3]?
|
| Сря Авг 23, 2017 2:12 pm |
|
 |
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 8:04 pm Мнения: 2663 Местоположение: София / Велико Търново
|
 Re: I2C малко помощ
е къде - глобална 
|
| Сря Авг 23, 2017 3:21 pm |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: I2C малко помощ
Това "InitAlabala();" не ми го приема.  Сигурно нещо аз не правя, както трябва, но разбрах важното - че трябва да деклалирам променливата, като глобална. Някъде прочетох, че това може да стане, като във файла, където се намира ISR функцията, променливата се декларира, като "volatile" и после в main се декларира, като "extern". Направих го така и работи  Благодаря за помощта! 
|
| Сря Авг 23, 2017 3:55 pm |
|
 |
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 8:04 pm Мнения: 2663 Местоположение: София / Велико Търново
|
 Re: I2C малко помощ
InitAlabala() е функция в която си правиш първоначалните настройки. Това е само примерно.... А ако искаш d11 да се вижда от I2C.c, трябва да я декларираш там extern char dll . Само че така бараш из готова библиотека... А аз предполжих, че statement-a EEPROM_Buffer[3] = d11 се намира във main.c , тогава няма нужда I2C.c да знае за променливята d11, просто като параметър подаваш d11...
|
| Сря Авг 23, 2017 7:49 pm |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: I2C малко помощ
Извинявам се за тъпия въпрос, но искам да съм сигурен....... При започване на I2C комуникация :  Ако в момента на деветия тактов импулс (ACK бита) SDA жицата е в състояние лог 1, това означава, че няма slave разпознал адреса си и ако е в състояние 0, означава, че има такъв?
|
| Пет Мар 02, 2018 6:58 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|