Страница 1 из 1

проблема вывода температуры на LCD 20х4

Добавлено: Пт мар 04, 2011 13:22:37
Artos
Добрый день уважаемые коллеги!
Меня давно интересовала проблема сканирования температуры и отображения ее на каком либо индикаторе или LCD
Цель моей задачи:
4 датчика температуры DS18b20
LCD 20x4
МК Mega8
отображение всех температур на LCD
наличие 8 термостатов, по два на каждый канал "датчик"
и наличие защиты от пропадания датчика.
Все это я могу реализовать кроме вывода температуры на LCD .
переделывая код с меги8535 на мегу8
столкнулся с проблемой вывода температуры на LCD
все работает а вот вместо температуры отображается полная бредятина и которая в протеусе не меняется с изменением температуры..
около часа назад лазил по интернету и нашел проект тоже на LCD и мега8 взял от туда массив вывода температуры и вставил в свой код
заработало только точка сместилась на один разряд влево... надо 98.8 а показывает 9.88 и т.д.
Помогите мне пожалуйста разобраться. Хочу понять как высчитывать эту замудренную весчь=)
с ув. Артем

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

 /*****************************************************
This program was produced by the
CodeWizardAVR V1.25.9 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : Termometr-Termostat 8 ch.
Version : 1.0
Date    : 02.03.2011
Author  : Ugrimov Artyom                         
Company : Kontora                          
Comments: 


Chip type           : ATmega8
Program type        : Application
Clock frequency     : 8,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega8.h>
#include <delay.h>
#include <stdio.h>
#include <lcd.h>
#asm
   .equ __lcd_port=0x12 ;PORTD
#endasm
#include <ds18b20.h>
#asm
   .equ __w1_port=0x18 ;PORTB  bit7
   .equ __w1_bit=7
#endasm
#define MAX_DEVICES 8



#pragma rl+
char *str1="TERMO SENSOR";
char *str2="No SENSOR!";
char *str3="U Error  ";
char *str4="K Error  ";
char *str5="L Error  ";
char *str6="R Error  ";
#pragma rl- 





unsigned char devices;
unsigned char LcdBuffDevices[20];
unsigned char RomCode[4][9];
unsigned char LcdBuff1[20];
unsigned char LcdBuff2[20];
unsigned char LcdBuff3[20];
unsigned char LcdBuff4[20];




void main( void )
{ 

int temp;
int temp2;
  
int ds_num=0;
ds_num++;
if (ds_num > 9) {ds_num=0;}

  
  
  //int temp3;
  //int temp4;
DDRB=0b01111111;
PORTB=0;
  lcd_init( 20 );
  lcd_clear( );
   
  devices=w1_search( DS18B20_SEARCH_ROM_CMD, RomCode ); //поиск датчиков на линии 1-wire
   
  if( devices )
  {
    sprintf( LcdBuffDevices,"Sensor = %u", devices ); //выводим информацию о кол-ве датчиков
    
    lcd_gotoxy( 0,1 ); lcd_puts( LcdBuffDevices ); lcd_gotoxy( 0,0 ); lcd_puts( str1 );
   
    ds18b20_init( &RomCode[0][0], 30, 60, DS18B20_12BIT_RES ); //инициализация первого датчика
    ds18b20_init( &RomCode[1][0], 30, 60, DS18B20_12BIT_RES ); //инициализация второго датчика
    
    ds18b20_init( &RomCode[2][0], 30, 60, DS18B20_12BIT_RES ); //инициализация первого датчика
    ds18b20_init( &RomCode[3][0], 30, 60, DS18B20_12BIT_RES ); //инициализация второго датчика
    
    if (devices == 2) { PORTB.0=1;}
  else { PORTB.0=0;}
  //if (ds18b20_temperature( &RomCode[1][0] ) > 30) {PORTB.1=1;} else {PORTB.1=0;}
  
  while( 1 )
  { 
  
  
  
  temp=ds18b20_temperature(&RomCode[0][0]);  //читаем температуру
  temp2=ds18b20_temperature(&RomCode[1][0]);  //читаем температуру
  
  if (temp > 30) {PORTB.1=1;} else {PORTB.1=0;} 
  if (temp2 > 38) {PORTB.2=1;} else {PORTB.2=0;} 
  delay_ms(10);
  
    //чтение температуры первого датчика
    sprintf( LcdBuff1,"L %i.%u\xdfC", ds18b20_temperature(&RomCode[0][0]) );
  
    lcd_gotoxy( 0,2 ); lcd_puts( LcdBuff1 );
    
    if ( ds18b20_temperature(&RomCode[0][0])<-55)
    {
     lcd_gotoxy( 0,2 ); lcd_puts( str5 );
     }
     else
     {
     sprintf( LcdBuff3,"L %i.%u\xdfC", ds18b20_temperature(&RomCode[0][0]) );
     lcd_gotoxy( 0,2 ); lcd_puts( LcdBuff1 );
     }
     //------------------------------------------------------------------------
   
    //чтение температуры второго датчика
    sprintf( LcdBuff2,"R %.1f \xefC", ds18b20_temperature(&RomCode[1][0]) );
  
    lcd_gotoxy( 10,2 ); lcd_puts( LcdBuff2 );
    
    if ( ds18b20_temperature(&RomCode[1][0])<-55)
    {
     lcd_gotoxy( 10,2 ); lcd_puts( str6 );
     }
     else
     {
     sprintf( LcdBuff3,"R %.1f \xefC", ds18b20_temperature(&RomCode[1][0]) );
     lcd_gotoxy( 10,2 ); lcd_puts( LcdBuff2 );
     } 
     //---------------------------------------------------------------------- 
    
    
    //чтение температуры третьего датчика
    sprintf( LcdBuff3,"U %.1f \xefC", ds18b20_temperature(&RomCode[2][0]) );
  
    lcd_gotoxy( 0,3 ); lcd_puts( LcdBuff3 );
    if ( ds18b20_temperature(&RomCode[2][0])<-55)
    {
     lcd_gotoxy( 0,3 ); lcd_puts( str3 );
     }
     else
     {
     sprintf( LcdBuff3,"U %.1f \xefC", ds18b20_temperature(&RomCode[2][0]) );
     lcd_gotoxy( 0,3 ); lcd_puts( LcdBuff3);
     }
     //-----------------------------------------------------------------------
   
    
     //чтение температуры четвертого датчика
    sprintf( LcdBuff4,"K %.1f \xefC", ds18b20_temperature(&RomCode[3][0]) );
  
    lcd_gotoxy( 10,3 ); lcd_puts( LcdBuff4 ); 
    
    if ( ds18b20_temperature(&RomCode[3][0])<-55)
    {
     lcd_gotoxy( 10,3 ); lcd_puts( str4 );
     }
     else
     {
     sprintf( LcdBuff4,"K %.1f \xefC", ds18b20_temperature(&RomCode[3][0]) );
     lcd_gotoxy( 10,3 ); lcd_puts( LcdBuff4 );
     }
     }
     //------------------------------------------------------------------------
   
  }else{ lcd_gotoxy( 0,0 ); lcd_puts( str2 ); }
  
  if (LcdBuffDevices == 2) { PORTB.0=1;}
  else { PORTB.0=0;}
  
  
  
  }

Re: проблема вывода температуры на LCD 20х4

Добавлено: Пт мар 04, 2011 18:29:18
Artos
Блин... пробую в железе... вообще не работает...
Датчик не видит, уже все перепробовал. Гуру подскажите в чем мой ляп?

Re: проблема вывода температуры на LCD 20х4

Добавлено: Сб мар 05, 2011 19:13:03
Artos
:( Что то помощи не видать... эх жаль...

Re: проблема вывода температуры на LCD 20х4

Добавлено: Вс мар 06, 2011 13:06:52
Artos
Проблема решена. Тема закрыта!