реклама на сайте
подробности

 
 
> DS18b20, Исходный код ARM
huntero4ek
сообщение May 25 2009, 14:41
Сообщение #1





Группа: Новичок
Сообщений: 11
Регистрация: 24-05-09
Пользователь №: 49 496



Здравствуйте. Хочется сделать небольшую программку на AT91SAM7 для получения температуры с датчика DS18b20, самому писать не хочеться) Обыскал инет и не нашел ничего полезного. Для AVR - уйма всяких исходников, а вот под ARM - ни одного. Буду очень благодарен (и думаю не только я), если кто-нибудь выложит исходный код опроса термодатчика под IAR)))
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
huntero4ek
сообщение Jun 2 2009, 22:05
Сообщение #2





Группа: Новичок
Сообщений: 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;
}
Причина редактирования: Уменьшение видимого размера цитаты исходника.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 3 2009, 07:55
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(huntero4ek @ Jun 3 2009, 02:05) *
Может есть какой-нить другой способ?

Логично было бы выставить вывод в "0" (PIO_CODR) и упрвлять направлением через PIO_OER/PIO_ODR, не трогая pull-up, который вообще должен быть внешним.
Go to the top of the page
 
+Quote Post
huntero4ek
сообщение Jun 3 2009, 08:26
Сообщение #4





Группа: Новичок
Сообщений: 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 по-умолчанию включен. На шине установится высокий уровень??
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 08:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01405 секунд с 7
ELECTRONIX ©2004-2016