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

 
 
> Две шины данных на одном порту
TriS
сообщение Jul 25 2010, 08:48
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 21-07-10
Пользователь №: 58 536



Помогите найти ошибку!!!!
Использую две шины I2C и 1-Wire на одном порту, использую микросхему часов ds1307(I2C) и 2 датчика температуры ds1820(1-wire),
так вот сначала инициализирую шину 1-wire, определяю кол-во устройств ds1820 на ней.... определяется ноль, затем инициализирую шину I2C, по ней прекрасно общаюсь с ds 1307.

CODE
/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.4a Advanced
Automatic Program Generator
© Copyright 1998-2009 Pavel Haiduc,
<span name="mcb_s" id="multishop1" style="overflow:hidden; zoom:1; display:inline; margin: 0px; padding: 0px;
" class="wbc_wrapped_word">HP InfoTech s</span>.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 10.07.2010
Author : NeVaDa
Company : Company
Comments:


Chip type : ATmega8515
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
*****************************************************/

#include <mega8515.h>

// 1-wire
#asm
.equ __w1_port=0x1b //PORTA
.equ __w1_bit=2
#endasm
#include <1wire.h>

// I2C Bus functions
#asm
.equ __i2c_port=0x1b //PORTA
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include <i2c.h>


// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 //PORTC
#endasm
#include <lcd.h>


#include <ds1307.h>
#include <ds1820.h>
#include <delay.h>
#include <stdio.h>
#include <string.h>

//#include <eeprom.h>

#define lcd_segment 16

/* maximum number of DS1820/DS18S20 connected to the 1 Wire bus */
#define MAX_DEVICES 8
unsigned char rom_code[MAX_DEVICES][9];
unsigned char devices;



unsigned char hour,minute,sek; //часы, минуты, секунды
unsigned char day,month,year; //день, месяц, год


int menu=1;
int menu_time=0;

int i=0;
int update=1000; // период обновлений

char auto_ind[5]="";



unsigned char lcd_buffer[lcd_segment*2];


unsigned char t_stab=22;


void lcd_menu_time(void)
{
if (i>update)
{
i=0;
switch (menu_time)
{
case 1:
lcd_clear();
lcd_gotoxy(0,0);
sprintf(lcd_buffer, "Setup Hour:\r\nH=%i",hour);
lcd_puts(lcd_buffer);
break;
case 2:
lcd_clear();
lcd_gotoxy(0,0);
sprintf(lcd_buffer, "Setup Min:\r\nM=%i",minute);
lcd_puts(lcd_buffer);
break;
case 3:
lcd_clear();
lcd_gotoxy(0,0);
sprintf(lcd_buffer, "Setup Sec:\r\nS=%i",sek);
lcd_puts(lcd_buffer);
break;
case 4:
lcd_clear();
lcd_gotoxy(0,0);
sprintf(lcd_buffer, "Setup Date:\r\nD=%i",day);
lcd_puts(lcd_buffer);
break;
case 5:
lcd_clear();
lcd_gotoxy(0,0);
sprintf(lcd_buffer, "Setup Month:\r\nM=%i",month);
lcd_puts(lcd_buffer);
break;
case 6:
lcd_clear();
lcd_gotoxy(0,0);
sprintf(lcd_buffer, "Setup Year:\r\nY=%i",year);
lcd_puts(lcd_buffer);
break;
case 7:
lcd_clear();
lcd_gotoxy(0,0);
sprintf(lcd_buffer, "Save Setup?\r\n+ Yes, - No");
lcd_puts(lcd_buffer);
break;
default:;
}
}
}

void lcd_cond()
{
unsigned char k,j;
int temp;

if (i>update)
{
i=0;



if (devices>0)
{
//PINA.3=0xfe;
}
else
{
//PINA.3=0xff;

sprintf(lcd_buffer,"No find");
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(200);
}

lcd_clear();

if (devices)
{
for (k=0;k<devices;k++)
{
sprintf(lcd_buffer,"Device #%u ROM\nCode is:",k+1);
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(200);
lcd_clear();
for (j=0;j<8;j++)
{
sprintf(lcd_buffer,"%02X ",rom_code[k][j]);
lcd_puts(lcd_buffer);
if (j==3) lcd_gotoxy(0,1);
};
delay_ms(200);
};





for (k=0;k<devices;)
{
temp=ds1820_temperature_10(&rom_code[k][0]);
j='+';
if (temp<0)
{
j='-';
temp=-temp;
};
sprintf(lcd_buffer,"t%u=%c%i.%u\xdfC",++k,j,temp/10,temp%10);
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(800);
};

}

// sprintf(lcd_buffer, "U:%i%cC, S:%i%cC\r\nT=%i%cC %s",31,0xdf,tem,0xdf,t_stab,0xdf,auto_ind);
}

}

void lcd_time(void)
{
if (i>update)
{
i=0;

rtc_get_time(&hour,&minute,&sek); //считать время
rtc_get_date(&day,&month,&year); //считать дату

lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("");
//lcd_putchar(hour/10+16+hour%10);

lcd_putchar(hour/10+0x30);
lcd_putchar(hour%10+0x30);

lcd_putchar(':');
lcd_putchar(minute/10+0x30);
lcd_putchar(minute%10+0x30);
lcd_putchar(':');
lcd_putchar(sek/10+0x30);
lcd_putchar(sek%10+0x30);


lcd_gotoxy(0,1);
lcd_putsf("");
lcd_putchar(day/10+0x30);
lcd_putchar(day%10+0x30);
lcd_putchar('-');
lcd_putchar(month/10+0x30);
lcd_putchar(month%10+0x30);
lcd_putchar('-');
lcd_putchar(year/10+0x30);
lcd_putchar(year%10+0x30);
}
}







