Карма: 67
Рейтинг сообщений: 1012
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 18809 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Не проще ли просто взять DS1821? Её даже с компа можно запрограммировать.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Зарегистрирован: Вс сен 06, 2009 20:17:20 Сообщений: 20
Рейтинг сообщения:0
Вычитал из даташита по ds18b20 что после отправки команды 0x44 (Конвертирование температуры) датчик должен линию опустить в ноль пока датчик выполняет температурное преобразование , а по окончании поднять линию в 1.Так вот прикол состоит в том что он линию в 0 не опускает после 0x44 .При этом в программе я сделал так чтобы по 1 на линии шло считывание байтов температуры и самое интересное оно идет хотя как из даташита время конверсии при 9битном разрешении 93,75 мс .А у меня получается вообще без этой задержки.Или это время конверсии подругому рассчитывается?
Карма: 67
Рейтинг сообщений: 1012
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 18809 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Freerider писал(а):
после отправки команды 0x44 (Конвертирование температуры) датчик должен линию опустить в ноль пока датчик выполняет температурное преобразование
Покажите где вы такой бред вычитали.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Не правильно прочитали. Просто должен отвечать "0" на каждый посланный слот чтения. Т.е. посылаешь 00100010 и потом делаешь чтение (без сброса!) и должны возвращаться 0, пока идёт преобразование. Как только появилась "1" - преобразование закончено и можно делать сброс, чтобы заслать команду чтения скратчпада.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Карма: 67
Рейтинг сообщений: 1012
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 18809 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
uldemir писал(а):
Т.е. посылаешь 00100010
А мне казалось, просто дёргаешь линию — и если датчик не дёрнул в ответ, то преобразование закончилось.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Зарегистрирован: Вс сен 06, 2009 20:17:20 Сообщений: 20
Рейтинг сообщения:0
Gudd-Head писал(а):
Freerider писал(а):
после отправки команды 0x44 (Конвертирование температуры) датчик должен линию опустить в ноль пока датчик выполняет температурное преобразование
Покажите где вы такой бред вычитали.
Сей бред тут http://open.e-voron.dp.ua/wp-content/up ... 20-rus.pdf. Просто по программе я делаю проверку после команды 0x44 sbic PORB,0 CLR Counter_Comand; RET Тут у меня либо программка выполняет основную задержку либо если датчик отконвертировал и выдал 1 на линию то я сбрасываю счетчик команд и у меня программка снова делает инициал датчика и чтения температуры его. Просто програмка у меня на основой задержке не зациклается на линии почему то датчик сразу выдает 1
А мне казалось, просто дёргаешь линию — и если датчик не дёрнул в ответ, то преобразование закончилось.
не надо доёбываться до слов. Посылаешь 00100010 - это команда 0х44 - конвертирование температуры. Если "просто" дёргать шину - вообще нифига не будет. Это работает только сразу после команды конвертирования. Иначе, как бы другие устройства на шине могли бы работать?
Карма: 67
Рейтинг сообщений: 1012
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 18809 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
uldemir писал(а):
Посылаешь 00100010 - это команда 0х44 - конвертирование температуры.
Ну, значит мы друг друга недопоняли.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Тогда вопрос про "временные интервалы считывания" сколько они по времени должны быть
трудности перевода... Вы же читаете температуру? ну вот так же и надо посылать команды чтения. Я их называю слот чтения (который ничем не отличается от слота записи лог.1).
Тогда вопрос про "временные интервалы считывания" сколько они по времени должны быть
Я делал так: раз в секунду по таймеру читаю данные температуры предыдущего замера, и тут же посылаю команду на следующее преобразование, выхожу из обработчика до следующего прерывания.
И все... одно отвлечение в секунду и переменная температуры всегда актуальна....
Зарегистрирован: Вс сен 06, 2009 20:17:20 Сообщений: 20
Рейтинг сообщения:0
Да действительно надо было делать тайм слот для чтения состояния датчика.Теперь промежуток между командой 0x44 и новой инициал где то 78 мс (стоит 9 битное разрешение) хотя должно быть 93.75 мс.Все это проверяю в логическом анализаторе dx pro
Зарегистрирован: Вс сен 06, 2009 20:17:20 Сообщений: 20
Рейтинг сообщения:0
shads писал(а):
Freerider писал(а):
Тогда вопрос про "временные интервалы считывания" сколько они по времени должны быть
Я делал так: раз в секунду по таймеру читаю данные температуры предыдущего замера, и тут же посылаю команду на следующее преобразование, выхожу из обработчика до следующего прерывания.
И все... одно отвлечение в секунду и переменная температуры всегда актуальна....
Да просто хотелось не тупить с задержкой а опрашивать датчик чтоб как только так сразу его считывать
А смысл какой? Для скоростных применений этот датчик не подходит... а для визуального отображения температуры - нет смысла чаще одного раза в сек менять показания... да и программа меньше становится, если в прерывании по таймеру просто поднять флаг, а в основном цикле опрашивать этот флаг и инитить обмен...
inline uint8_t onewire_level() {// Читает значение уровня на шине 1-wire return ONEWIRE_PIN & (1<<ONEWIRE_PIN_NUM); }
// Определения и функции ниже нужны только если требуется "сильный" подтягивающий резистор #define ONEWIRE_STRONG_DDR DDRC #define ONEWIRE_STRONG_PORT PORTC #define ONEWIRE_STRONG_PIN_NUM 1 //нога PC1 N23
void onewire_strong_enable() {// включение "сильной" подтяжки ONEWIRE_STRONG_PORT |= (1<<ONEWIRE_STRONG_PIN_NUM);// Для исключения низкого уровня на шине, сначала изменяется регистр значения ONEWIRE_STRONG_DDR |= (1<<ONEWIRE_STRONG_PIN_NUM);// затем - регистр направления }
void onewire_strong_disable() {// отключение "сильной" подтяжки ONEWIRE_STRONG_DDR &= ~(1<<ONEWIRE_STRONG_PIN_NUM);// Для исключения низкого уровня на шине, сначала изменяется регистр направления ONEWIRE_STRONG_PORT &= ~(1<<ONEWIRE_STRONG_PIN_NUM);// затем - регистр значения }
// Выдаёт импульс сброса (reset), ожидает ответный импульс присутствия. // Если импульс присутствия получен, дожидается его завершения и возвращает 1, иначе возвращает 0 uint8_t onewire_reset(){ onewire_low(); //проваливает уровень _delay_us(640); // Пауза 480..960 мкс onewire_high(); // поднимает в единицу _delay_us(2); // Время необходимое подтягивающему резистору, чтобы вернуть высокий уровень на шине for (uint8_t c = 80; c; c--) {// Ждём не менее 60 мс до появления импульса присутствия; if (!onewire_level()) { // Если обнаружен импульс присутствия, ждём его окончания while (!onewire_level()) { } // Ждём конца сигнала присутствия return 1; } _delay_us(1); }// for (uint8_t c = 80; c; c--) {// Ждём не менее 60 мс до появления импульса присутствия; return 0; }
int main(void){ while(1) { _delay_us(4000); onewire_reset(); }; }
Оговорюсь - Это куски. В остальной части она чего-то пишет (корректно) в LCD. В результате я хотел получить периодический сигнал, который был-бы импульсом сброса и вызывал-бы ответ датчика. Посмотрел по осциллографу, напряжение просаживается на 640мкСек, а ответа нет. Вопрос - Я чего-то делаю неправильно, или датчик кривой. Если я чего пропустил в описании важного, извиняйте, спрашивайте. ЗЫ. Пробовал другой датчик, такой-же результат тот-же. С уважением Николай.
Про данные речи пока не идет. Я хочу, чтобы датчик ответил импульсом присутствия. Я что то понял не правильно и датчик, в ответ, не должен просадить сигнал до нуля? С уважением, Николай.
Карма: 67
Рейтинг сообщений: 1012
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 18809 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Должен. В ответ на Reset датчик должен послать Presense. Зачем такая простыня кода чтобы дёрнуть ногой, а потом считать значение, я не понимаю.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения