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