void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
//DDRA=0x0D;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0xFF;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Port E initialization
// Func2=In Func1=In Func0=In
// State2=T State1=T State0=T
PORTE=0x00;
DDRE=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
EMCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;


// LCD module initialization
lcd_init(lcd_segment);

sprintf(lcd_buffer,"Init 1-wire");
lcd_puts(lcd_buffer);
w1_init();

devices=w1_search(0xf0,rom_code);
lcd_clear();
sprintf(lcd_buffer,"%u DS1820\nDevice detected",devices);
lcd_puts(lcd_buffer);
delay_ms(100);


// I2C Bus initialization
i2c_init();

rtc_init(0,1,0);
rtc_set_date(01,01,10); //установить дату: день,месяц,год
rtc_set_time(23,59,00); //установить время: часы, минуты, секунды


while (1)
{
i++;

if (menu_time==0)
switch (menu)
{
case 0:lcd_time(); break;
case 1:lcd_cond(); break;
default:;
}



if (PINB.0==0) // если нажата кнопка Time/Kond
{
delay_ms(250); // задержка 1/4 сек. (для удобства) выбора
menu++;
if (menu>=2) menu=0;
}

// Настройки часов
if(menu==0)
{
if (PINB.1==0)
{
menu_time++;
if (menu_time>7) menu_time=7;
delay_ms(250);
}


if (menu_time!=0) lcd_menu_time();


//-------------------------------------------
if ((menu_time==1)&(PINB.2==0))
{
hour++;
if (hour==24||hour==255) hour=0;
// if (hour>23) hour=0;
delay_ms(250);
}

if ((menu_time==1)&(PINB.3==0))
{
hour--;
if (hour==24||hour==255) hour=0;
//if (hour<0) hour=23;
delay_ms(250);
}
//-------------------------------------------
if ((menu_time==2)&(PINB.2==0))
{
minute++;
// if (minute>59) minute=0;
delay_ms(250);
}

if ((menu_time==2)&(PINB.3==0))
{
minute--;
//if (minute<0) minute=59;
delay_ms(250);
}
//-------------------------------------------
if ((menu_time==3)&(PINB.2==0))
{
sek++;
//if (sek>59) hour=0;
delay_ms(250);
}

if ((menu_time==3)&(PINB.3==0))
{
sek--;
//if (sek<0) sek=59;
delay_ms(250);
}
//-------------------------------------------

//-------------------------------------------
if ((menu_time==4)&(PINB.2==0))
{
day++;
// if (day>31) day=0;
delay_ms(250);
}

if ((menu_time==4)&(PINB.3==0))
{
day--;
// if (day<0) day=31;
delay_ms(250);
}
//-------------------------------------------
if ((menu_time==5)&(PINB.2==0))
{
month++;
// if (month>12) month=0;
delay_ms(250);
}

if ((menu_time==5)&(PINB.3==0))
{
month--;
// if (month<0) month=12;
delay_ms(250);
}
//-------------------------------------------
if ((menu_time==6)&(PINB.2==0))
{
year++;
// if (year>59) year=0;
delay_ms(250);
}

if ((menu_time==6)&(PINB.3==0))
{
year--;
// if (year<0) year=59;
delay_ms(250);
}
//-------------------------------------------


//-------------------------------------------
if ((menu_time==7)&(PINB.2==0))
{
rtc_set_date(day,month,year); //установить дату: день,месяц,год
rtc_set_time(hour,minute,sek); //установить время: часы, минуты, секунды
menu_time=0;
delay_ms(250);
}

if ((menu_time==7)&(PINB.3==0))
{ menu_time=0;
delay_ms(250);
}
//-------------------------------------------

if (menu_time!=0)
{
if (hour==24||hour==255) hour=0;
if (minute==60||minute==255) minute=0;
if (sek==60||sek==255) sek=0;

if (day==31||day==255) day=0;
if (month==13||month==255) month=0;
if (year==99||year==255) year=0;
}


}


// Настройки кондея
if(menu==1)
{
if (PINB.1==0)
{

if (strcmp (auto_ind,"")==0)
{
strcpy(auto_ind,"Auto");
// PINA.2=0xfe;

}
else
{
strcpy(auto_ind,"");
// PINA.2=0xff;

}
delay_ms(250);
}

if (PINB.2==0)
{
t_stab++;
if (t_stab>30) t_stab=30;
delay_ms(250);
}

if (PINB.3==0)
{
t_stab--;
if (t_stab<15) t_stab=15;
delay_ms(250);
}

}

}
}
Причина редактирования: Редактирование цитаты исходника.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
TriS
сообщение Jul 25 2010, 14:15
Сообщение #2





Группа: Участник
Сообщений: 9
Регистрация: 21-07-10
Пользователь №: 58 536



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

w1_init();
delay_ms(2000);
devices=w1_search(0xf0,rom_codes);


В итоге devices=0

такое ощущение что w1_search() не отрабатывает вообще, на всякий случай кому интересно прикладываю проект

Сообщение отредактировал TriS - Jul 25 2010, 14:36
Прикрепленные файлы
Прикрепленный файл  prj.rar ( 36.3 килобайт ) Кол-во скачиваний: 13
 
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:56
Рейтинг@Mail.ru


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