| Автор |
Съобщение |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
 pic24 C30 portb проблем
Здравейте!
Понеже I2C интерфейса на Pic24fj32GA004 ми прави само проблеми, реших да си спретна една софтуерна имплементацийка на I2C на същите пинове (защото платката вече съм я направил).
До някъде нещата се получиха: Изпращам нормални старт условие и данни, но щом добавих и код за четене на ACQ от сензора нещата се объркаха. Какво ставана: щом добавих кода за ack, при стартиране на програмата не се качва нивoтo на SDA.(има нещо като малко импулсче).
Свързал съм SDA и SCL с 1,5k pull-up резистори.
в main има следното:
в файла за I2C имам: idle_line: старт: изпращане на данни: за ACQ :
Ето oсцилограма, ако изпращам само данните (без кода за ack):
http://img253.imageshack.us/i/send0x90withoutacq.png/
А с добавен код за ack:
http://img401.imageshack.us/i/send0x90withacq.png/
Някой има ли представа защо може да става така?
_________________ Хайде де!
|
| Вто Окт 26, 2010 4:40 pm |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
Странно. Като махнах сензора (TCN75) нещата се оправиха. Явно TCN-а е държал линията долу.
Само ми е чудно защо. Нали след 8-ти такт (което за него е ack)трябва да освободи линията...
_________________ Хайде де!
|
| Вто Окт 26, 2010 5:09 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
След осмия такт трябва да има девети(и задържаш клока в ниско ниво) и тогава чакаш АСК. При ниско ниво на SDA можеш да продължиш със следващи 8+1 такта или да генерираш STOP. При високо ниво на SDA(NACK - нещо не е наред) трябва да генерираш STOP.
|
| Вто Окт 26, 2010 9:46 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
@dan, я потърси из форума за тоя датчик. Имаше преди 2-3 месеца пак някакъв такъв проблем и се беше решил.
|
| Вто Окт 26, 2010 10:14 pm |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
Аз наскоро пак го борих този чип, но тогава беше друго.
Наистина щом смъкнах последния клок на '0' и чипчето освободи линията SDA.
_________________ Хайде де!
|
| Сря Окт 27, 2010 2:52 am |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
ха 24ката позволява да пипнеш два пъти последователно един и същи порт? 30ката е бъгната и първото пипване не се случва, ако няма между тях поне едно нопче, много дразнещ бъг, много.
|
| Сря Окт 27, 2010 7:26 am |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
@zaphod
Сега забелязах подобен бъг и тук: в следния код:
На реда за сетване на RB9 ми се изчиства предварително сетнатия RB13...
_________________ Хайде де!
|
| Вто Ное 02, 2010 4:56 pm |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
Странно, добавих NOP-чета, но проблема си остана същия.
Докато използвах pic12 и pic16 си бях свикнал с шадоу регистрите, ама егати 24-ката, ако и тук трябва да ги ползвам
А още по-странното е, че и симулатора си го показва, че става така...
_________________ Хайде де!
|
| Вто Ное 02, 2010 5:09 pm |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
Най-любезно моля господата от Мокрочип да ми простят, за всичко което отнесоха. Не съм изключил аналоговата функция на пина 
_________________ Хайде де!
|
| Вто Ное 02, 2010 5:40 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
не, онова е друго, ако беше 30ка нямаше да се изпълни първото обръщение, а не да пипне грешен пин.
|
| Сря Ное 03, 2010 8:50 am |
|
|