Требуется небольшая помощь с ATmega16 и DS1820
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
вообще-то почитайте доку... и запишите в регистры TH & TL другие значения... и посмотрите что получится...
потом я не нашёл как переводить датчик в термостат... вот именно в доке на ds18b20... значит делаем вывод, что TH & TL это есть диапазон измеряемых температур...
потом я не нашёл как переводить датчик в термостат... вот именно в доке на ds18b20... значит делаем вывод, что TH & TL это есть диапазон измеряемых температур...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
DS18B20 не надо переводить в режим термостата. этот режим всегда включен и так. только понимается он извращенно: надо послать команду поиска адресов датчиков, у которых сработал Alarm (т.е. температура вышла за преджелы TH-TL), и тогда сработавшие ответят... бред какой-то...Mozart писал(а):потом я не нашёл как переводить датчик в термостат... вот именно в доке на ds18b20... значит делаем вывод, что TH & TL это есть диапазон измеряемых температур...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
DS18B20 не надо переводить в режим термостата. этот режим всегда включен и так. только понимается он извращенно: надо послать команду поиска адресов датчиков, у которых сработал Alarm (т.е. температура вышла за преджелы TH-TL), и тогда сработавшие ответят... бред какой-то...
да это всё ясно... и идея хорошая... и далеко не бред... единственно они могли бы сделать более быстрое преобразование не 750mS а хотя бы 100...
и ещё на сколько ему можно доверять?... вот это проверить бы ещё...
кто проверит скажите...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
я где-то читал, что датчики эти внесены в госреестр средств измерений, так что получается, верить им можно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
ATmega + DS18B20
Всем здраствуйте, просьба заранее не пинать.
У меня вопрос к тем кто умеет работать с 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;
//---------- ----------
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.
Помогите пожалуйста советом как все таки правильно работать с этим датчиком и что я сделал не так.
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
ну ёпрст... конечно она у вас будет виснуть... потому что прерываний у вас нет... ну я по крайне мере их не увидел... а второе в цикле while(1) надо что-то написать...
а в третьих она у вам не виснит просто выполняет не известные вам инструкции...
а в третьих она у вам не виснит просто выполняет не известные вам инструкции...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
Код: Выделить всё
/* 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) {
}если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Тогда может лучше вот так, типа пока не найдено хотя бы одно устройство - искать...
Код: Выделить всё
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); - Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
Тогда может лучше вот так, типа пока не найдено хотя бы одно устройство - искать...
это ваше личное дело... но работать так не будет...
ну найдёт устройство хотф бы одно два три не важно... а дпльше что??? нарисуйте себе алгоритм...
з.ы. читайте книги по Си...!!! ибо ответ на этот вопрос можно найти в книге...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Только что переписал код, как выше, зашил, но результат тот же...
МК в ступоре, я тоже. он по прежнему не находит не одного устройства, оно кстати всего одно...
Виснет на строчке:
МК в ступоре, я тоже. он по прежнему не находит не одного устройства, оно кстати всего одно...
Виснет на строчке:
Код: Выделить всё
devices=w1_search(0xf0,rom_codes);
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
я не телепат... что такое 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);если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Устройство собрано верно... проверил несколько раз. Если убрать строку поиска датчика, то на него сразу выводится END. так что все тут в порядке... Но работать все равно не хочет... Сегодня попробую реализовать Функцию поиска датчика самостоятельно... Наткнулся вчера на статью ARV, хотя может даже просто датчик дохлый...
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
напишите вот так ...
добавьте else почле if(devices > 0)
а то ваша прога опред датчик после вывода str она выводит str1
Код: Выделить всё
if (devices > 0) {
lcd_clear();
lcd_puts(str);
}
else
lcd_putsxy(5,0,str1);
добавьте else почле if(devices > 0)
а то ваша прога опред датчик после вывода str она выводит str1
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Mozart писал(а):напишите вот так ...Код: Выделить всё
if (devices > 0) {
lcd_clear();
lcd_puts(str);
}
else
lcd_putsxy(5,0,str1);
добавьте else почле if(devices > 0)
а то ваша прога опред датчик после вывода str она выводит str1
Мой термометр заработал....
Дело было вовсе не в программе, а как раз наооборот в аппаратной части...
Когда я первый раз подключал этот датчик к Мк, я не правильно подпаял сам датчик и подтягивающий резистор...
Датчик сгорел... свою ошибку я понял, но вот совсем не подумал о том, что мог сгореть и порт... Что в последствии я и обнаружил.