Всё по DS18(B/S)20.

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Re: Всё по DS18(B/S)20.

Сообщение shads »

Леонид Иванович писал(а):А зачем прерывания запрещать на 600 мкс? Длительность импульса сброса сверху ничем не ограничена. От прерываний нужно защищать только интервал, где мы читаем presence, а это порядка 60 мкс.
О-о. Пасибочки. Я чет не догадался так зделать. А действительно 500 мкс сброса то, пусть хоть 1000 мкс длятся, т.е. тут прерывания можно не запрещать..... А вот перед тем как отпустить линию, да дождаться пресенс, можно запретить прерывания, но это уже сравнительно не много 15-60 мкс.
Аватара пользователя
zebrox
Встал на лапы
Сообщения: 117
Зарегистрирован: Вс апр 12, 2009 22:40:37

Re: Всё по DS18(B/S)20.

Сообщение zebrox »

Всем добрый день!
Вопрос по поводу функции

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

unsigned char w1_search(unsigned char cmd,void *p)
в CVAVR.
В параметре р ей передается указатель на заранее выделенный массив в раме для кодов устройств.
this function returns the number of devices connected to the 1 Wire bus.
If no devices were detected then it returns 0.
The byte cmd represents the Search ROM (F0h), Alarm Search (ECh) for the DS1820, DS18S20, or other similar commands, sent to the 1 Wire device.
The pointer p points to an area of SRAM where are stored the 8 bytes ROM codes returned by the device.

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

Есть ли какие-нибудь альтернативные проверенные библиотеки, где этот вопрос учтен?
Аватара пользователя
levaclaus
Потрогал лапой паяльник
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

Re: Всё по DS18(B/S)20.

Сообщение levaclaus »

такая беда. подключаю 18б20 к контроллеру, температура -999. Т.е. контроллер не видит датчик. Поставил кварц на 12мгц. без результатов. Датчик подключал к другому устройству - там все работает - датчик исправен. Както нагреваю этот датчик паяльником и опа- показал контроллер температуру 104 градуса. Перестал греть, температура начала падать и примерно на 50 градусах датчик опять пропал (-999).
подтяжка 4.7к, полярность верна, кварц внешний на 12мгц, фузы 1111 (атмега8)
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Леонид Иванович »

Глюк в программе?
Аватара пользователя
levaclaus
Потрогал лапой паяльник
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

Re: Всё по DS18(B/S)20.

Сообщение levaclaus »

так в этом проблема
Есть термометр на 2313. Я взял из него прогу для термометра, это 3 или 4 строки, вывод на индикатор (немножко побольше). На индикатор всё исправно выводит, в смысле подставляю в tepm число - число на индикаторе.

Потом я проставил метки в программе, программа всё делает что ей положенно, но дойдя до опроса датчика, датчик не находится. deviсe=0

Была похожая проблема, там оказалось косяк с подтяжкой был.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

Проблема в 458-ой строке программы.
Prosperous
Встал на лапы
Сообщения: 129
Зарегистрирован: Ср янв 18, 2012 19:37:10

Re: Всё по DS18(B/S)20.

Сообщение Prosperous »

Друзья, есть у меня библиотека для Winavr по работе с датчиком ds18b20. прикладываю ее и описание по настройке. Много где видел ее использование, все говорят, что работает идеально, а у меня датчик при опросе температуры выдает 0xFF. Такой вопрос у меня датчик глючит или я балбес :)

Процесс интеграции 1-Wire библиотеки с проектом заключается в следующем:

- переписываем файлы библиотеки в папку проекта

- подключаем сишные файлы к проекту
OWIHighFunction.c
OWISWBitFunction.c
OWIUARTBitFunction.c
OWIcrc.c

- добавляем заголовочные файлы в main.c
#include "OWIPolled.h"
#include "OWIHighLevelFunctions.h"
#include "OWIBitFunctions.h"
#include "common_files\OWIcrc.h"

- настраиваем файл OWIPolled.h

- выбираем реализацию OneWire интерфейса – программную
#define OWI_SOFTWARE_DRIVER
//#define OWI_UART_DRIVER

- задаем тактовую частоту микроконтроллера
#define CPU_FREQUENCY 16.000

