|
DS18b20, Исходный код ARM |
|
|
|
May 25 2009, 14:41
|
Группа: Новичок
Сообщений: 11
Регистрация: 24-05-09
Пользователь №: 49 496

|
Здравствуйте. Хочется сделать небольшую программку на AT91SAM7 для получения температуры с датчика DS18b20, самому писать не хочеться) Обыскал инет и не нашел ничего полезного. Для AVR - уйма всяких исходников, а вот под ARM - ни одного. Буду очень благодарен (и думаю не только я), если кто-нибудь выложит исходный код опроса термодатчика под IAR)))
|
|
|
|
|
 |
Ответов
|
Jun 2 2009, 22:05
|
Группа: Новичок
Сообщений: 11
Регистрация: 24-05-09
Пользователь №: 49 496

|
Вот написал пару функций для работы с DS18B20 Посмотрите плз, правильно ли они реализованы, в особенности меня интерисует установка "0" или "1" с помощью вкл и выкл подтягивающих резисторов. Может есть какой-нить другой способ? CODE #define IN (1<<29)
void writebit0(void){ AT91F_PIO_CfgOpendrain(AT91C_BASE_PIOA, IN);//формируем низкий уровень _delay_us(60);//по истечении 60us установит флаг DS while(!DS); AT91F_PIO_CfgPullup( AT91C_BASE_PIOA, IN);//формируем высокий уровень }
void writebit1(void){ AT91F_PIO_CfgOpendrain(AT91C_BASE_PIOA, IN);//формируем низкий уровень _delay_us(3); while(!DS); AT91F_PIO_CfgPullup( AT91C_BASE_PIOA, IN);//формируем высокий уровень _delay_us(58); while(!DS); }
void writebyte(unsigned char byte){ unsigned char i; char b; for(i=0; i<8; i++){ b = (1 << i); if (byte&b) writebit1(); else writebit0(); } }
unsigned char readbit(void){ unsigned char i; AT91F_PIO_CfgOpendrain(AT91C_BASE_PIOA, IN);//формируем низкий уровень _delay_us(10); while(!DS); AT91F_PIO_CfgPullup( AT91C_BASE_PIOA, IN);//формируем высокий уровень _delay_us(15); while(!DS); if ((AT91F_PIO_GetInput(AT91C_BASE_PIOA)& IN)==IN) i=1; else i=0; _delay_us(35); while(!DS); return i; }
signed char readbyte(void) { unsigned char i, r, read_byte; for(i=0, r=1, read_byte=0; i<8; i++){ if (readbit()) read_byte|=r; r<<=1; } return read_byte; }
Причина редактирования: Уменьшение видимого размера цитаты исходника.
|
|
|
|
|
Jun 3 2009, 08:26
|
Группа: Новичок
Сообщений: 11
Регистрация: 24-05-09
Пользователь №: 49 496

|
Цитата(aaarrr @ Jun 3 2009, 10:55)  Логично было бы выставить вывод в "0" (PIO_CODR) и упрвлять направлением через PIO_OER/PIO_ODR Т.е. так: Код unsigned char readbit(void){ unsigned char i;
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, IN); AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, IN);//формируем низкий уровень
_delay_us(10); while(!DS); AT91F_PIO_CfgInput( AT91C_BASE_PIOA, IN);//формируем высокий уровень _delay_us(15); while(!DS); if ((AT91F_PIO_GetInput(AT91C_BASE_PIOA)& IN)==IN) i=1; else i=0; _delay_us(35); while(!DS); return i; } После установки низкого уровня ведущим (1-15us) надо "освободить шину". Т.е., сконфигурировав ногу на вход, я как бы ее освобождаю (при этом pull-up по-умолчанию включен. На шине установится высокий уровень??
|
|
|
|
Сообщений в этой теме
huntero4ek DS18b20 May 25 2009, 14:41 HARMHARM Читаете это и это. Остается заменить код, который ... May 25 2009, 16:15 huntero4ek Спасибо конечно, но это опять таки программа для A... May 25 2009, 17:42 huntero4ek Ну если никто не хочет предоставить готовую подпро... May 26 2009, 12:48 Deka ЦитатаНу если никто не хочет предоставить готовую ... May 27 2009, 05:18 huntero4ek Еще раз убеждаюсь в "полезности" форумов... May 27 2009, 16:47  zltigo Цитата(huntero4ek @ May 27 2009, 19:47) Е... May 27 2009, 18:09  aaarrr Цитата(huntero4ek @ May 27 2009, 20:47) П... May 27 2009, 18:39   huntero4ek Цитата(aaarrr @ May 27 2009, 21:39) огда ... May 27 2009, 21:10    zltigo Цитата(huntero4ek @ May 28 2009, 00:10) Д... May 27 2009, 22:27    sergeeff Цитата(huntero4ek @ May 28 2009, 00:10) М... May 28 2009, 05:53    aaarrr Цитата(huntero4ek @ May 28 2009, 01:10) М... May 28 2009, 07:27 huntero4ek если это норм явление, что при висячей ноге на ней... May 28 2009, 08:50 aaarrr Цитата(huntero4ek @ May 28 2009, 12:50) е... May 28 2009, 09:06 huntero4ek Извините, но я не совсем понял, эти строки кода вз... May 28 2009, 09:28 aaarrr Нет, из головы. При чем тут IAR? May 28 2009, 09:32   aaarrr Цитата(huntero4ek @ Jun 3 2009, 12:26) Т.... Jun 3 2009, 08:33    huntero4ek Значит подчиненный способен завалить ногу в 0 даже... Jun 3 2009, 08:36 _Pasha Цитата(huntero4ek @ Jun 3 2009, 01:05) Во... Jun 3 2009, 08:07 aaarrr Естественно. Jun 3 2009, 09:09 huntero4ek Никак не могу побороть проблему с генерацией време... Jun 16 2009, 07:17 aaarrr Цитата(huntero4ek @ Jun 16 2009, 11:17) Р... Jun 16 2009, 08:06  _Pasha Цитата(aaarrr @ Jun 16 2009, 11:06) Навер... Jun 16 2009, 08:10   aaarrr Цитата(_Pasha @ Jun 16 2009, 12:10) dummy... Jun 16 2009, 08:13 huntero4ek таймеры 16-битные, поэтому переделал ф-цию:
Кодvoi... Jun 17 2009, 19:12 aaarrr Цитата(huntero4ek @ Jun 17 2009, 23:12) п... Jun 17 2009, 19:44 huntero4ek т.е. формировать задержки порядка 5мкс - с помощь... Jun 17 2009, 19:48 aaarrr Цитата(huntero4ek @ Jun 17 2009, 23:48) т... Jun 17 2009, 19:53 huntero4ek Чет не совсем понятно что такое поллинг... Jun 19 2009, 11:04 aaarrr Опрос типа while(!(TC_SR & FLAG)); Jun 19 2009, 11:16 huntero4ek Был бы очень благодарен за тестовый примерчик, с э... Jun 20 2009, 20:38 aaarrr Нет, примерчика не будет. А что касается задержек ... Jun 20 2009, 20:54
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|