Перейти к содержанию

Как Работать С 1wire?


Рекомендуемые сообщения

Здравствуйте!

Не могу понять, как правильно работать с 1 wire? Интересует полностью процесс обмена данными. Прочитал несколько статей по 1 wire, даташиты. Везде есть примеры, но все для асма и всяких там Бесиков. не нашел примеров работы на С, а в других средах я пока что не рублю ниче :(

Вот моя начальная задача:

Имеется 1 датчик температуры ds18b20. Нужно узнать какая температура.

Как это сделать на С???

Пишу на С в Кодвижн авер под 16 мегу.

Кста, еще вопрос: я случайно коннектил датчик температуры к ПИНС.6, а не к ПИНС.1 так можно использовать, или полюбому надо на 6 пин подключить?

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Спасибо большое! Стало чуть понятнее, но все-таки, просьба для тупого объяснить, что за чем должно следовать?

Вот например, предварительно настроив 1 wire, таким образом:

#asm
  .equ __w1_port=0x15;PORTC
  .equ __w1_bit=1
#endasm
#include <1wire.h>

// DS1820 Temperature Sensor functions
#include <ds1820.h>

имеем функцию срабатывания таймера, каждые 2 минуты, в которой надо мерять температуру:

interrupt [TIM1_OVF] void timer1_ovf_isr(void){

Что здесь написать?

}

Я понял все про тайминги, там ресет, вроде и т.д., но что КОНКРЕТНО делать не ясно. По вышеприведенным ссылкам, есть много кодов, но, я думал, как-то попроще должно все работать.. Ну и не совсем рублю всех инструкций.

Ссылка на комментарий
Поделиться на другие сайты

Hongfa для различных применений в Компэл. Большой выбор в наличии!

Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Нашел кусок кода, описанный во многих статьях:

 temp=ds18b20_temperature(0);  //читаем температуру  
	  if (temp>1000){			   //если датчик выдаёт больше 1000 
		 temp=4096-temp;			//отнимаем от данных 4096 
		 temp=-temp;				//и ставим знак "минус"

Если тупо в прерывание таймера вписать этот кусок, то будет ли работать? или еще чего надо?

Ссылка на комментарий
Поделиться на другие сайты

Тренды и лучшие решения для разработки зарядных станций в России

К 2029 году в России прогнозируется увеличение числа зарядных станций до 40 000. При этом отечественный рынок электротранспорта имеет климатические, потребительские и географические особенности. Для успешной разработки и построения инфраструктуры станций заряда в России идеальным вариантом является использование решений и электронных компонентов китайских производителей – лидеров индустрии электротранспорта и возобновляемой энергетики, которые уже представлены в КОМПЭЛ. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Где-то сдесь эта ссылка уже проскакивала Реобас. В исходниках есть код для работы с 1wire +коментарии. Правда написано под WinAVR, но разобраться что к чему и переделать под CVAVR можно.

Ссылка на комментарий
Поделиться на другие сайты

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

имеем функцию срабатывания таймера, каждые 2 минуты, в которой надо мерять температуру:

interrupt [TIM1_OVF] void timer1_ovf_isr(void){

Что здесь написать?

}

Найдите справку по функциям входящим в хендлер 1wire.h, коль Вы его уже включили в компиляцию...

Вот это, например, temp=ds18b20_temperature(0) вернет в переменной temp температуру с датчика.

Вообще, лучше разберитесь на уровне железа в работе 1-выра, будет понятно что делать на Сях. ИМХО

Errare humanum est. Коли людЯм позволено, что же о нас то говорить!
 

Ссылка на комментарий
Поделиться на другие сайты

Вот все функции для работы с датчиками ds18x20 от производителя: http://forum.cxem.net/index.php?act=attach...st&id=56666

Будьте проще и люди к вам потянутся.

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

"Если тупо в прерывание таймера вписать этот кусок, то будет ли работать? или еще чего надо?" будет но обработчик прерывания должен быть как можно короче, в идеале там только выставляют флаги, а их обработку и принятие рещений делают в основном цикле, но если кроме измерения температуры больше делать нечего то можно код обрабатывать и в прерывании.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Я писал как раз для DS18B20, давно это было... Вот, если поможет, куски моего кода:

#include <mega8.h> 
#include <delay.h>
#include <math.h>
#include <1wire.h>

#asm
     .equ __w1_port=0x15 ;PORTC // настройка вывода шины
     .equ __w1_bit=1  // // настройка вывода шины
#endasm

#define MAX_DEVICES 4

unsigned char rom_codes[MAX_DEVICES][9], devices;
char Temp1, Temp2, Temp3;
char TempInt, MSB, LSB;

void main(void)
{
int i;
#asm("cli")
devices = w1_search(0xf0,rom_codes);
#asm("sei");
while (1)
// **************** Calling of all sensors **************** //
{
#asm("cli")
w1_init();
w1_write(0xCC);
delay_ms(10);
w1_write(0x44);
#asm("sei");
delay_ms(760);
#asm("cli");
w1_init();
w1_write(0x55);
delay_ms(10);
for (i=0; i<8; i++)
 w1_write(rom_codes[0][i]);
w1_write(0xBE);
delay_ms(10);
LSB = w1_read();
delay_ms(10);
MSB = w1_read();
LSB = (LSB >> 4) & 0b00001111;
MSB = (MSB << 4) & 0b01110000;

TempInt = MSB + LSB; //здесь по идее лежит температура
#asm("sei")
// *************End Of Calling of all sensors ************* //
}
}

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...