Технический форум по робототехнике.
Montoya » 11 авг 2008, 13:46
Вобщем подключил к часам ds18b20.И столкнулся с проблемой, когда включен таймер TIMSK=0x10;, то вывод температуры на экран начинает глючить или температура не выводится,а часы работают нормально. Когда делаю TIMSK=0x00;, то часы вырубаются,но зато работает ds18b20. Что может быть не так?
- Вложения
-
123.rar
- (113.69 КиБ) Скачиваний: 27
Montoya » 18 авг 2008, 19:39
Ааааааа,у меня паника!!!! Не могу понять, почему работа таймера сказывается на работе 1-wire порта ( в частности ds18b20) ????? Уже все перепробывал, ниче не помогает....
rig » 18 авг 2008, 21:27
тайминги не выдерживаются вот и получаешь нечто, запрещай прерывания на время обмена с 1820
Montoya » 18 авг 2008, 22:18
Делал я так, но время же будет останавливаться, часы будут отставать...Или на это можно не обращать внимание? Я щя просто либу на 1820 поковырял и вырубил сообщения об ошибке

единственное теперь температура с более длительными задержками меняет свое значение,а так все нормуль)
Добавлено спустя 23 минуты 1 секунду:Попробовал сделать вот так:
- Код: Выделить всё • Развернуть
TIMSK=0x00;
temp = ds18b20_temperature(0);
TIMSK=0x10;
но визуально получается задержка во времени дето 1сек, конечно можно сделать после этого seconds++, но мне кажется эта задержка незначительна
rig » 18 авг 2008, 22:44
смотря какое разрешение, все зависит от него. на самом высоком 12 бит температура считается почти секунду.
в это время можно спокойно считать время , зачем ждать окончания преобразования?
шлешь команду на преобразование, периодически проверяешь закончилось или нет, или тупо через 5 сек считываешь, или принципиально каждую секунду мерить?
Montoya » 18 авг 2008, 22:52
Вот кусок кода,отвечающий за показ температуры
- Код: Выделить всё • Развернуть
if ((PIND & 1<<0) == 0 && ds18b20_init(0,-55,125,DS18B20_12BIT_RES))
{
TIMSK=0x00;
temp = ds18b20_temperature(0);
TIMSK=0x10;
milliseconds = milliseconds + 90;
lcd_clear();
while (!(PIND & 1<<0))
{
sprintf(lcd_buffer,"%+.1fxdfC",temp);
lcd_gotoxy(2,0);
lcd_putsf(tmp);
lcd_gotoxy(4,1);
lcd_puts(lcd_buffer);
};
lcd_clear();
};
Добавлено спустя 4 минуты 42 секунды:Т.е. у меня показ температуры не все время, а только при нажатии клавиши
rig » 18 авг 2008, 23:18
я так делал с 1821, но принцип тотже
- Код: Выделить всё • Развернуть
void wait(void)
{char x;
w1_init(); // инициализация 1821
w1_write(0xEE); // WRITE COMMAND START CONVERT EEh(для 1820 44h вроде такая команда)
// а вот ждать тут не обязательно окончания преобразования, можно периодически опрашивать, выставив флажок что производится замер температуры.
do
{
w1_init(); // инициализация
w1_write(0xAC); // WRITE COMMAND READ STATUS ACh
x=w1_read();
}
while(!(0b10000000&x)); // READ STATUS
}
ПРЕОБРАЗОВАНИЕ T [44h]
Эта команда вводит единственное температурное преобразование. Следуя За преобразованием, результирующие термические данные загружается в 2-байтовом температурном регистре в сверхоперативной памяти и возврат DS18S20 своему низкому-силовому состоянию ожидания. Если устройство используется в паразитном силовом режиме, в пределах 10 мs (max) после того, как эта команда выпущена мастера должно приспособить прочный pullup в 1-проводной шине в течение преобразования (tconv) как указано в POWERING секция DS18S20. Если DS18S20 усиливается внешней поставкой, мастер может выпустить слоты читающего времени после того, как Преобразование команды T и DS18S20 ответит передавая 0 тогда как температурное преобразование осуществится и 1 когда преобразование сделать. В паразитном силовом режиме, эта техника уведомления не может использоваться с тех пор как шина потянута высокий прочным pullup в течение преобразования.
вот пример из даташита, конечно если охчется разбираться
Montoya » 19 авг 2008, 11:07
Спасибо! Буду эксперементировать... а в даташите на 1820 я видел эти команды, просто не врубался как их заюзать

rig » 19 авг 2008, 11:57
если библиотеку разобрал то должно уже доходить по маленьку, в ней теже команды испльзуются чтои в ДШ
Montoya » 19 авг 2008, 12:43
Ну да) Лан, с 1820 я разобрался, поставил временно разрешение на 9 бит, задержка теперь незначительная. Меня сейчас больше волнует точность хода моих часов, щя проверю, какая погрешность за сутки.
rig » 19 авг 2008, 14:04
для часов надо спец микруху ставить, она тебе и дни недели и годы посчитает. только считывай с памяти данные и выводи как хошь. плюс батареейка на несколько лет
Montoya » 19 авг 2008, 14:50
Видел в нете примеры часов на таких микрухах, но мне хотелось попробывать сделать на обычном кварце

Зато пока делал, разобрался с таймерами и получил больше опыта в программировании )
плюс батареейка на несколько лет
Т.е. время не сбиваеца при выключении общего питания схемы, а продолжает считать за счет ресурсов этой батарейки?
ЗЫ Потом и на спец микрухе сделаю часы)
Добавлено спустя 35 минут 15 секунд:Порыл в нете насчет спец микрух, думаю ds1307 будет подходящим вариантом, в cvavr есть библиотека на него)
rig » 19 авг 2008, 16:19
под рукой нет, какая то дс. я пару уже купил для одной готовой поделки. позже озвучу и ДШ могу выложить
Montoya » 19 авг 2008, 16:36
ОК, а ДШ впринципе не проблема, если че, в нете найду

Myp » 19 авг 2008, 16:45
микросхемы часов кажется TI бесплатно шлёт как сэмплы в дип корпусе
у меня друг заказывал