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

Atmega128 + Atmega64 [bascom] - TWI multimaster - zawiesza się komunikacja

rj1307 26 Sie 2013 13:04 1809 2
REKLAMA
  • #1 12669281
    rj1307
    Poziom 15  
    Mam w projekcie Atmegę128 + PCF8583 + kilka układów I2C (3xADS1110, AT24c1024), dodatkowo dołaczam dwa moduły z Atmega64 każdy. Chcę, aby każdy z mikrokontrolerów odczytywał czas bezpośrednio z PCF8583. Teoretycznie arbitraż jest możliwy, ale u mnie to nie chce prawidłowo działać - zawiesza się komunikacja i programy "stoją".
    Do testów zostawiłem w układzie tylko m128, m64 i PCF, napisałem typowo testowe programy:

    dla m128:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    dla m64:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Działa to tak, że m128 wystawia sygnał zezwolenia odczytu PCF'a dla m64 i czeka 20ms , ten w przerwaniu odczytuje czas. Nastepnie m128 wychodzi z przerwania i teraz on odczytuje czas. Teoretycznie to działa, obydwa mikroprocesory odczytują czasy prawidlowo, ale raz na jakiś czas 'milknie" transmisja na TWI i programy zatrzymują się.
    Sprawdzałem oscyloskopem, na przebiegach widać, że nie ma kolizji na szynie, procesory nie próbują odczytywać czasu jednocześnie.
    Zauważyłem natomiast jedną rzecz, przed zawieszeniem się komunikacji szyna SDA nie wraca do stanu wysokiego (dzieje się to podczas odczytu przez m64).
    Próbowałem po każdym odczycie ustawiać piny PD.0 i PD.1 jako wejścia, a przed odczytem ustawiać jako SDA/SCL poleceniem I2CINIT, bez skutku. Częstotliwość TWI jest na 100% ustawiona na 100kHz, sprawdzałem rejestr TWBR, a preskaler jest ustawiony na 1.
    Nie mam już pomysłów :(
  • REKLAMA
  • #2 12680674
    JanuszM
    Poziom 17  
    Pisząc w C pod Atmel Studio i mając JTAG-a, miałbyś wgląd do rejestrów Atmega64 w czasie wykonywania kodu.
    Oczywiście sam język C daje większą kontrolę nad programem i uPC.
  • #3 14196125
    rj1307
    Poziom 15  
    Pomogła zmiana rezystorów podciągających szynę z 4k7 na 1k2.
REKLAMA