Jump to content

    
Sign in to follow this  
iiv

Atmega328P и DS18B20 в фоновом режиме

Recommended Posts

Почему параллель? До начала чтения данных с датчиков , Вы работаете со всеми сразу игнорируя ID микросхем, а вот чтение для каждого своё.
я делал небольшую модификацию библиотеки 1-wire и получил возможность работать на самом деле в параллель с 8-ю датчиками (а при высокой тактовой частоте и с бОльшим количеством), подключеным к 8 линиям одного порта AVR. при известном желании можно на самом деле одновременно получить результаты с 8 штук :) правда зачем - не понятно :)

Share this post


Link to post
Share on other sites

На 8 портов и еще с питанием на датчик все будет быстро, а при паразитном питании не уложитесь в одну секунду на 2 датчика ну никак.

Ресет, ответ, проверка, посылка серийника критичны ко времени, что-то обрЭзать там не получится ...

Edited by Павлик

Share this post


Link to post
Share on other sites

1-wire вообще интересные устройства у них, особенно dac/adc, ключи и прочее. я предпочел к атмеге через I2C подключить драйвер DS2482-800 (или -100), недорого и удобно ну и данные по прерыванию валятся.

 

Share this post


Link to post
Share on other sites

А у кого опыт паразитного питания? Какие основные моменты?

Вот, думаю, что лучше уменьшить разрядность? Или при единственном

датчике на линии это не имеет значения?

Кто-то утверждал, что на паразитном питании получает лучшие результаты

по длине кабеля, чем при постоянном питании. Как это может быть?

Share this post


Link to post
Share on other sites

Нормально все работает на паразитном питании -50 ... + 127. Время заряда давать не менее 800-900мс, если длинна провода большая, подтяжку уменьшить нужно.

После чтения дать 0, чтоб не было разогрева датчика.

Share this post


Link to post
Share on other sites

Так будет понятнее

 

ds_start:            //  
andi    flags,0xFC   // чистим флаги
rcall   ds_reset     //  сброс 
cli                  //  выключаем прерывания
ldi 	tmp, 0x55    // соответствие ROM 
rcall 	ds_write     //
push    zl           // сохраняем адрес серийника
push    zh           // 
rcall   send_serial  //  посылаем 8 байт 1 код устройства 6 серийный номер 1 црц
pop     zh           //  восстанавливаем адрес серийника
pop     zl           //  
ldi 	tmp, 0x44 	 // Посылаем команду конвертировать температуру  
rcall 	ds_write     // 
sbi     dal_port,ds_p
sbi     dal_ddr,ds_p
sei                  //  
cbi     portb,load   // Load -> 0
rcall   wait_075s    //  даем еденицу для конвертирования температуры минимум 800-900 мс ( о чем я говорил )
rcall   ds_reset     // 
cli                  // 
ldi 	tmp, 0x55    // соответствие ROM 
rcall 	ds_write     //
rcall   send_serial  //  
ldi 	tmp, 0xBE 	 // Посылаем команду что сейчас будем читать датчик  
rcall 	ds_write     // 
sei
ldi     xl,65        // Ждем 50 мкс
rcall   wait         //     
cli
rcall 	ds_read		 //  читаем 12 бит
cbi     dal_port,ds_p
sbi     dal_ddr,ds_p // RESET Dallas   ставим 0 чтоб избежать саморазогрев датчика
rcall   ds_bcd       //  
ds_ok:               //  
sei                  //    		
ret                  // Выход из подпрограммы

send_serial:         // Посылаем 8 байт серийного номера в датчик DS18B20 
                    // Адрес строки предварительно загружаем в Z
ldi    loop2,8       // 
send_c:              // 
lpm    tmp,Z+        // 
rcall  ds_write      // 
dec    loop2         //
brne   send_c        // 
ret                  // 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this