CodeVisionAVR --> 1WIRE



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Przemyslaw B." <przemyslaw_b_at_nospam_wp.pl>
Subject: CodeVisionAVR --> 1WIRE
Date: Wed, 11 Feb 2004 14:15:06 +0100


witam
mam problem, wydaje mi sie ze wszystko robie dobrze a jednak:(
robie proj. gdzie do AVRa (2313) podlaczone sa 4 uklady 1WIRE.
w pamieci EEPROM od adresu 0 mam zapisany ich kody 8 bajtowe.
nastepnie zczytywuje kody ponownie (w celu wykrycia czy podlaczone sa uklady
wczesniej zarejestrowane), sa one zapisane w przykladowej tablicy
DS_codes[4,9].
i teraz pojawia sie klopot, jak je porownac z tymi umieszczonymi w EEPROMIE.
moze ktos cos podobnego pisal kiedys i moglby mi fragmenty swojego programu
przedstawic badz sie blizej przyjzec ponizszym rozwiazaniom.
bardzo dziekuje za wszelka pomoc.
oto moje rozwiazania (nie wiem dlaczego nie chca dzialac):
ROZWIAZANIE 1:
devices = w1_search(0xf0,DS_codes);
ptr_to_eeprom = 0; //ustawiam poczatkowy adres do EEPROMu
if (devices)
{
for (Temp=0;Temp<4;Temp++)
{
x=0;
for (i=0;i<8;i++)
{
if (*ptr_to_eeprom==DS_codes[Temp,i])
{
x++;
}
ptr_to_eeprom++;
}
ptr_to_eeprom+=2;

if (x==8)
{
//tu sygnalizuje ze wykryto dobry uklad 1WIRE (w
zaleznosci od wartosci Temp wiem ktory to jest uklad)
}
}
}

ROZWIAZANIE 2 (praktycznie to samo tylko na piechote):
devices = w1_search(0xf0,DS_codes);
if (devices)
{
ptr_to_eeprom = 0;
x=0;
for (Temp=0;Temp<MAX_1WIRE;Temp++)
{
for (i=0;i<8;i++)
{
if (DS_codes[Temp,i]==*ptr_to_eeprom)
{
x++;
}
else
{
x=0;
}
*ptr_to_eeprom++;
}
if (x==8)
{
x=0;
//tu sygnalizuje ze wykryto dobry 1 uklad 1WIRE
}
else
{
x=0;
}
}
ptr_to_eeprom = 10;
x=0;
for (Temp=0;Temp<MAX_1WIRE;Temp++)
{
for (i=0;i<8;i++)
{
if (DS_codes[Temp,i]==*ptr_to_eeprom)
{
x++;
}
else
{
x=0;
}
*ptr_to_eeprom++;
}
//ptr_to_eeprom+=2;
if (x==8)
{
x=0;
//tu sygnalizuje ze wykryto dobry 2 uklad 1WIRE
}
else
{
x=0;
}
}

ptr_to_eeprom = 20;
x=0;
for (Temp=0;Temp<MAX_1WIRE;Temp++)
{
for (i=0;i<8;i++)
{
if (DS_codes[Temp,i]==*ptr_to_eeprom)
{
x++;
}
else
{
x=0;
}
*ptr_to_eeprom++;
}
//ptr_to_eeprom+=2;
if (x==8)
{
x=0;
//tu sygnalizuje ze wykryto dobry 3 uklad 1WIRE
}
else
{
x=0;
}
}

ptr_to_eeprom = 30;
x=0;
for (Temp=0;Temp<MAX_1WIRE;Temp++)
{
for (i=0;i<8;i++)
{
if (DS_codes[Temp,i]==*ptr_to_eeprom)
{
x++;
}
else
{
x=0;
}
*ptr_to_eeprom++;
}
//ptr_to_eeprom+=2;
if (x==8)
{
x=0;
//tu sygnalizuje ze wykryto dobry 4 uklad 1WIRE }
else
{
x=0;
}
}
}



========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!newsfeed.silweb.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Leszek <Leszek_at_nospam_paros.pl>
Subject: Re: CodeVisionAVR --> 1WIRE
Date: Wed, 11 Feb 2004 08:09:28 +0100


Cześć.
Nie znam niestety C , zrobiłem to w Bascom. Zgodnie z zaleceniem
producenta AVR nie zapisuje niczego pod adresem "0" w EEPROM - zaczynam
od 1 lub dalej. Do tablicy z 8 elementami zapisuje sie wynik pierwszego
zczytania ID . Komenda "1wverify L(1)" (gdzie L to właśnie ta tablica )
wyszukuje na magistrali urządzenie o tym identyfikatorze. Potem
If Err = 0 Then ... procedura odczytu temperatury
Mozna to rozpisywać kilka razy lub wpiąć w pętle FOR - NEXT. U mnie to
gada na 5 czujnikach.

Leszek


========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!newsfeed.gazeta.pl!news.gazeta.pl!not-for-mai