Всё по DS18(B/S)20.

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение urry »

На такие предупреждения стОит обращать внимание - у вас получилась многозадачная система - и, в данном случае, выполнение одной задачи мешает другой. Например, вы выдаете код 44 - в момент выдачи этой инфы, в время, когда выдается 1 - пошел прием байта по ком порту, программа отвлеклась на прерывание - и вместо выдачи 1 выдался 0 (пока зашли в прерывание, забрали байт, обработали , вышли) - вместо 44 получилось 40 или что-то в этом роде.
Продумайте алгоритм, запрещайте прерывания на момент записи бита в 1 wire.
Да, разделите задачи по файлам и не старайтесь все воткнуть в 1 файл - в идеале, 1 функция должна укладываться в размер экрана.
Reaper666
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн ноя 05, 2012 03:40:39

Re: Всё по DS18(B/S)20.

Сообщение Reaper666 »

urry писал(а):На такие предупреждения стОит обращать внимание - у вас получилась многозадачная система - и, в данном случае, выполнение одной задачи мешает другой. Например, вы выдаете код 44 - в момент выдачи этой инфы, в время, когда выдается 1 - пошел прием байта по ком порту, программа отвлеклась на прерывание - и вместо выдачи 1 выдался 0 (пока зашли в прерывание, забрали байт, обработали , вышли) - вместо 44 получилось 40 или что-то в этом роде.
Продумайте алгоритм, запрещайте прерывания на момент записи бита в 1 wire.
Да, разделите задачи по файлам и не старайтесь все воткнуть в 1 файл - в идеале, 1 функция должна укладываться в размер экрана.



Система многозадачная, но нигде нет прерываний, тем более я их запретил. Все остальные команды съедаются запросто. Вот таким образом датчик реагирует только на команду Read Scratchpad(0xBE). А сам дебаггер пишет, что это нормальная команда. Я уже просто не знаю, что за ерунда такая. Насчет разделить задачи по файлам - это я сделаю, но только потом как все заработает.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение urry »

Потом никогда не наступит, делайте сразу.
Паузу между битами сделайте больше - после выдачи 0 там всего 5 микросекунд.
При первом считывании измерение в мусор - он прочитает 85 градусов.
Снимайте и сверяйте кс.
Reaper666
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн ноя 05, 2012 03:40:39

Re: Всё по DS18(B/S)20.

Сообщение Reaper666 »

urry писал(а):Потом никогда не наступит, делайте сразу.
Паузу между битами сделайте больше - после выдачи 0 там всего 5 микросекунд.
При первом считывании измерение в мусор - он прочитает 85 градусов.
Снимайте и сверяйте кс.


Собственно, я уже вообще ничего не понимаю.

Код: Выделить всё

ready=init();
if (ready==1)
{
TX(0xCC); // skip ROM
TX(0xBE); // Чтение памяти
temp[0]=RX(); // и тут он все исправно читает, в этом бите лежит число 0x50
temp[1]=RX(); // а вот в этом бите лежит 0x05, то есть температура 85, как и должно быть, потому что конвертирование мы не делали.

init(); // посылаем сброс
TX(0xCC); //skip ROM
TX(0x44); // Отправляем на конвертирование
_delay(750000); // ждем положенные 750 мс
init(); // опять посылаем сброс
TX(0xCC); // пропускаем ROM
TX(0xBE); // Читаем память

temp[2]=RX(); // а тут сюрприз, в этот бит приходит 254
temp[3]=RX(); // а вот сюда 255

else print("Denied");

display(temp[0]);
lcd_dat(0x20);
display(temp[1]);
lcd_dat(0x20);
display(temp[2]);
lcd_dat(0x20);
display(temp[3]);
lcd_dat(0x20);}


Собственно, то, что неконвертированную температуру он считывает, позволяет говорить о том, что подпрограммы записи и чтения верны. Что же тогда может препятствовать?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

В какой температуре у вас датчик находится? :)))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Reaper666
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн ноя 05, 2012 03:40:39

Re: Всё по DS18(B/S)20.

Сообщение Reaper666 »

Gudd-Head писал(а):В какой температуре у вас датчик находится? :)))



Пока в никакой, железо только через 2 дня приедет, пока в протеусе химичу.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

Ну ХЗ. У вас
init(); // посылаем сброс

Дожидается ответа Presence?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Reaper666
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн ноя 05, 2012 03:40:39

Re: Всё по DS18(B/S)20.

Сообщение Reaper666 »

Gudd-Head писал(а):Ну ХЗ. У вас
init(); // посылаем сброс

Дожидается ответа Presence?



Да, дожидается.
Аватара пользователя
passer_by
Открыл глаза
Сообщения: 42
Зарегистрирован: Сб янв 05, 2013 21:03:05

Re: Всё по DS18(B/S)20.

Сообщение passer_by »

Дык, все таки, временные интервалы тайм слотов чтения/записи поправили?

Код: Выделить всё

pin=0; 
state=0;
_delay(15);
state=1;
_delay(65);
b=pin;
_delay(50);


Все время слота чтения, к примеру, - 65 µs, а вы мяукаете там чуть не полчаса :sleep:
Если птичка уже в одном прыжке от тебя, всё-таки побереги свой нос, может она за оконным стеклом???
murzila
Мучитель микросхем
Сообщения: 436
Зарегистрирован: Сб апр 10, 2010 16:46:26

Re: Всё по DS18(B/S)20.

Сообщение murzila »

