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

[ATmega8][TWI] - TWDR pusty

herszt 22 Kwi 2010 01:48 817 0
REKLAMA
  • #1 7989680
    herszt
    Poziom 18  
    Witam!

    Mam w slave taką oto funkcję odczytu z mastera:

    
    void TWI_read (uint8_t ilosc)
    {
     pbufor = &bufor[0];
    
     
     for(; (ilosc-1) != 0; ilosc--)
     {
      
      TWCR =  (1<<TWEN) | (1<<TWEA) | (1<<TWINT);
      
      while(!(TWCR & (1<<TWINT)));
      
      if(TW_STATUS != TW_SR_DATA_ACK)		// transmisja ok?
      {
       writeTextUSART("blad odczytu\n\r"); 
      }
    
      *pbufor++ = TWDR;
      US_TRA(TWDR); //wypisanie zawartości TWDR na konsole przez RSa
      writeTextUSART("odbieram\n\r");
       
     }
    //ostatni bajt i NACK
     TWCR = (1<<TWINT) | (1<<TWEN);	
     
      while(!(TWCR & (1<<TWINT)));
     
      if(TW_STATUS != TW_SR_DATA_NACK)		// transmisja ok?
      {
       writeTextUSART("blad odczytu\n\r"); 
      }
       writeTextUSART("odbieram ostatni\n\r");
      *pbufor++ = TWDR;  
    }
    


    i przerwanie, przy którym to ma być robione:

    
    ISR (TWI_vect)
    {
    	TWI_write(6);
    }
    


    Urządzenie wysyłające dane działa cały czas, ale powyższy kod wykonuje się tylko raz przy resecie ATmegi i przy tym wykonaniu bufor do, którego powinny lecieć dane jest na koniec PUSTY. Może jakieś pomysły/sugestie jak tą ATmegę uruchomić trybie slave receiver? Wydaje mi się, że próbowałem już wszystkiego i nadal nie działa. Dodam, że komunikacja w drugą stronę działa (slave->master) więc wykluczam problemy ze sprzętem.

    z góry dzięki
    pozdrawiam
    herszt
  • REKLAMA
REKLAMA