Я новичок в программировании пытаюсь собрать термометр в codevisionavr з двома датчиками температуры DS18B20 , МК ATMEGA8 и LCD LM016L
При запуске,МК находит только один датчик. Что я делаю не так?
MK знаходить только разные датчики наприклад: ds18b20+ds18s20+ds1822...а якщо поставить однакови дачикы ds18b20+ds18b20...то мк бачить только один датчик .
МК может працювати з однаковими датчиками? якщо так то як це реализувати?
А это в железе или в симуляторе? Если в Протеусе то серийные номера датчикам поставить разные надо. Иначе по одному и найдет.
Вот рабочий пример (для симулятора):
ARV писал(а):МК должен находить любые датчики в любых комбинациях...
Может быть Вы не заметили, но человек использует библиотеку 1wire от CVAVR. Поиск числа устройств - функция этой библиотеки. Поэтому все претензии можно адресовать ее разработчику...
Goodefine писал(а):Может быть Вы не заметили, но человек использует библиотеку 1wire от CVAVR. Поиск числа устройств - функция этой библиотеки. Поэтому все претензии можно адресовать ее разработчику...
мне-то все равно, к кому претензии исходники библиотечной функции там есть - так что все в силах пользователя
кстати, думаю, что функция как раз работает правильно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Goodefine писал(а): все претензии можно адресовать ее разработчику...
или в ДЕЗ или в СЭС ...
ООН лучше. а еще лучше в ОБЭП - пусть нажмут на пиратов: ваще обнаглели, ломают, ломают - а оно потом не работает, как хочется! да еще, как выяснилось, и без исходников! безобразие!!!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Результат отображается с одним значащим знаком после запятой, но если выставить градацию датчиков в 0.5С точности это не прибавляет (15.0С и 15.5С отображаются как 15.0С) - Вас это устраивает?
Результат отображается с одним значащим знаком после запятой, но если выставить градацию датчиков в 0.5С точности это не прибавляет (15.0С и 15.5С отображаются как 15.0С) - Вас это устраивает?
Нет не устраивает
Как вывести на LCD перемену типа float ?
Мне необходим сам алгоритм преобразования
float в char .
Меряй сразу в signed int , плюс будет менше ресурсов жрать, так как не надо переводить. Я так делаю (код для измерения с десятичными в переменную int):
Результат отображается с одним значащим знаком после запятой, но если выставить градацию датчиков в 0.5С точности это не прибавляет (15.0С и 15.5С отображаются как 15.0С) - Вас это устраивает?
Нет не устраивает
Как вывести на LCD перемену типа float ?
Мне необходим сам алгоритм преобразования
float в char .
Напиши на аську 327117582 все докладно розкажу та покажу може й ти чим поділишся.
while(1)
{
///////////////////////////// какой-то код /////////////////////////////
if(temper_read) //если температура считана
{
#asm("cli")
w1_init();
w1_write(0xCC); //пропуск ROM чтобы обратиться ко всем датчикам одновременно
w1_write(0x44); //команда на преобразование для всех датчиков
#asm ("sei")
delay_ms(10); //пропуск импульсов ответа датчиков
temper_read=0;
};
///////////////////////////// какой-то код /////////////////////////////
if(PINB.3)//если показания готовы (по даташиту) PORTB.3 куда подкл датчик
{
#asm("cli")
temper=ds18b20_temperature_10(&rom_code[i][0]); // смотри на 3 сообщения выше (от Krik99)
#asm ("sei")
temper_read=1; // показания считаны можно запускать новое преобразование
};
///////////////////////////// какой-то код /////////////////////////////
};
Это рабочий код для трехпроводного проключения. Необходимо исправить библиотеку, удалив строки
Теперь программа не будет сидеть в одном месте почти секунду. Это для одного датчика, а для нескольких надо доработать вывод показаний. Я проверял с одним.
И собственно говоря вопрос - как можно прочитать регистр температуры датчика? В программировании я практически ничего не понимаю, как производится считывание в примере CodeVision мне не нравится (абсолютно ничего не понятно), поэтому и не нравится. Должна же быть команда BEh, но где она? Нужно просто получить 2 байта из датчика, как это сделать?