помогите переделать, библиотеку ds18b20 под мои требования.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

помогите переделать, библиотеку ds18b20 под мои требования.

Сообщение O-LED »

Значит по порядку.
Пишу в CVAVR. Использую термометр DS18B20. библиотеку работы с ней беру стандартную из CVAVR. Алгоритм работы у неё, как вы наверное знаете, следующий -
команда на измерение температуры - пауза(длительность зависит от точности измерения, до 750мкс) - чтение температуры.
Так вот, если просто делать какой термометр, то такой алгоритм вполне подходит. а вот если делать устройство посложней, которое постоянно чтото обрабатывает, и должно откликаться в режиме реального времени, то в момент паузы мы получаем "затык" в работе длинной 750мкс. Это очень сильно портит впечатление от работы устройства.
Что хотелось бы.
Хотелось бы иметь такую библиотеку, чтоб я сам мог дать команду на измерение, например ds18b20_convert(), потом сам, любым удобным мне способом, отсчитал нужную паузу(а в это время моя программа крутится в обычном режиме, без всяких "туплений"), а потом прочитал уже готовый результат например ds18b20_readTemp()
Полазив по инету, подходящей мне библиотеки не нашел. кругом примеры и обучалки на базе встроенной в CVAVR библиотеки.
Помогите найти, или изменить имеющуюся под мои требования. желательно чтоб она поддерживала несколько датчиков, (хотя это наверное не трудно добавить).
Спасибо.
KIT
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение ARV »

на моем сайте есть проект "термостат - меньше не бывает", он с исходниками. там есть библиотечка для работы с 1-wire и с термодатчиками в том числе. вся работа ведется так, что реализовать задуманное вами - не представляет проблем. проблему для вас будет представлять то, что я писал библиотеку для WinAVR, и под закидоны вашего CVAVR вам самостоятельно придется ее адаптировать.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
AndreiVV
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс май 11, 2008 19:12:34

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение AndreiVV »

вот под codevision
Вложения
ds18b20.rar
(1.61 КБ) 902 скачивания
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение O-LED »

Большущее спасибо, :beer: особенно AndreiVV за библиотеку. Впринципе это то что я искал, но как оказалось не совсем то что нужно. Конечно, отклик программы стал моментальным, но в момент чтения температуры появилось помиргивание индикаторов. Залез я тогда в lib , и нашел там запрет прерываний на время выполнения команд w1_write(0x44); и w1_init(); Ради эксперимента попробовал убрать запрет прерываний - и, о чудо, помиргивание естественно пропало. После этого я решил посмотреть увеличилось ли количество "ложных" ответов от дски. и к моему удивлению, сколько было, столько и осталось :dont_know: так нафига мне эти запреты если нету разницы, подумал я, и оставил в таком виде. единственно сделал проверку на коректность чтения результата, и если он не корректен - это чтение игнорирую.
Так я получил то что хотел :)))
KIT
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Pavel V.
Мявтор!
Сообщения: 384
Зарегистрирован: Ср май 17, 2006 18:39:01
Откуда: Москва
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение Pavel V. »

Если еще интересно, могу завтра выложить свою библиотеку для температурных датчиков. Правда, она на C++ написана, но перенести на "голый" C проблем не составит.

В протоколе 1-Wire важна длительность задержки только в начале формирования тайм-слота и составляет максимум 15 мкс при чтении бита. Остальные задержки не нормированы и должны составлять "не менее" некоторой величины. Соответственно, на это время запрещать прерывания не нужно.

Вот процедуры записи и чтения бита данных, здесь можно увидеть в каких местах и на сколько должны запрещаться прерывания.

Код: Выделить всё

template<uint16_t PORT, uint16_t PIN>
void OneWire<PORT, PIN>::WriteBit(uint8_t bit) {
	uint16_t intState = __get_interrupt_state();
	__disable_interrupt();
	SetPinOutput();
	SetPinLow();
	DelayMks(2);
	if(bit) {
		SetPinInput();
	}
	__set_interrupt_state(intState);
	DelayMks(70);
	SetPinInput();
	PullUpPin();
}