Reaper666 писал(а): пока в протеусе химичу.
Может быть, имеет смысл дождаться железо? В своё время имел неоднократный секас с протеусом по причине кривых моделей...
Аватара пользователя
passer_by
Открыл глаза
Сообщения: 42
Зарегистрирован: Сб янв 05, 2013 21:03:05

Re: Всё по DS18(B/S)20.

Сообщение passer_by »

Уж что, что, а модели для DS18B20 и иже с ними, работают в Proteus отменно.
Если птичка уже в одном прыжке от тебя, всё-таки побереги свой нос, может она за оконным стеклом???
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: Всё по DS18(B/S)20.

Сообщение a_skr »

passer_by - ну, почти "отменно", нюансы есть.
Reaper666 - где взять Ваш компонент отладчика 1-wire? (у меня ISIS 7.7 sp2 build 9089), Ваш проект не запускается:
Изображение
еще из даташита: ведущий на шине при чтении бита должен притягивать шину к нулю не меньше чем на 1 uS, а затем, читать результат не позднее 15 uS после фронта притягивания к нулю ;) :
Изображение
у Вас это выполняется?
... сдается мне, что дело совсем не в этом... :wink:
Вложения
2233311.jpg
(68.42 КБ) 769 скачиваний
122123.jpg
(60.26 КБ) 670 скачиваний
Reaper666
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн ноя 05, 2012 03:40:39

Re: Всё по DS18(B/S)20.

Сообщение Reaper666 »

passer_by писал(а):Дык, все таки, временные интервалы тайм слотов чтения/записи поправили?

Код: Выделить всё

pin=0; 
state=0;
_delay(15);
state=1;
_delay(65);
b=pin;
_delay(50);


Все время слота чтения, к примеру, - 65 µs, а вы мяукаете там чуть не полчаса :sleep:



Код: Выделить всё

unsigned char RX(void) // процедура чтения
{
unsigned char i=0,dat=0,b;
for (i=0;i<8;i++)
{
pin=0;
state=0; // удерживаем линию
_delay(5); // на 5 мкс( в даташите сказано, что минимум на 1 мкс)
state=1; // отпускаем шину
_delay(20);  // ждем 15 мкс
b=pin; // смотрим, что у нас на выводе
dat|=(b<<i);
_delay(35);
}
return dat;
}


Да, поправил. Я же говорю, у меня до конвертации все считывается, а вот после конвертации ерунда какая-то.
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: Всё по DS18(B/S)20.

Сообщение a_skr »

pin=0;
state=0; // удерживаем линию
_delay(5); // на 5 мкс( в даташите сказано, что минимум на 1 мкс)
state=1; // отпускаем шину
_delay(20); // ждем 15 мкс
b=pin; // смотрим, что у нас на выводе

"ждем 15 мкс" - а на самом деле 20 после конца импульса, который 5 - итого: Вы считываете через 25. по даташиту нужно не позже 15 от начала.
Reaper666
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн ноя 05, 2012 03:40:39

Re: Всё по DS18(B/S)20.

Сообщение Reaper666 »

a_skr писал(а):passer_by - ну, почти "отменно", нюансы есть.
Reaper666 - где взять Ваш компонент отладчика 1-wire? (у меня ISIS 7.7 sp2 build 9089), Ваш проект не запускается:
Изображение
еще из даташита: ведущий на шине при чтении бита должен притягивать шину к нулю не меньше чем на 1 uS, а затем, читать результат не позднее 15 uS после фронта притягивания к нулю ;) :
Изображение
у Вас это выполняется?
... сдается мне, что дело совсем не в этом... :wink:


Там в проекте протеуса затесался ненужный файл. Собственно, в архиве сам проект в протеусе, хекс-файл для него, проект в MpLAb, и файлы для отладчика. Файл с расширением dll кидаете в папку Models, а два остальным (idx и lib) в Library. Потом отладчик в компонентах находится по слову 1-wire. Все задержки я там соблюдал.
Вложения
Desktop.rar
(171.75 КБ) 143 скачивания
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: Всё по DS18(B/S)20.

Сообщение a_skr »

поставил MPLAB, HI-TECH C for the PIC10/12/16 MCU Family,
просто откомпилировал:
Изображение
Изображение
Вложения
2.jpg
(34.33 КБ) 726 скачиваний
1.jpg
(46.26 КБ) 740 скачиваний
Reaper666
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн ноя 05, 2012 03:40:39

Re: Всё по DS18(B/S)20.

Сообщение Reaper666 »

Reaper666 писал(а):
a_skr писал(а):поставил MPLAB, HI-TECH C for the PIC10/12/16 MCU Family,
просто откомпилировал:
Изображение
Изображение



Афигеть, то есть у меня все абсолютно верно. У вас какая версия протеуса? и можно вашу модельку датчика, моя может кривая какая-то. А остальные темпеературы правильно показывает?
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: Всё по DS18(B/S)20.

Сообщение a_skr »

до компиляции с Вашим hex'ом действительно было 254 и 255
Reaper666
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн ноя 05, 2012 03:40:39

Re: Всё по DS18(B/S)20.

Сообщение Reaper666 »

a_skr писал(а):до компиляции с Вашим hex'ом действительно было 254 и 255



То есть, есть подозрение на то, что компилятор чудит? а можно тогда ваш hex, который вы получили.
Reaper666
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн ноя 05, 2012 03:40:39

Re: Всё по DS18(B/S)20.

Сообщение Reaper666 »

Все заработало, проблема была в компиляторе. Кто знает, как можно выловить этот глюк компилятора?
Ответить

Вернуться в «Периферия»