О-о. Пасибочки. Я чет не догадался так зделать. А действительно 500 мкс сброса то, пусть хоть 1000 мкс длятся, т.е. тут прерывания можно не запрещать..... А вот перед тем как отпустить линию, да дождаться пресенс, можно запретить прерывания, но это уже сравнительно не много 15-60 мкс.Леонид Иванович писал(а):А зачем прерывания запрещать на 600 мкс? Длительность импульса сброса сверху ничем не ограничена. От прерываний нужно защищать только интервал, где мы читаем presence, а это порядка 60 мкс.
Всё по DS18(B/S)20.
Re: Всё по DS18(B/S)20.
Re: Всё по DS18(B/S)20.
Всем добрый день!
Вопрос по поводу функции в CVAVR.
В параметре р ей передается указатель на заранее выделенный массив в раме для кодов устройств.
Такой вопрос, что будет, если массив будет на 2 устройства, а физически будет подключено три устройства?
Я так понимаю, в таком случае произойдет переполнение выделенного массива и эта функция "перепишет" данные в раме, которые не были выделены для массива кодов, а это очень плохо, т.к. может полностью "поломать" устройство
А в хелпе об этом ни слова...
Есть ли какие-нибудь альтернативные проверенные библиотеки, где этот вопрос учтен?
Вопрос по поводу функции
Код: Выделить всё
unsigned char w1_search(unsigned char cmd,void *p)В параметре р ей передается указатель на заранее выделенный массив в раме для кодов устройств.
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.
такая беда. подключаю 18б20 к контроллеру, температура -999. Т.е. контроллер не видит датчик. Поставил кварц на 12мгц. без результатов. Датчик подключал к другому устройству - там все работает - датчик исправен. Както нагреваю этот датчик паяльником и опа- показал контроллер температуру 104 градуса. Перестал греть, температура начала падать и примерно на 50 градусах датчик опять пропал (-999).
подтяжка 4.7к, полярность верна, кварц внешний на 12мгц, фузы 1111 (атмега8)
подтяжка 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.
так в этом проблема
Есть термометр на 2313. Я взял из него прогу для термометра, это 3 или 4 строки, вывод на индикатор (немножко побольше). На индикатор всё исправно выводит, в смысле подставляю в tepm число - число на индикаторе.
Потом я проставил метки в программе, программа всё делает что ей положенно, но дойдя до опроса датчика, датчик не находится. deviсe=0
Была похожая проблема, там оказалось косяк с подтяжкой был.
Есть термометр на 2313. Я взял из него прогу для термометра, это 3 или 4 строки, вывод на индикатор (немножко побольше). На индикатор всё исправно выводит, в смысле подставляю в tepm число - число на индикаторе.
Потом я проставил метки в программе, программа всё делает что ей положенно, но дойдя до опроса датчика, датчик не находится. deviсe=0
Была похожая проблема, там оказалось косяк с подтяжкой был.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Всё по DS18(B/S)20.
Проблема в 458-ой строке программы.
-
Prosperous
- Встал на лапы
- Сообщения: 129
- Зарегистрирован: Ср янв 18, 2012 19:37:10
Re: Всё по DS18(B/S)20.
Друзья, есть у меня библиотека для 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.
День добрый.
Уважаемые писатели, поделитесь программой простого термометра на DS18B20 для процессора STM8S103. Заранее благодарен.
Уважаемые писатели, поделитесь программой простого термометра на DS18B20 для процессора STM8S103. Заранее благодарен.
-
Prosperous
- Встал на лапы
- Сообщения: 129
- Зарегистрирован: Ср янв 18, 2012 19:37:10
Re: Всё по DS18(B/S)20.
Prosperous писал(а):Друзья, есть у меня библиотека для Winavr по работе с датчиком ds18b20.
В общем все беды от незнания. Отличная библиотека, все работает на ура. Надо было учесть, что отладку необходимо проводить в режиме оптимизации по времени, при другой временные задержки не обрабатываются и датчик врет.
Re: Всё по DS18(B/S)20.
Что-то не могу найти в DS какой у неё Family code? Или слона не приметил.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Всё по DS18(B/S)20.
28h
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Всё по DS18(B/S)20.
Добрый вечер уважаемые коты.
Пытаюсь собрать термометр на DS18b20, написал программку под LCD- все нормально работает.
Но возникла необходимость выводить температуру на семисигментник и тут началось.........
Вообщем ничего не показывает.
Ребята гляньте пожалуйста код и тыкните меня носом куда надо
.
я думаю ошибка где-то здесь
sot=(temp/100);
des =(temp%100)/10;
edi=(temp %100)%10;
заранее благодарен.
Пытаюсь собрать термометр на 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
Причина: Тег CODE
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Всё по DS18(B/S)20.
А питание подали ?Вообщем ничего не показывает.
Re: Всё по DS18(B/S)20.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Всё по DS18(B/S)20.
А пыль с сегментников протёрли ?подал
Re: Всё по DS18(B/S)20.
а разве надо 
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Всё по DS18(B/S)20.
Надо бы конечно. Может из-за неё не показывает. 
Re: Всё по DS18(B/S)20.
Аlex че-то мне не до шуток.
Re: Всё по DS18(B/S)20.
elf писал(а):Аlex че-то мне не до шуток.
Лутше оказали -бы дружескую помощь-неопытному
