Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Тема закрыта

1-wire ds18b20

Сб сен 22, 2012 15:08:28

Доброго времени суток уважаемые. Пытаюсь сделать термометре на основе статьи 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 KiB) Скачиваний: 280

Re: 1-wire ds18b20

Вс сен 23, 2012 00:24:03

viewtopic.php?f=20&t=64022
Тема закрыта