CodeVisionAVR --> 1WIRE

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

Reply to
Leszek
Loading thread data ...

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; } } }

Reply to
Przemyslaw B.

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.