реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> DS18B20 + WinAVR, не инициализируется датчик :(
virtuality
сообщение Jul 25 2006, 19:07
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



Николай, советую проверить работоспособность датчика на готовом примере в CodeVision. Если и там у вас ничего работать не будет - значит проблема железе.
Go to the top of the page
 
+Quote Post
Labinskiy Nikola...
сообщение Jul 26 2006, 09:15
Сообщение #17


Участник
*

Группа: Новичок
Сообщений: 27
Регистрация: 5-07-06
Из: Украина, Донецк
Пользователь №: 18 606



Ну вот, купил специально второй датчик для проверок в CodeVision

Код
#include <mega16.h>
// 1 Wire Bus functions
#asm
   .equ __w1_port=0x1B;PORTA
   .equ __w1_bit=4
#endasm
#include <1wire.h>
#include <ds18b20.h>
#include <stdio.h>
void main(void)
{
// USART initialization
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x0C;

// 1 Wire Bus initialization
w1_init();
if (ds18b20_init(NULL,0,0,DS18B20_12BIT_RES))
  {
     while (1)
      {
      /* measure and display the temperature(s) */
          printf("t=%+.3f\xf8C\n\r",
          ds18b20_temperature(NULL));
      };
  }
else
  printf("error!");

while (1);
}

выдает ошибку на обоих датчиках...

от куда беруться такие напряжения (4.28В, см. выше)? Какие есть идеи?
Просто схема подключения элементарная, ну где там можно ошибиться....

Сообщение отредактировал Labinskiy Nikolay - Jul 26 2006, 09:15


--------------------
If you can't make it good - don't make it look good ;)
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 26 2006, 18:24
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



Может у вас ошибка не в съеме информации с датчика, а в передаче ее? Я так понял вы через UART передаете?
Go to the top of the page
 
+Quote Post
Labinskiy Nikola...
сообщение Jul 27 2006, 05:13
Сообщение #19


Участник
*

Группа: Новичок
Сообщений: 27
Регистрация: 5-07-06
Из: Украина, Донецк
Пользователь №: 18 606



Да, через УАРТ, но там ошибок нету, я через гиперткрминал посылаю команды контроллеру на которые он успешно отвечает мигая светодиодами и т.д., и одна из этих команд - опрос датчика...
Дебагил по шагам через JTAG ICE и мерял напряжения на ножках...
До сих пор не пойму почему там не появляется на выходе 0...


--------------------
If you can't make it good - don't make it look good ;)
Go to the top of the page
 
+Quote Post
Balun
сообщение Jul 27 2006, 05:45
Сообщение #20


Участник
*

Группа: Свой
Сообщений: 34
Регистрация: 26-07-06
Пользователь №: 19 098



Код
/* Multipoint thermometer with LCD display
   using the Maxim DS18B20
   1 Wire bus temperature sensors

   CodeVisionAVR C Compiler
   (C) 2000-2005 HP InfoTech S.R.L.
   www.hpinfotech.ro

   Chip: ATmega8515
   Memory Model: SMALL
   Data Stack Size: 128 bytes
  
   THE ATmega8515 CLOCK FREQUENCY MUST BE 3.6864 MHz

   The DS18B20 sensors are connected to
   bit 6 of PORTA of the ATmega8515 as follows:

   [DS18B20]     [STK500 PORTA HEADER]
    1 GND         -   9  GND
    2 DQ          -   7  PA6
    3 VDD         -  10 +5V

   All the temperature sensors must be connected
   in parallel
  
   AN 4.7k PULLUP RESISTOR MUST BE CONNECTED
   BETWEEN DQ (PA6) AND +5V !
*/
#asm
    .equ __w1_port=0x1b
    .equ __w1_bit=6
#endasm

/* Use an 2x16 alphanumeric LCD connected
   to PORTC as follows:

  [LCD]   [STK500 PORTC HEADER]
   1 GND- 9  GND
   2 +5V- 10 VCC  
   3 VLC- LCD contrast control voltage 0..1V
   4 RS - 1  PC0
   5 RD - 2  PC1
   6 EN - 3  PC2
  11 D4 - 5  PC4
  12 D5 - 6  PC5
  13 D6 - 7  PC6
  14 D7 - 8  PC7
*/

#asm
    .equ __lcd_port=0x15
#endasm

#include <lcd.h> // LCD driver routines
#include <ds18b20.h>
#include <delay.h>
#include <stdio.h>

char lcd_buffer[33];

/* maximum number of DS18B20 connected to the 1 Wire bus */
#define MAX_DEVICES 8

/* DS18B20 devices ROM code storage area */
unsigned char rom_code[MAX_DEVICES][9];

main()
{
unsigned char i,j,devices;

lcd_init(16);
lcd_putsf("CodeVisionAVR\n1 Wire Bus Demo");
delay_ms(2000);
lcd_clear();

/* detect how many DS18B20 devices
   are connected to the 1 Wire bus */
devices=w1_search(0xf0,rom_code);
sprintf(lcd_buffer,"%u DS18B20\nDevice detected",devices);
lcd_puts(lcd_buffer);
delay_ms(2000);

/* display the ROM codes for each device */
if (devices)
   {
   for (i=0;i<devices;i++)
       {
       sprintf(lcd_buffer,"Device #%u ROM\nCode is:",i+1);
       lcd_clear();
       lcd_puts(lcd_buffer);
       delay_ms(2000);
       lcd_clear();
       for (j=0;j<8;j++)
           {
           sprintf(lcd_buffer,"%02X ",rom_code[i][j]);
           lcd_puts(lcd_buffer);
           if (j==3) lcd_gotoxy(0,1);
           };
       delay_ms(5000);
       };
   }
else
while (1); /* stop here if no devices were found */

/* configure each DS18B20 device for 12 bit temperature
   measurement resolution */
for (i=0;i<devices;)
    if (!ds18b20_init(&rom_code[i++][0],20,30,DS18B20_12BIT_RES))
       {
       sprintf(lcd_buffer,"Init error for\ndevice #%u",i);
       lcd_clear();
       lcd_puts(lcd_buffer);
       while (1); /* stop here if init error */
       };

/* measure and display the temperature(s) */      
while (1)
      {
      j=1;
      for (i=0;i<devices;i++)
          {
          sprintf(lcd_buffer,"t%u=%+.3f\xdfC",j++,ds18b20_temperature(&rom_code[i][0]));
          lcd_clear();
          lcd_puts(lcd_buffer);
          delay_ms(500);
          };
      };
}


У меня вот этот пример из кодевижена работает.

Посмотрите на эту строчку
(!ds18b20_init(&rom_code[i++][0],20,30,DS18B20_12BIT_RES))
Вроду нада поискать датччики и определмить их адрес, ну уж потом
делать инит
Go to the top of the page
 
+Quote Post
Labinskiy Nikola...
сообщение Jul 27 2006, 17:06
Сообщение #21


Участник
*

Группа: Новичок
Сообщений: 27
Регистрация: 5-07-06
Из: Украина, Донецк
Пользователь №: 18 606



Цитата
Вроду нада поискать датччики и определмить их адрес, ну уж потом
делать инит

Это если на 1wire шине их несколько, если же датчик один, его поиск (чтение заводского ROM кода) не обязателен.

Но я все равно проверю, спасибо.


--------------------
If you can't make it good - don't make it look good ;)
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th August 2025 - 12:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01404 секунд с 7
ELECTRONIX ©2004-2016