logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATMEGA 16 i DS18s20, odpowiedź z czujnika?

qasar1 29 Sty 2009 13:22 1388 6
REKLAMA
  • #1 6071357
    qasar1
    Poziom 11  
    mam problem natury takiej że nie moge uzyskac odpowiedzi od czujnka ds18s20
    mam kod inicjalizujcy łaczenie w postani
    uint8_t WireReset(void)
    	//zwraca 1 gdy po wystawieniu resetu na magistrali 1-Wire slave (w tym 
    	//	przypadku termometr) zglosi swoja obecnosc; w przeciwnym razie zwraca 0
    	//dziala poprawnie tylko w obecnosci 1 slave'a na magistrali!
    {
    
    
    	uint8_t temp=0;
    	(DDRC |= _BV(1));
    	//(PORTC |=_BV(1));
    	ustaw_bit_na_0;		//impuls inicjujący (ok. 480us)
    	_delay_us(480);
    	//_delay_us(480);
    	ustaw_bit_na_1;		//zwolnienie linii
    	_delay_us(65);		//po odczekaniu ok. 65us czekaj na impuls obecności
    	if(czytaj_bit==0){
    		temp++;			//zapamiętaj fakt wykrycia impulsu obecności
    	;
    	}
    	_delay_us(415);		//czekaj ok. 415us do zakończenia slotu inicjującego
    	if(czytaj_bit==0){
    		temp++;		//jeśli pozostaje w stanie niskim, to oznacza zwykłe zwarcie
    	}
    	if(temp==1){	//slave zglosil sie
    	
    		return 1;
    	}
    	else {			//slave nie zglosil sie
    		(PORTC |=_BV(1));
    		return 0;
    	}
    
    }
    

    próbowałem juz przy róznych ustawieniach atmegi przy wewnętrznym osc 1, 2, 4 i zewnetrznbym 2 mhz - bez rezultatu - podejrzewam że to moze byc coś z zegarem mimo wszystko no le robie wsztsrko wg noty katalogowej atmegi wiec lipa


    Proszę umieszczać listingi programów w znacznikach "Code". [c_p]
  • REKLAMA
  • #2 6071680
    Klima
    Poziom 31  
    To jeszcze pokaż, co się kryje pod "ustaw_bit_na_0;" i "ustaw_bit_na_1;"
  • REKLAMA
  • #3 6072331
    qasar1
    Poziom 11  
    #define ustaw_bit_na_0 (DDRD |= _BV(DDD5))
    #define ustaw_bit_na_1 (DDRD &= ~_BV(DDD5))


    prosze bardzo
  • #4 6072710
    maxiu25
    Poziom 16  
    uint8_t WireReset(void) 
       //zwraca 1 gdy po wystawieniu resetu na magistrali 1-Wire slave (w tym 
       //   przypadku termometr) zglosi swoja obecnosc; w przeciwnym razie zwraca 0 
       //dziala poprawnie tylko w obecnosci 1 slave'a na magistrali! 
    { 
    
    
       uint8_t temp=0; 
       (DDRC |= _BV(1)); 
       //(PORTC |=_BV(1)); 
       ustaw_bit_na_0;      //impuls inicjujący (ok. 480us) 
       _delay_us(480); 
       //_delay_us(480); 
       ustaw_bit_na_1;      //zwolnienie linii 
       _delay_us(65);      //po odczekaniu ok. 65us czekaj na impuls obecności 
    
    spróbuj tutaj wpisac
       (DDRC |= _BV(0)); // nastawienie poru na odbiór
    
    
       if(czytaj_bit==0){ 
          temp++;         //zapamiętaj fakt wykrycia impulsu obecności 
       ; 
       } 
       _delay_us(415);      //czekaj ok. 415us do zakończenia slotu inicjującego 
       if(czytaj_bit==0){ 
          temp++;      //jeśli pozostaje w stanie niskim, to oznacza zwykłe zwarcie 
       } 
       if(temp==1){   //slave zglosil sie 
        
          return 1; 
       } 
       else {         //slave nie zglosil sie 
          (PORTC |=_BV(1)); 
          return 0; 
       } 
    
    }
  • REKLAMA
  • #5 6073936
    qasar1
    Poziom 11  
    juz znalazłem rozwiązanie banalne ale cóż proste wtedy kiedy sie na niego wpadnie pozdrwiam
  • #6 6079912
    n4din
    Poziom 2  
    to może podaj to rozwiązanie. Chętnie zobaczę. Mam ten sam problem . Pozdrawiam
  • REKLAMA
  • #7 6079974
    qasar1
    Poziom 11  
    w zasadzie kod jest w porządku miałem niestety tego pecha że uszkodzoną ds 18s20 zamieniłem na następna uszkodzoną nowo kupioną ds-ke i sie głowiłem co jest nie tak tam gdzie nie trzeba.
REKLAMA