- задаем порт, к которому подключена OneWire шина
#define OWI_PORT PORTD //!< 1-Wire PORT Data register.
#define OWI_PIN PIND //!< 1-Wire Input pin register.
#define OWI_DDR DDRD //!< 1-Wire Data direction register.

- в main.c задаем вывод, к которому подключена OneWire шина
#define BUS OWI_PIN_7

Для GCC проектов в makefile нужно будет добавить все сишные файлы.
Например, так:

SRC = $(TARGET).c bcd.c lcd_lib.c OWISWBitFunctions.c OWIHighLevelFunctions.c OWIUARTBitFunctions.c common_files/OWIcrc.c?
Вложения
1-wire-ds18b20-winavr.rar
(101.37 КБ) 249 скачиваний
Аватара пользователя
TheTERMINATOR
Вымогатель припоя
Сообщения: 565
Зарегистрирован: Пн авг 27, 2012 10:38:20
Откуда: Москва

Re: Всё по DS18(B/S)20.

Сообщение TheTERMINATOR »

День добрый.

Уважаемые писатели, поделитесь программой простого термометра на DS18B20 для процессора STM8S103. Заранее благодарен.
Prosperous
Встал на лапы
Сообщения: 129
Зарегистрирован: Ср янв 18, 2012 19:37:10

Re: Всё по DS18(B/S)20.

Сообщение Prosperous »

Prosperous писал(а):Друзья, есть у меня библиотека для Winavr по работе с датчиком ds18b20.

В общем все беды от незнания. Отличная библиотека, все работает на ура. Надо было учесть, что отладку необходимо проводить в режиме оптимизации по времени, при другой временные задержки не обрабатываются и датчик врет.
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Всё по DS18(B/S)20.

Сообщение ILYAUL »

Что-то не могу найти в DS какой у неё Family code? Или слона не приметил.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

28h
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Всё по DS18(B/S)20.

Сообщение ILYAUL »

:beer:
elf
Открыл глаза
Сообщения: 60
Зарегистрирован: Чт окт 29, 2009 23:22:03

Re: Всё по DS18(B/S)20.

Сообщение elf »

Добрый вечер уважаемые коты.
Пытаюсь собрать термометр на DS18b20, написал программку под LCD- все нормально работает.
Но возникла необходимость выводить температуру на семисигментник и тут началось.........
Вообщем ничего не показывает.
Ребята гляньте пожалуйста код и тыкните меня носом куда надо :)) .
я думаю ошибка где-то здесь
sot=(temp/100);
des =(temp%100)/10;
edi=(temp %100)%10;

заранее благодарен.

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

#include <mega8.h>               //áèáëèîòåêà ââîäà\âûâîäà
#include <delay.h>               //áèáëèîòåêà çàäåðæêè
#asm                             //ñîîáùàåì êóäà ïîäêëþ÷åí äàò÷èê
        .equ __w1_port=0x18; PORTC
        .equ __w1_bit=7
#endasm                 
/* #asm                             //ñîîáùàåì êóäà ïîäêëþ÷¸í ýêðàí
    .equ __lcd_port=0x12
#endasm
#include <lcd.h>                 //áèáëèîòåêà äëÿ LCD*/ 
#include <1wire.h>               //áèáëèîòåêà ðàáîòû ñ 1Wire
#include <ds18b20.h>             //áèáëèîòåêà äëÿ ðàáîòû ñ äàò÷èêîì ds18b20
#include <stdio.h>               
char lcd_buffer[33];             //ìàñèâ ñ äàííûìè äëÿ ýêðàíà
int temp; //ïåðåìåííàÿ äëÿ õðàíåíèÿ òåìïåðàòóðû
unsigned char devices;         //ïåðåìåííàÿ â êîòîðîé êîëè÷åñòâî ïðèñîåäåí¸ííûõ äàò÷èêîâ
unsigned char cifra [] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7d,0x07,0x7F,0x6F};// Ìàññèâ êîäîâ äëÿ ôîðìèðîâàíèÿ
int sot;//ïåðåìåííàÿ ñîòåí .....................
int des;//ïåðåìåííàÿ äåñÿòêîâ...................
int edi;//ïåðåìåííàÿ åäèíèö.................... 



             
////////////////ÈÍÄÈÊÀÖÈß////////////////////////////////
int q;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
 
