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

[Atmega128] TWI wiesza się na odczycie

motorolae365ok 04 Wrz 2011 22:43 1605 10
  • #1 9895904
    motorolae365ok
    Poziom 20  
    Witam,

    znalazłem na forum podobno działający kod do obsługi TWI. Ale u mnie jest problem z jej obsługą. Wysyłanie bajtów nie powoduje błędów, ale za to jak chce odczytać jakąś wartość to program się zatrzymuje w miejscu (zaznaczone w kodzie do którego miejsca dochodzi).

    Dodam że INT z RTC działa prawidłowo, układ nie wydaje mi się żeby był wadliwy.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    plik mod_rtc_pcf8583.h
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    plik mod_rtc_pcf8583.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Ustawiam linie adresu na 0, wiec adres zegara wynosi 0xA0.

    Gdzie jest błąd?
  • #2 9897316
    kubus_puchatek
    Poziom 18  
    bez sprawdzania strzelam że błędu nie ma.
    Trafiłem na to samo.
    fizycznie głupieje TWI. Widać ma firmowego babola w sprzęcie.
    Przy odczycie z tiny861 pracującej jako slave TWI zwisało.
    Walczyłem z zakłóceniami i ścieżkami to pomagało ale nie udało mi się wyeliminować całkowicie.
    wygląda że z powodu niedopracowania jest czułw na zakłócenia EMC.
  • #3 9897467
    tadzik85
    Poziom 38  
    Kubus jakieś herezje głosi :/

    unsigned char TWI_p_odczyt(unsigned char scalak) popraw to.
  • #4 9898035
    motorolae365ok
    Poziom 20  
    Ale gdzie to mam poprawić? W deklaracji, definicji? Korzystam jak narazie i tak z TWI_odczyt, bo muszę podać adres urządzenia i nr rejestru żeby odczytać pierwszą wartość
  • #5 9898059
    tadzik85
    Poziom 38  
    Bo skopałeś końcówkę tej funkcji. Jakiś mętlik tam zastosowałeś.
    Dwa while...??
  • Pomocny post
    #7 9898170
    tadzik85
    Poziom 38  
    Tak to jest jak się bezmyślnie z gotowców korzysta. Popraw końcówkę tej funkcji.
  • #8 9898251
    motorolae365ok
    Poziom 20  
    Mam tak (dodałem komentarze i zgadza się ze schematem w dokumentacji PCF8583):

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    gdzie jest błąd?


    ---
    EDIT

    zaznaczyłem miejsce w kodzie, w którym program się zapętla
  • Pomocny post
    #9 9898274
    tadzik85
    Poziom 38  
    PIN A0 ma stan niski wymuszony?
  • Pomocny post
    #10 9898359
    Andrzej__S
    Poziom 28  
    motorolae365ok napisał:

    Wysyłanie bajtów nie powoduje błędów...

    A skąd ta pewność. W żaden sposób nie sprawdzasz poprawności transmisji. To, że program się nie wiesza, nie oznacza wcale, że transmisja przebiega prawidłowo. Spróbuj chociaż sprawdzać bit potwierdzenia od układu slave (np. tak, jak było opisane w tym wątku).

    Spróbuj tymczasowo dla potrzeb testu zmniejszyć częstotliwość magistrali np. do 50kHz.

    Jaką wartość rezystorów pull-up zastosowałeś i jakie długie masz linie SDA i SCL?
  • #11 9898525
    motorolae365ok
    Poziom 20  
    Wstyd. Mój błąd, miałem zamienione linie SCL i SDA na schemacie, a co za tym poszło, także na płytce. Teraz działa, dziękuję za każdą rade.
REKLAMA