Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
05.11.2009, 13:13
|
|
Частый гость
Регистрация: 11.07.2006
Сообщений: 32
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
DS1820-не работает, как найти причину?
Доброго времени суток!
Захотелось температуру измерять, к старой макетной плате с ATmega16 приладил датчик температуры DS18s20. Но эффект получился интересный: при поиске устройств на шине I2C выводится 246 устройств (0xF6), хотя подключен один датчик, а значение температуры -9999.
Куски кода:
#asm
// Подключен LCD к порту В:
.equ __lcd_port=0x18 ;// .equ __lcd_port=0x1B ; //PORT A
// Подключен датчик DS1820 к порту D, пин PD5:
.equ __w1_port=0x12; //0x12
.equ __w1_bit=5;
#endasm
#include ‹lcd.h›
#include ‹stdio.h›
#include ‹math.h›
#include ‹ds1820.h›
.....
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x87;
// Place your code here
if(++uS250 == 4000) //секунда
{
uS250 = 0;
#asm("cli");
temperature=ds1820_temperature_10(NULL);
#asm("sei");
sprintf(lcd_buffer,"t%u=%i.%u\xdfC",0,temperature/10,abs(temperature%10));
Flag = 1;
}
}
.....
void main(void)
{
if (w1_init())
{
#asm("cli");
devices=w1_search(0xf0,rom_code);
#asm("sei");
while (1)
{
if(Flag & 0b00000001) // вывод времени при поднятом флаге
{
lcd_prinf(lcd_buffer);
Flag=0;
}
}
};
В чем может быть причина?
}
|
|
|
|
05.11.2009, 14:34
|
|
Гражданин KAZUS.RU
Регистрация: 24.11.2006
Адрес: ДНР
Сообщений: 612
Сказал спасибо: 553
Сказали Спасибо 314 раз(а) в 142 сообщении(ях)
|
Re: DS1820-не работает, как найти причину?
Сообщение от asele
|
Доброго времени суток!
Захотелось температуру измерять, к старой макетной плате с ATmega16 приладил датчик температуры DS18s20. Но эффект получился интересный: при поиске устройств на шине I2C выводится 246 устройств (0xF6), хотя подключен один датчик, а значение температуры -9999.
Куски кода:
...
В чем может быть причина?
}
|
По-моему вы шинами обшиблись: DS18s20 работает с 1-wire, а с I2C кажись DS1621. Если просто опечатка в тексте, и вы имели в виду 1-wire, то тогда можно протеусом все проверить - там есть эта модель.
|
|
|
|
05.11.2009, 15:48
|
|
Частый гость
Регистрация: 11.07.2006
Сообщений: 32
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: DS1820-не работает, как найти причину?
Вы правы, шина, действительно, 1-wire. Подозреваю, что датчик неисправен, но опыта проверки устройств на этой шине нет, а хочется понять. Можно ли осциллографом "отловить" обмен и оценить его "правильность"? И если устройство, в данном случае DS1820, отвечает (есть результат w1_search), то почему кол-во устройств неверное? И значение температуры тоже...
|
|
|
|
06.11.2009, 10:30
|
|
Гражданин KAZUS.RU
Регистрация: 24.11.2006
Адрес: ДНР
Сообщений: 612
Сказал спасибо: 553
Сказали Спасибо 314 раз(а) в 142 сообщении(ях)
|
Re: DS1820-не работает, как найти причину?
Сообщение от asele
|
Вы правы, шина, действительно, 1-wire. Подозреваю, что датчик неисправен, но опыта проверки устройств на этой шине нет, а хочется понять. Можно ли осциллографом "отловить" обмен и оценить его "правильность"? И если устройство, в данном случае DS1820, отвечает (есть результат w1_search), то почему кол-во устройств неверное? И значение температуры тоже...
|
Если есть осциллограф - то дело конечно упрощается раз в 10. Есть ли активность на шине DATA вообще?проверяли?Питание в норме? Если осциллограф без памяти, выводите синхроимпульс с какой-нить ноги МК в начале каждой посылки, засинхронизируйте от него осциллограф, и, возможно, удастся рассмотреть посылку. Подтягивающий резистор какого номинала? Работоспособность датчика можно проверить только прикрутив его к заведомо рабочей системе(или прикрутив к вашей системе заведомо работоспособный датчик). Но как показывает практика(из моего опыта) - чаще всего причина кроется в неверном протоколе со стороны МК.
И еще раз повторюсь: почему бы вам не промоделировать работоспособность программы в Proteus?
Еще упустил момент: датчик DS1820 или DS18S20? К сожалению сейчас точно не скажу, вроде протокол у них одинаковый. Просто, например, у DS18S20 и DS18B20 - протоколы разные. Уточните это.
Последний раз редактировалось rubel; 06.11.2009 в 10:37.
|
|
|
|
06.11.2009, 10:47
|
|
Гражданин KAZUS.RU
Регистрация: 24.11.2006
Адрес: ДНР
Сообщений: 612
Сказал спасибо: 553
Сказали Спасибо 314 раз(а) в 142 сообщении(ях)
|
Re: DS1820-не работает, как найти причину?
Сообщение от asele
|
...то почему кол-во устройств неверное? ...
|
Для определения количества датчиков и их серийных номеров используется довольно хитрый(и геморройный) алгоритм. Возможно,что МК не обнаруживает ни одного DS, но выводит какое-то значение на дисплей - тут вопросы к автору программы. Прицепите еще пару датчиков - если результат не изменится - копать в МК. Проверьте частоту тактирования МК. фуз биты. ошибиться там очень легко.
|
|
|
|
06.11.2009, 18:09
|
|
Временная регистрация
Регистрация: 12.10.2006
Сообщений: 53
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: DS1820-не работает, как найти причину?
Вот определитель кода 1-вир, должен помоч.
__________________
Б.га нет, есть только двоичный код.
|
|
|
|
07.11.2009, 11:48
|
|
Частый гость
Регистрация: 11.07.2006
Сообщений: 32
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: DS1820-не работает, как найти причину?
Поступил следующим образом. Написал новый проект в CVAVR, где кроме измерения температуры и вывода на LCD-дисплей ничего нет. Заработало. Отсюда вывод: что-то в большом коде взаимоисключающее. Но найти это место дело только времени и желания. Дальше справлюсь. Если интересно, напишу, когда разберусь.
Всем откликнувшимся большое спасибо!
По поводу Proteusa. Что-то в нем можно проверить, а что-то нет. Например, терморегулятор с конкретными тепловыми инерционностями объектов и мощностью нагревателей. Тем более, если этих значений нет. Потом, если не знаешь среды, работа в ней долгая и непродуктивная. А макет - просто, быстро и есть гарантия, что это так и будет работать.
|
|
|
|
07.11.2009, 14:17
|
|
Частый гость
Регистрация: 11.07.2006
Сообщений: 32
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: DS1820-не работает, как найти причину?
Причина была в досадной ошибке: вывод PORD.5, на который подключил DS18S20 был сконфигурирован под вывод ШИМ от таймера 1 (OC1A). Изменил биты COM1A1 и COM1A0 регистра TCCR1A с "1" на "0" и датчики нормально заработали - определяются и выводят температуру.
Еще раз спасибо за помощь!
|
|
|
|
11.11.2009, 00:29
|
|
Гражданин KAZUS.RU
Регистрация: 28.11.2007
Адрес: харьков
Сообщений: 850
Сказал спасибо: 339
Сказали Спасибо 43 раз(а) в 23 сообщении(ях)
|
Re: DS1820-не работает, как найти причину?
а кто нибудь писал прогу для поиска датчиков на асме PIC?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:36.
|
|