| Автор |
Съобщение |
|
Boris666
Ранг: Минаващ
Регистриран на: Чет Яну 03, 2013 11:53 am Мнения: 17
|
 Сензор за температура
Имам проблем с инициализирането на температурен сензор tcn75 и pic16f886 използвайки i2c. Някой може ли да ми даде примерен код или начин за инициализацията. Благодаря предварително.
|
| Чет Яну 03, 2013 12:00 pm |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
 Re: Сензор за температура
Преди около 1,5 год. имах някакви проблеми с него. Потърси из форума.
_________________ Хайде де!
|
| Чет Яну 03, 2013 12:40 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Сензор за температура
tcn75 или tcn75a?
Ако ще четеш темепратура : за версията без а (стария модел) - няма нужда от инициализация - директно четеш адрес 0 два байта. Дава 9 битов резултат (като във втория байт, старшия бит май беше най-младшия бит от резултата.) За версията с а (новия модел) е същото за 9 битов резултат - няма нужда от инициализация с цел обратна съвместимост. За 12 бита вече се пишеше в някакъв регистър - което вече е един вид инициализация. Нито при четене нито при писане има някакви особенности, стига да се спазват описаните в даташита спецификации за четене/писане, които до колкото си спомням са си съвсем стандартно i2c.
Което според мен ще рече, че нещо не правиш правилно с i2c-то.
|
| Чет Яну 03, 2013 3:48 pm |
|
 |
|
Boris666
Ранг: Минаващ
Регистриран на: Чет Яну 03, 2013 11:53 am Мнения: 17
|
 Re: Сензор за температура
Сензорът е tcn75a. Все още не съм го пуснал, защото в момента пиша кода. Имам затруднение при комуникацията с чипа, защото немога да разбера как да я направя.
|
| Чет Яну 03, 2013 3:58 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Сензор за температура
Е та на кво го пишеш тоя код?
Тоя пик има хардуерен i2c - малко е крив, ама работи.
Реално погледнато нямаш проблем с комуникацията с чипа, а просто не знаеш как да подкараш i2c шината.
|
| Чет Яну 03, 2013 4:13 pm |
|
 |
|
Boris666
Ранг: Минаващ
Регистриран на: Чет Яну 03, 2013 11:53 am Мнения: 17
|
 Re: Сензор за температура
void I2CInit(void) { TRISC3 = 1; TRISC4 = 1; SSPSTAT |= 0x80; SSPCON = 0x28; SSPADD = 0x28; }
void I2CStart() { SEN = 1; while(SEN); }
void I2CStop() { PEN = 1; while(PEN); }
void I2CRestart() { RSEN = 1; while(RSEN); }
void I2CAck() { ACKDT = 0; ACKEN = 1; while(ACKEN); }
void I2CNak() { ACKDT = 1; ACKEN = 1; while(ACKEN); } void I2CWait() { while ( ( SSPCON2 & 0x1F ) || ( SSPSTAT & 0x04 ) );
} void I2CSend(unsigned char dat) { SSPBUF = dat; while(BF); I2CWait(); } unsigned char I2CRead(void) { unsigned char temp;
RCEN = 1; while(!BF); temp = SSPBUF; I2CWait(); return temp; }
Toва ми е кода за i2c. Проблема, е че не знам как да стане тази комуникация и как да я напиша.
|
| Чет Яну 03, 2013 6:08 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Сензор за температура
Пиша по спомен, та ако някой види грешка да свирка.
последователността е следната:
1.старт 2.изпращане на адрес(хардуерен + write/read в зависимост това дали ще четеш директно или първо ще подадеш адрес на клетката за четене) 3.чакаш ack 4.1. ако ще четеш директно си четеш 4.1.1. ако ще четеш още подаваш ack и пак четеш 4.1.2. ако няма да четеш, даваш noack и/или stop 4.2. ако първо ще подадеш адрес : 4.2.1. подаваш адреса (трябва в точка 2 бита да ти е за писане) 4.2.2. REstart!!! 4.2.3. изпращаш ПАК хардуерния адрес с бит за чете 4.2.4. чакаш ack 4.2.5. четеш 4.2.6. ако пак ще четеш : пращаш ack и четеш (колкото байта искаш да прочетеш 4.2.7. noack и/или stop
Това го има описано навсякъде из нетя.
В конкретния случай имаш i2cstart i2csend(адреса с бит0 = 1) --- тука трябва да си сложиш проверка за ack от дивайса и евентуално да го изчакаш мъничко i2cread(старши байт) i2cack i2cread(младши байт) i2cnak или директно i2cstop
Намери си начин за излизане от тия функции дори и да не се изпълни условието за излизане - всичко става - така написано принципно има вероятност програмата там да увисне и да чака до "видов ден" бита да стане 0...
|
| Пет Яну 04, 2013 10:42 am |
|
 |
|
Boris666
Ранг: Минаващ
Регистриран на: Чет Яну 03, 2013 11:53 am Мнения: 17
|
 Re: Сензор за температура
Наложи се да си сменя чипа от pic16f886 на pic16f913, сложих му готов код i2c от примерите на hi-tech. Проблема ми, е че при компилиране на иницилазацията на tcn75 ми дава грешка и другият ми проблем е как да изпратя информацията от контролера към LCD. кода за tcn 75 Хора, ползвайте [Code] бутона горе
|
| Нед Яну 20, 2013 12:53 pm |
|
|