roboforum.ru

Технический форум по робототехнике.

Климат контроль в авто.

Re: Климат контроль в авто.

rig » 03 июн 2010, 22:28

инициализации датчика температуры не вижу чтото подобное:
Код: Выделить всёРазвернуть
#define MAX_DS1820 3           // maximum number of DS1820 devices connected to the 1 Wire bus
unsigned char ds1820_devices;  // number of DS1820 devices  connected to the 1 Wire bus
unsigned char ds1820_rom_codes[MAX_DS1820][9];// DS1820 devices ROM code storage area, 9 bytes are used for each device
...
ds1820_devices=w1_search(0xf0,ds1820_rom_codes);


Добавлено спустя 1 минуту 38 секунд:
кстати это все кодевижен накалякал в начале проекта через мастер кода, потом уже пользовался по назначению.

Добавлено спустя 6 минут 19 секунд:
Sun-dey писал(а):sprintf(lcd_buf,"TM %04u X %u Y %u ",d_max,x_cell_max,y_cell_max); С подобной строкой как-то не разобрался еще, хотя несомненно удобнее и акуратнее :oops:

что там сложного, %чегото_там это тип выводимой переменной, сама переменная после кавычек. если переменных несколько то через запятую. в кавычках можно писать любой англицкий текст.
типы переменных смотрятся из хелпа на sprintf
если писать %04переменная - получим переменную в 4 знака. если переменная короче, то добавятся нули слева.
если писать %4переменная - получим зарезервированные места на 4 знака.

Re: Климат контроль в авто.

Sun-dey » 04 июн 2010, 01:06

Такой код если поставить галочку на Multiple devices
Если не ставить, я так понял когда один датчик, то все проще- w1_init();

Добавлено спустя 2 часа 33 минуты 34 секунды:
Жесть какая-то, попробовал из примеров CVAVR- та же песня, не работает :(

Re: Климат контроль в авто.

rig » 04 июн 2010, 06:10

тогда велком на макетку.

Добавлено спустя 43 секунды:
можно другой МК попробовать, мегу16 к примеру.

если работать через библиотеку, для одного датчика блокнот все равно надо объявлять. только массив станет одномерным. кстати я даж и незнаю будет ли работать функция ds18b20_temperature(0) правильно. Погляди #include <ds18b20.h> изнутри, какие входные параметры переменных.
Код: Выделить всёРазвернуть
unsigned char ds1820_rom_codes[9];


вот пример работы без массива, напрямую с датчиком. Датчик соответственно тут только один.
Код: Выделить всёРазвернуть
    char t1, t2, T;
    .....
    w1_init();   
    w1_write(0xCC);
    w1_write(0xBE);
 
    t1=w1_read();   //LSB     
    t2=w1_read();   //MSB
   
#ifdef DS18B20
    t2 = t2 << 4;   // DS18B20
    t1 = t1 >> 4;   // DS18B20
    T = (t2 & 0xF0) | (t1 & 0x0F);  // измеренная Т   // DS18B20
#endif   
   
     
#ifdef DS1820S
    t1 = t1 >> 1;   //DS1820S
    T = (t2 & 0b10000000) | (t1 & 0b01111111);  //измеренная Т DS1820S
#endif   

    if (T > 127) T = 0;

Re: Климат контроль в авто.

Sun-dey » 04 июн 2010, 12:00

А вот нифига не работает... самое обидное- что не работает из примеров :cry:
Вобщем снес все, взял пример из папки, изменил под 8 мегу. датчик не инициализируется. на дисплее "0 DS18B20 Device detected"

Код: Выделить всёРазвернуть
#include <lcd.h> // LCD driver routines
#include <ds18b20.h>
#include <delay.h>
#include <stdio.h>
#include <ds1820.h>
#asm
   .equ __w1_port=0x15 ;PORTC
   .equ __w1_bit=3
#endasm
#include <1wire.h>

#asm
   .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.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];

void 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);
          };
      };
}
Последний раз редактировалось Sun-dey 04 июн 2010, 12:17, всего редактировалось 2 раз(а).

Re: Климат контроль в авто.

rig » 04 июн 2010, 12:09

мои примеры из рабочих проектов, там в железе все работает.
меняй версию протеуса, или переходи на железо

Re: Климат контроль в авто.

Sun-dey » 04 июн 2010, 12:19

нашел готовый вариант, но сделан он криво и немного не тот алгоритм. с проектом для протеуса- работает зараза.

Re: Климат контроль в авто.

Sun-dey » 04 июн 2010, 17:57

Решено :D вылечилось другой версией компилятора.

Re: Климат контроль в авто.

rig » 04 июн 2010, 17:58

дальше проблем быть не должно. версии бы озвучил.

Re: Климат контроль в авто.

Sun-dey » 04 июн 2010, 20:37

нормально собралось в CodeVisionAVR V2.04.4a
проблемы были с более ранними, уж не помню какими, штуки 3 пробовал. снес все и заново ставил. Что странно- ни ошибок не ворнингов при компиляции не было, тупо не цеплялся датчик температуры.
в протеусе уже все работает, осталось за малым :ROFL:

Re: Климат контроль в авто.

rig » 04 июн 2010, 21:28

я на протеус подумал. у меня куча кодевиженов стоит от 125 до 204 и ни один не подводил. чет тут не то.
как он может н ецепляться,этож не компилятора косяк

Re: Климат контроль в авто.

Sun-dey » 05 июн 2010, 21:09

Именно компилятора. Я нашел готовый вариант термометра с исходником и проектом для протеуса. проект работает с прошивкой из исходника, компилирую сам тот же код- не работает, подсовываю готовую прошивку из проекта- работает.
Снес кодевижены все что были, поставил снова, один правда. Скомпилил заново и все работает.
может в настройках проекта кодевижена нюанс какой был, но теперь уже не узнать.
Сегодня закупил детальки, кроме самой мелочи, датчика температуры. :( будет только через неделю, и озвучили 270р за DS18b20+


Rambler\'s Top100 Mail.ru counter