Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
30.01.2012, 22:46
|
|
Временная регистрация
Регистрация: 30.03.2005
Адрес: Нижний Новгород
Сообщений: 75
Сказал спасибо: 29
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
MikroC и несколько датчиков DS18B20
Здравствуйте!
Пишу программу на MikroC по задумке автора требуется опрос 5 датчиков температурных.
С работой одного датчика разобрался, а вот как реализовать 33 команду? и правильно принять 64-й код датчика.
Что писать после Ow_Write(&PORTA, 4, 0xBE);
И как потом правильно обращаться к определенному датчику.
Спасибо за помощь!
|
|
|
|
30.01.2012, 22:58
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,539
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
|
Re: MikroC и несколько датчиков DS18B20
Выбираете датчик для общения командой Match ROM(0x55) с номером нужного датчика. Если номера заранее не известны, то сначала Search ROM(0xF0) для определения всех номеров.
Последний раз редактировалось realid; 30.01.2012 в 23:02.
|
|
|
|
30.01.2012, 23:02
|
|
Временная регистрация
Регистрация: 30.03.2005
Адрес: Нижний Новгород
Сообщений: 75
Сказал спасибо: 29
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: MikroC и несколько датчиков DS18B20
Для начала как правильно считать ROM 64 бита, в массив? Циклом поэлементного Ow_Read(&PORTA, 4);?
А обращаться как?
Принцип после прочтения даташита понятен, но как именно на mikroC написать?
|
|
|
|
30.01.2012, 23:08
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,539
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
|
Re: MikroC и несколько датчиков DS18B20
Сообщение от feo
|
Для начала как правильно считать ROM 64 бита, в массив? Циклом поэлементного Ow_Read(&PORTA, 4);?
А обращаться как?
Принцип после прочтения даташита понятен, но как именно на mikroC написать?
|
МикроСей не использую.
А принцип простой как 5 копеек. Даете импульс сброса, после обнаружения импульса присутствия, команду 0x33 после этого выдаете 64 раза слоты чтения(Read slot) в каждом слоте проверяете состояние шины и фиксируете 0 или 1. Если датчиков несколько и ROM'ы их не известны, то 0x33 не прокатит. Надо подавать 0xF0 и определять все номера(см. даташит или 1-wire search).
Последний раз редактировалось realid; 30.01.2012 в 23:11.
|
|
|
|
30.01.2012, 23:20
|
|
Временная регистрация
Регистрация: 30.03.2005
Адрес: Нижний Новгород
Сообщений: 75
Сказал спасибо: 29
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: MikroC и несколько датчиков DS18B20
Код:
|
char DevRom[8];
..........................
Ow_Reset(&PORTA, 4);
Ow_Write(&PORTA, 4, 0x33);
for (j=0,j‹8,j++) {
DevRom[j] = Ow_Read(&PORTA, 4);
} |
Похоже?
|
|
|
|
31.01.2012, 01:07
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: MikroC и несколько датчиков DS18B20
Ловите проект на МикроС 5.40
Он не дописан, но на первом этапе работает. Опрашивает три цепочки по три датчика по команде Search Rom.
Если надо будет, проект в протеусе тоже прилеплю. В этом проекте все нужные вам процедуры есть. Черпайте на здоровье.
ЗЫ МикроС меня на этом проекте очень расстроил. В плане оптимизации там еще поле непаханное для работы. Куча ненужных переходов. Ладно, сами смотрите.
|
|
|
|
31.01.2012, 11:01
|
|
Временная регистрация
Регистрация: 30.03.2005
Адрес: Нижний Новгород
Сообщений: 75
Сказал спасибо: 29
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: MikroC и несколько датчиков DS18B20
Большое спасибо за пример!
Я новичек и понял не все:
разбираю файл ds1822.c
Там функции One_Wire_Write_Byte, One_Wire_Read_Bit и т.д.
В стандартной библиотеке таких функци нет.
Я так понимаю Вы какую-то свою библиотеку подключали?
Я по хелпу пытался сторонние баблиотеки включать, но что-то не получалось.
Как правильно подключить необходимые библиотеки?
|
|
|
|
31.01.2012, 12:25
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: MikroC и несколько датчиков DS18B20
Сообщение от feo
|
Большое спасибо за пример!
Я новичек и понял не все:
разбираю файл ds1822.c
Там функции One_Wire_Write_Byte, One_Wire_Read_Bit и т.д.
В стандартной библиотеке таких функци нет.
|
Ваш main.c работает с файлом ds1822.c, который работает с файлом One-Wire.c, который работает с файлом PIC_GPIO.c т.к. реализация 1-Wire - это фактически ногодрыг. А промежуточные файлы только для стыковки. Подключаете файл к проекту и пользуете.
А из библиотек MicroC я только паузы применяю. Ну для дебага программный UART бывает т.к. в PICKIT2 он есть.
|
|
|
|
31.01.2012, 17:23
|
|
Временная регистрация
Регистрация: 30.03.2005
Адрес: Нижний Новгород
Сообщений: 75
Сказал спасибо: 29
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: MikroC и несколько датчиков DS18B20
Ухх, как у вас все не просто в примере.
Мне бы только запросить код устройства, а потом к нему обратиться, не более того. Без динамического добавления новых датчиков.
Код:
|
Ow_Reset(&PORTA, 4);
Ow_Write(&PORTA, 4, 0x33);
for (j=0;j‹8;j++) {
DevRom[j] = Ow_Read(&PORTA, 4);
Delay_ms(15);
} |
Таким кодом получил массив символов: 40 248 240 215 2 0 0 163
Как я понимаю это 64-й код.
40 - код семейства
248 240 215 2 0 0 - код устройства
163 - CRC
Правильно ли я понимаю?
Теперь чтобы обратиться к устройству я должен также передать на линию весь этот код? тем же способом?
Последний раз редактировалось feo; 31.01.2012 в 19:47.
|
|
|
|
31.01.2012, 20:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: MikroC и несколько датчиков DS18B20
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:01.
|
|