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

Jak zbudować kopię Slave'a, posługując się interfejsem TWI AVR?

robiw 04 Cze 2016 13:24 1008 11
REKLAMA
  • #1 15720097
    robiw
    Poziom 26  
    Mam proste urządzenie, które jako Master wysyła dane do Slave'a korzystając z magistrali I2C. Chciałbym zbudować kopię tego Slave'a posługując się interfejsem TWI AVR-ów. Jest jednak jedna niezgodność (w stosunku do I2C), która powoduje, że nie mam pewności, czy TWI da sobie z tym radę. Otóż Master wysyła adres układu Slave ustawiając ostatni bit tego adresu, co powoduje, że TWI zostanie wprowadzone w tryb Slave Transmitter, podczas gdy intencją Mastera jest zwyczajne wysyłanie danych, gdyż po adresie przekazanym w ten sposób wysyła kolejne 10 bajtów danych i kończy transmisję. Problem w tym, że w rejestrze TWSR interfejsu TWI nie ma stanu, który odpowiadałyby odebraniu bajta przez Slave'a poprzednio zaadresowanego do operacji odczytu (czyli wysyłania a nie odbierania bajta). Nie sprawdzałem tego jeszcze w praktyce, jak zareaguje TWI, ale "cienko" to widzę. Ktoś spotkał się z takim problemem? robiw
  • REKLAMA
  • #2 15720169
    Konto nie istnieje
    Konto nie istnieje  
  • #3 15720183
    robiw
    Poziom 26  
    LCD. Myślę, że dobrze. ATmega zostaje zaadresowana w trybie odczytu SLA+R (Slave Transmitter Mode, bo bit-0 będzie ustawiony), wystąpi przerwanie TWI a w rejestrze TWSR będzie wartość 0xA8 (Own SLA+R has been received; ACK has been returned). Teraz aplikacja powinna wczytać bajt do TWDR i go wysłać, bo to sugeruje adres w trybie odczytu...a tutaj Master wysyła nam bajt, czyli tak jakby ATmega była w trybie Slave Receiver...a w tym trybie nie przewiduje się statusu, który odpowiadałby tej sytuacji, bo jedyny status "zbliżony" do tej sytuacji to: 0x80 (Previously addressed with own SLA+W; data has been received; ACK has been returned)...a przecież nie pasuje...robiw
  • #4 15720211
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #5 15720316
    robiw
    Poziom 26  
    To lcd z auta a masterem jest radio, które tak działa i nie ma się co zastanawiać, czy to błąd czy nie. Zwyczajnie najmłodszy bit w bajcie traktuje, jako kontrolę parzystości, nawet dla bajta adresu, stąd ten bałagan. Dlatego podejrzewam, że TWI tego nie dźwignie...robiw
  • REKLAMA
  • #7 15724397
    robiw
    Poziom 26  
    Opel. Chcę zastąpić LCD...robiw
  • REKLAMA
  • #9 15728942
    robiw
    Poziom 26  
    Hej,
    Źle...chcę zaprząc TWI do emulacji wyświetlacza...robiw
  • #10 15729985
    arturt134
    Poziom 27  
    Zawsze możesz napisać I2C na piechotę.... Wtedy bit R/W obsłużysz tak jak będziesz chciał. Wbrew pozorom nie jest to jakaś duża praca, a pozwoli Ci dokładnie wpasować się w specyfikację interfejsu użytego przez Opla.
  • #11 15733327
    robiw
    Poziom 26  
    To jasne, ale myślałem, że załatwię to sprzętowo na przerwaniach. Przerwania zewnętrzne mam już zajęte, więc nie będzie tak łatwo załatwić to bez TWI. Oczywiście pozostają przerwania PinChange... robiw
REKLAMA