потом я не нашёл как переводить датчик в термостат... вот именно в доке на ds18b20... значит делаем вывод, что TH & TL это есть диапазон измеряемых температур...
Требуется небольшая помощь с ATmega16 и DS1820
вообще-то почитайте доку... и запишите в регистры TH & TL другие значения... и посмотрите что получится...
потом я не нашёл как переводить датчик в термостат... вот именно в доке на ds18b20... значит делаем вывод, что TH & TL это есть диапазон измеряемых температур...
потом я не нашёл как переводить датчик в термостат... вот именно в доке на ds18b20... значит делаем вывод, что TH & TL это есть диапазон измеряемых температур...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Реклама
DS18B20 не надо переводить в режим термостата. этот режим всегда включен и так. только понимается он извращенно: надо послать команду поиска адресов датчиков, у которых сработал Alarm (т.е. температура вышла за преджелы TH-TL), и тогда сработавшие ответят... бред какой-то...Mozart писал(а):потом я не нашёл как переводить датчик в термостат... вот именно в доке на ds18b20... значит делаем вывод, что TH & TL это есть диапазон измеряемых температур...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
да это всё ясно... и идея хорошая... и далеко не бред... единственно они могли бы сделать более быстрое преобразование не 750mS а хотя бы 100...DS18B20 не надо переводить в режим термостата. этот режим всегда включен и так. только понимается он извращенно: надо послать команду поиска адресов датчиков, у которых сработал Alarm (т.е. температура вышла за преджелы TH-TL), и тогда сработавшие ответят... бред какой-то...
и ещё на сколько ему можно доверять?... вот это проверить бы ещё...
кто проверит скажите...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
я где-то читал, что датчики эти внесены в госреестр средств измерений, так что получается, верить им можно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 12
- Зарегистрирован: Вт мар 18, 2008 10:50:03
Всем здраствуйте, просьба заранее не пинать.
У меня вопрос к тем кто умеет работать с DS18B20.
Написал вот такую программу для работы с этим термодатчиком:
как видите в теории вроде все правильно, если нет то поправте меня.
К порту А на 1 контакт вешаю датчик выводом DQ, GND - земля, и еще +5 волт на Vdd, а так же сопротивлятор между DQ и Vdd на 4.7 кОм. Вроде бы тоже все верно, если что не правильно - поправьте.
Так вот, при включении питания мега виснет при поиске датчика, почему не знаю, помоги плиз. И еще если резистор отключить то на экране дисплеея сразу получаю end, типо прога работать закончила.
А при запросе температуры получаю -9999.
Помогите пожалуйста советом как все таки правильно работать с этим датчиком и что я сделал не так.
У меня вопрос к тем кто умеет работать с DS18B20.
Написал вот такую программу для работы с этим термодатчиком:
Код: Выделить всё
Код:
Chip type : ATmega8535
Program type : Application
Clock frequency : 1,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 128
*****************************************************/
#include <mega8535>
#include <wh>
#asm
.equ __w1_port=0x1B ;PORTA
.equ __w1_bit=1
#endasm
#include <1wire>
#include <ds1820>
#include <stdlib>
/* maximum number of DS18B20 connected to the bus */
#define MAX_DEVICES 6
unsigned char rom_codes[MAX_DEVICES][9];
void Init_ports(void) // Указываем необходимые порты как выходы
{
DDRD=0b11111111;
DDRC=0b00000111;
DDRA=0b11111111;
}
char str1[16]="end";
char str[]=" Dev found";
char devices;
//-----------------------MAIN ---------------------
void main(void)
{
Init_ports();
lcd_init();
/* detect how many DS18B20 devices
are connected to the bus and
store their ROM codes in the rom_codes array */
//lcd_putsxy(5,0,st_do);
#asm("cli");
devices=w1_search(0xf0,rom_codes);
#asm("sei");
if (devices>0) {
lcd_clear();
lcd_puts(str);
}
lcd_putsxy(5,0,str1);
while (1)
{
};
}
К порту А на 1 контакт вешаю датчик выводом DQ, GND - земля, и еще +5 волт на Vdd, а так же сопротивлятор между DQ и Vdd на 4.7 кОм. Вроде бы тоже все верно, если что не правильно - поправьте.
Так вот, при включении питания мега виснет при поиске датчика, почему не знаю, помоги плиз. И еще если резистор отключить то на экране дисплеея сразу получаю end, типо прога работать закончила.
А при запросе температуры получаю -9999.
Помогите пожалуйста советом как все таки правильно работать с этим датчиком и что я сделал не так.
- Реклама
ну ёпрст... конечно она у вас будет виснуть... потому что прерываний у вас нет... ну я по крайне мере их не увидел... а второе в цикле while(1) надо что-то написать...
а в третьих она у вам не виснит просто выполняет не известные вам инструкции...
а в третьих она у вам не виснит просто выполняет не известные вам инструкции...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Сообщения: 12
- Зарегистрирован: Вт мар 18, 2008 10:50:03
Код: Выделить всё
/* detect how many DS18B20 devices
are connected to the bus and
store their ROM codes in the rom_codes array */
//lcd_putsxy(5,0,st_do);
#asm("cli");
devices=w1_search(0xf0,rom_codes);
#asm("sei");
if (devices>0) {
lcd_clear();
lcd_puts(str);
}
lcd_putsxy(5,0,str1);
Код: Выделить всё
for(;;) {
}Код: Выделить всё
whie(1) {
}если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Сообщения: 12
- Зарегистрирован: Вт мар 18, 2008 10:50:03
Тогда может лучше вот так, типа пока не найдено хотя бы одно устройство - искать...
Код: Выделить всё
whie(!devices) {
/* detect how many DS18B20 devices
are connected to the bus and
store their ROM codes in the rom_codes array */
//lcd_putsxy(5,0,st_do);
#asm("cli");
devices=w1_search(0xf0,rom_codes);
#asm("sei");
if (devices>0) {
lcd_clear();
lcd_puts(str);
}
}
lcd_putsxy(5,0,str1); это ваше личное дело... но работать так не будет...Тогда может лучше вот так, типа пока не найдено хотя бы одно устройство - искать...
ну найдёт устройство хотф бы одно два три не важно... а дпльше что??? нарисуйте себе алгоритм...
з.ы. читайте книги по Си...!!! ибо ответ на этот вопрос можно найти в книге...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Сообщения: 12
- Зарегистрирован: Вт мар 18, 2008 10:50:03
вообще я что-то похожее не давно делал... я сделал на прерывании по таймеру...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Сообщения: 12
- Зарегистрирован: Вт мар 18, 2008 10:50:03
Только что переписал код, как выше, зашил, но результат тот же...
МК в ступоре, я тоже. он по прежнему не находит не одного устройства, оно кстати всего одно...
Виснет на строчке:
МК в ступоре, я тоже. он по прежнему не находит не одного устройства, оно кстати всего одно...
Виснет на строчке:
Код: Выделить всё
devices=w1_search(0xf0,rom_codes);
у вас джтаг есть?
покажите функцию... w1_search(0xf0,rom_codes);
покажите функцию... w1_search(0xf0,rom_codes);
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Сообщения: 12
- Зарегистрирован: Вт мар 18, 2008 10:50:03
я не телепат... что такое 0xF0 и rom_codes в этой функции??
и как работает ваша стандартная функция я тоже не знаю.
потом вы уверены что собрали свою конструкцию прально?? точно ничего не перепутали?
порты правильно настроили??? напишите ещё на всякий случай PORTx =0x00;
а ЖК работает?
джтаг что такое?? смотрите на сайте www.atmel.com
ну и писатель же вы!!!
вместо этого...
напишите это
и как работает ваша стандартная функция я тоже не знаю.
потом вы уверены что собрали свою конструкцию прально?? точно ничего не перепутали?
порты правильно настроили??? напишите ещё на всякий случай PORTx =0x00;
а ЖК работает?
джтаг что такое?? смотрите на сайте www.atmel.com
ну и писатель же вы!!!
вместо этого...
Код: Выделить всё
if (devices>0) {
lcd_clear();
lcd_puts(str);
}
lcd_putsxy(5,0,str1);Код: Выделить всё
if (devices>0) {
lcd_clear();
lcd_puts(str);
}
else
lcd_putsxy(5,0,str1);если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
заработало?
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Сообщения: 12
- Зарегистрирован: Вт мар 18, 2008 10:50:03
Устройство собрано верно... проверил несколько раз. Если убрать строку поиска датчика, то на него сразу выводится END. так что все тут в порядке... Но работать все равно не хочет... Сегодня попробую реализовать Функцию поиска датчика самостоятельно... Наткнулся вчера на статью ARV, хотя может даже просто датчик дохлый...
напишите вот так ...
добавьте else почле if(devices > 0)
а то ваша прога опред датчик после вывода str она выводит str1
Код: Выделить всё
if (devices > 0) {
lcd_clear();
lcd_puts(str);
}
else
lcd_putsxy(5,0,str1);
а то ваша прога опред датчик после вывода str она выводит str1
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Сообщения: 12
- Зарегистрирован: Вт мар 18, 2008 10:50:03
Mozart писал(а):напишите вот так ...добавьте else почле if(devices > 0)Код: Выделить всё
if (devices > 0) { lcd_clear(); lcd_puts(str); } else lcd_putsxy(5,0,str1);
а то ваша прога опред датчик после вывода str она выводит str1
Мой термометр заработал....
Дело было вовсе не в программе, а как раз наооборот в аппаратной части...
Когда я первый раз подключал этот датчик к Мк, я не правильно подпаял сам датчик и подтягивающий резистор...
Датчик сгорел... свою ошибку я понял, но вот совсем не подумал о том, что мог сгореть и порт... Что в последствии я и обнаружил.