template<uint16_t PORT, uint16_t PIN>
uint8_t OneWire<PORT, PIN>::ReadBit(void) {
	uint16_t intState = __get_interrupt_state();
	__disable_interrupt();
	SetPinOutput();
	SetPinLow();
	DelayMks(2);
	SetPinInput();
	PullUpPin();
	DelayMks(13);
	uint8_t result = IsPinLow() ? 0 : 1;
	__set_interrupt_state(intState);
	DelayMks(45);
	return result;
}
Реклама
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение O-LED »

хоть я и решил проблему, но все равно интересно. конечно выложи, вдруг будет работать без ложных ответов.
Да и просто на будущее пусть будет.
KIT
Реклама
Аватара пользователя
Pavel V.
Мявтор!
Сообщения: 384
Зарегистрирован: Ср май 17, 2006 18:39:01
Откуда: Москва
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение Pavel V. »

Ок, завтра выложу.

ПС
У меня проблем с получением ложных данных нет, хотя софтина работает под операционкой, а следовательно, функции работы с протоколом испытывают периодическое переключение контекста :)

Библиотека под MSP430, но перенести будет легко на любую платформу, надо только переписать функции, ответственные за ногодрыжество.
Аватара пользователя
Pavel V.
Мявтор!
Сообщения: 384
Зарегистрирован: Ср май 17, 2006 18:39:01
Откуда: Москва
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение Pavel V. »

Как обещал, вот библиотека.

Как работает:
- Первым делом надо произвести сканирование шины на наличие присоединенных устройств, найденные идентификаторы запоминаются с специальной табличке.
- Запустить преобразование температуры
- Считать результат

Как использовать в программе:

Код: Выделить всё

uint8_t oneWireCount = 0;
OneWire<6, 7>* oneWire;
Environment* env;

oneWire = new OneWire<6, 7>();
env = new Environment(oneWire);

oneWireCount = env->Search();
env->StartConversion();
Sleep(1000);
env->ReadTemp();

for (uint8_t i = 0; i < oneWireCount; ++i) {
    int8_t temp = env->GetTemp(i);
}
У меня обрезается значение температуры после запятой, если надо полное значение, нужно переписать кусочек метода Environment::ReadTemp(void).

Также, не реализован сокращенный режим работы (SKIP ROM), когда подключено одно устройство и запись настроек в датчик. Там все просто, но не было необходимости.
Вложения
onewire.zip
(5.46 КБ) 361 скачивание
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение ARV »

ага, например для тини2313 применение динамического построения объектов в памяти и вообще собъектно-ориентированные программки - самое то, что требуется :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение O-LED »

Pavel V. - спасибо. правда "переписать библиотеку" это пока не про меня.......
ARV хочу вас спросить, как знатного термометростроителя. какого минимального размера можно получить код для работы с дс18В20?? Например, нелюбимый вами кодевижн" генерит примерно 1,6кб кода только для работы с дской. в тоже время видел реализованные на тини2313 навороченные часы с термометром.
Спасибо.
KIT
Аватара пользователя
Pavel V.
Мявтор!
Сообщения: 384
Зарегистрирован: Ср май 17, 2006 18:39:01
Откуда: Москва
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение Pavel V. »

ARV писал(а):ага, например для тини2313 применение динамического построения объектов в памяти и вообще собъектно-ориентированные программки - самое то, что требуется :)))
Для больших процессоров (и соответственно, больших приложений) применение C++ считаю оправданным. ОО-код именно для МК для меня новая сфера, только осваиваюсь. До этого на плюсах писал только для уж совсем больших процессоров :)
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение ARV »

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

Код: Выделить всё

int main(void){
   while(1){
      if(get_temperature(NULL) > 55)
      	PORTB |= _BV(PB1);
      else
        PORTB &= ~_BV(PB1);
      _delay_ms(1000);
   }
}
с моими библиотеками компилируется в 510 байт кода, т.е. влезет в attiny13 и еще место останется.