q++;//óâåëè÷èâàåì ñ÷¸ò÷èê äèíàìè÷åñêîé èíäèêàöèè 
 switch(q) //Ïåðåáîð îòîáðàæàåìîãî ñåé÷àñ ðàçðÿäà
       {case 1:PORTB=0b11101111;PORTD &= 0x80; PORTD|=cifra [edi];//âûâîä ïåðâîé öèôðû
break;
       case 2:PORTB=0b11011111;PORTD &= 0x80;PORTD|=cifra [des]; //âûâîä âòîðîé öèôðû
break;
       case 3:PORTB=0b10111111;PORTD &= 0x80;PORTD|=cifra [sot];//âûâîä òðåòüåé öèôðû
q=0;

break;}

if (q>=4)q=0;
}      
///////////////////////////////////////////////////////////////////
   



///////////////////ÌÅÐßÅÌ ÒÅÌÏÅÐÀÒÓÐÓ//////////////////////////////
void temperature()
{
if(devices>0)                 //áåñêîíå÷íûé öèêë, åñëè äàò÷èê ïîäêëþ÷îí
      {
          temp=ds18b20_temperature(0);  //÷èòàåì òåìïåðàòóðó 
          if (temp>1000){               //åñëè äàò÷èê âûäà¸ò áîëüøå 1000
             temp=4096-temp;            //îòíèìàåì îò äàííûõ 4096
             temp=-temp;                //è ñòàâèì çíàê "ìèíóñ"
          }
 sot=(temp/100); 
 des =(temp%100)/10;
 edi=(temp %100)%10;
        delay_ms(500); 
          }
       }
////////////////////////////////////////////////////////////////////////       
       
       
       
void main(void)                 
{
PORTB=0b00000000;
DDRB =0b01110000;
PORTC=0x00;
DDRC=0x00;
PORTD=0xff;
DDRD=0xff;
TCCR0=0x03;// Clock value: 125,000 kHz
TCNT0=0x00;
TIMSK=0x01; // Timer(s)/Counter(s) Interrupt(s) initialization                 
/* lcd_init(16);                    //èíèöèèëèçàöèÿ LCD*/ 
devices=w1_init();               //èùèì äàò÷èêè

// Global enable interrupts
#asm("sei")       
     
   
   
   
     
    while(1)
    { temperature();
     
        /*    sprintf(lcd_buffer,"%u - %u - %u",edi,des,sot);    //çàïèñóåìâ ìàñèâ äëÿ ýêðàíà òåìïåðàòóðó è âñ¸ òàêîå
          lcd_clear();                //÷èñòèì äèñïëåé ïåðåä âûâîäîì
          lcd_puts(lcd_buffer);        //âûâîäèì ìàñèâ íà LCD
          delay_ms(500);*/
 
    }
   
     
  }
Последний раз редактировалось Аlex Вт окт 02, 2012 23:03:02, всего редактировалось 1 раз.
Причина: Тег CODE
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

Вообщем ничего не показывает.
А питание подали ? :))
elf
Открыл глаза
Сообщения: 60
Зарегистрирован: Чт окт 29, 2009 23:22:03

Re: Всё по DS18(B/S)20.

Сообщение elf »

:)) подал,я же говорю с ЛСД все нормально показывает
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

подал
А пыль с сегментников протёрли ? :))
elf
Открыл глаза
Сообщения: 60
Зарегистрирован: Чт окт 29, 2009 23:22:03

Re: Всё по DS18(B/S)20.

Сообщение elf »

а разве надо :shock:
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

Надо бы конечно. Может из-за неё не показывает. :))
elf
Открыл глаза
Сообщения: 60
Зарегистрирован: Чт окт 29, 2009 23:22:03

Re: Всё по DS18(B/S)20.

Сообщение elf »

Аlex че-то мне не до шуток.
elf
Открыл глаза
Сообщения: 60
Зарегистрирован: Чт окт 29, 2009 23:22:03

Re: Всё по DS18(B/S)20.

Сообщение elf »

elf писал(а):Аlex че-то мне не до шуток.

Лутше оказали -бы дружескую помощь-неопытному :)) ,Вам свежим взглядов легче найти ошибку-а то я уже все глаза проглядел :))
Ответить

Вернуться в «Периферия»