1-wire ds18b20

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Закрыто
Аватара пользователя
wir_wolf
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Чт май 05, 2011 22:37:15
Контактная информация:

1-wire ds18b20

Сообщение wir_wolf »

Доброго времени суток уважаемые. Пытаюсь сделать термометре на основе статьи http://kibermaster.net/rabota-s-shinoy- ... b20-k-avr/ и с WINSTAR WH1202A.

После того как убираю USART и printf по каким то не известным причинам перестает работать сканер устройств на шине.

Вот собственно код

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

#include "main.h"
#include <avr/io.h>
#include <avr/interrupt.h> 
#include <avr/wdt.h>
#include <stdio.h>
#include <util/delay.h>
#include "delay.h"
#include "onewire.h"
#include "ds18x20.h"




unsigned char   nDevices;   // количество сенсоров
unsigned char   owDevicesIDs[MAXDEVICES][8];   // Их ID


unsigned char search_ow_devices(void) // поиск всех устройств на шине
{
   unsigned char   i;
      unsigned char   id[OW_ROMCODE_SIZE];
      unsigned char   diff, sensors_count;
   
   sensors_count = 0;

   for( diff = OW_SEARCH_FIRST; diff != OW_LAST_DEVICE && sensors_count < MAXDEVICES ; )
    {
      OW_FindROM( &diff, &id[0] );

         if( diff == OW_PRESENCE_ERR ){break};

         if( diff == OW_DATA_ERR ){break;}

         for (i=0;i<OW_ROMCODE_SIZE;i++)
      {
         owDevicesIDs[sensors_count][i] = id[i];
      }          
      sensors_count++;
    }
   return sensors_count;

}

int main_dalas_termo(void)
{

   DDRB = 0b00000010; PORTB = 0b00000010;

   nDevices = search_ow_devices(); // ищем все устройства

   if (nDevices == 0)
   {
      LCD_print("No_Devise",2,5);
   }
   for (unsigned char i=0; i<nDevices; i++) // теперь сотируем устройства и запрашиваем данные
   {
      DS18x20_StartMeasureAddressed(owDevicesIDs[i]); // запускаем измерение
      _delay_ms(800); // ждем минимум 750 мс, пока конвентируется температура
      unsigned char   data[2]; // переменная для хранения старшего и младшего байта данных
      DS18x20_ReadData(owDevicesIDs[i], data); // считываем данные
      unsigned char   themperature[3]; // в этот массив будет записана температура
      DS18x20_ConvertToThemperature(data, themperature); // преобразовываем температуру в человекопонятный вид
      char buff[10];
      
      itoa(themperature[1], buff, 10);
      LCD_print(buff,i,3);
      
      LCD_print(".",i,5);
      
      itoa(themperature[2], buff, 10);
      LCD_print(buff,i,6);

   }
      

}

ЗЫ. Порты заданы правильно.
AvR_Termometer.rar
Сорцы
(158.21 КБ) 298 скачиваний
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: 1-wire ds18b20

Сообщение Аlex »

Закрыто

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