Pavel V., если вы мне объясните, в чем в данном случае смысл использования не статического объекта, а динамического (а при использовании статического объекта в чем тогда разница с не-ОО программированием), а так же оправдания ОО-подхода для системы, в которой нет "развития" классов - я пойму смысл его использования и для очень больших процессоров. а иначе - увы...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Pavel V.
Мявтор!
Сообщения: 384
Зарегистрирован: Ср май 17, 2006 18:39:01
Откуда: Москва
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение Pavel V. »

Код: Выделить всё

[b]Pavel V.[/b], если вы мне объясните, в чем в данном случае смысл использования не статического объекта, а динамического (а при использовании статического объекта в чем тогда разница с не-ОО программированием), а так же оправдания ОО-подхода для системы, в которой нет "развития" классов - я пойму смысл его использования и для очень больших процессоров. а иначе - увы...
А что подразумевается под "развитием" классов? Наследование?
Для меня преимущества ОО подхода к программированию - это в первую очередь возможность обеспечить модульность и расширяемость системы. А еще шаблоны, виртуальные функции и т.п. Все эти возможности C++ чрезвычайно мощные и удобные.
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение O-LED »

ARV фиг его знает что там делает кодвижн, но если создать проект для 2313, с мульти поддержкой разных типов датчиков (DS1820 DS18S20 DS18B20) и автоматическим определением их числа, и больше ничего не трогать(ну кроме плюс еще 1-wire естественно ), а потом компильнуть, то получается код занимающий 73 процента пямяти, или немного меньше чем 1,6 кб.

выложите пожалуйста свои библиотеки. я так понимаю они для WinAVR?? сохраню, пусть будут, может пригодятся. Кстати. а для WinAVR не проблема всякие библиотеки?? а то надумаю перейти на него, а окажется что на него гораздо меньше всего чем на кодевижн.
KIT
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение ARV »

библиотеки не библиотеки, а исходники модулей для 1-wire есть в составе моих проектов, ранее я писал, каких - вы можете абсолютно свободно скачивать их с моего сайта.

для WinAVR полно всего, от универсальных библиотек для всего до автогенераторов кода по типу кодвижна.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Pavel V.
Мявтор!
Сообщения: 384
Зарегистрирован: Ср май 17, 2006 18:39:01
Откуда: Москва
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение Pavel V. »

WinAVR - это ни что иное как GCC, а под него примеров пруд пруди. CV - редкая какашка, крайне не рекомендую использовать в работе. Разве что только в самом-самом начале из-за удобного мастера конфигурирования. И то, идея использовать мастер для конфигурации периферии весьма спорная, потому что поддерживать этот код впоследствии совершенно невозможно.
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение O-LED »

Понятно. спасибо.
Текущий проект доделаю уже в кодевижн, а потом посмотрим, может и перейдем на вин-авр.
а какие еще в нем плюсы?? читал что код меньше. что еще? чем он лучше кодевижена, например если не пользоваться генератором начального кода.
KIT
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение Amstron »

Скачал я этот файл ds18b20.rar

Заменил библиотеки (старые удалил).
Подключил файл #include <ds18b20_.h>

В итоге у меня выскакивает ошибка в этой строчке:
temp=ds18b20_temperature(0)*10;//команда для получения значения температуры
Компилятор CodeVisionAVR C Compiler ругается на "ds18b20_temperature"

В чем дело??? Пересмотрел библиотеки, ответа не нашол.
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение O-LED »

какая ошибка? как объявлена переменная temp?
KIT
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: помогите переделать, библиотеку ds18b20 под мои требован

Сообщение Amstron »

O-LED писал(а):какая ошибка? как объявлена переменная temp?
Переменная temp объявленна как unsigned int , также пробывал и float

На самом деле, в файле ds18b20_.lib нет функции ds18b20_temperature! Она закоментированна...
Пробывал ds18b20_read_temp, то тогда пишет постоянное число 85.

Ошибка такая : L184: undefained symbol "ds18b20_temperature"
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»