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

ATmega324 I2C: Brak sygnału ACK z układu 5V przez konwerter BS138

robiw 03 Sie 2014 15:12 3090 13
  • #1 13847945
    robiw
    Poziom 26  
    Witam Kolegów,
    Mam system mikroprocesorowy z mikrokontrolerem ATmega324 zasilanym napięciem 3.3V (z przetwornicy impulsowej), który poprzez I2C steruje pracą dwóch peryferiów: jeden zasilany tym samym napięciem co ATmega i drugi zasilany napięciem 5V (także z przetwornicy). Do współpracy ATmegi z układem zasilanym napięciem 5V zastosowałem dwukierunkowy konwerter poziomów na tranzystorach BS138 (ogólnie znany). Problem jest taki, iż układ na 5V nie zawsze odpowiada na rozkazy mikroprocesora - nie wystawia sygnału ACK, tak jak gdyby nie był obecny na magistrali (odczytuję dla testów rejestr TWSR). Odpięcie od magistrali układu zasilanego 3.3V i pozostawienie tylko tego na 5V (poprzez konwerter) poprawia nieco sytuację, ale i tak układ ten odpowiada raz na 5 czy 20 razy. Spowalniałem prędkość magistrali (oba układy mogą pracować na 400kHz), zwiększałem czas zwłoki między sygnałem Stop i Start (peryferium na 5V wymaga minimum 500µS), ale poprawy znacznej nie widzę. Oczywiście podłączę oscyloskop by zbadać napięcie 5V oraz przebiegi na magistrali, ale na tą chwilę mam następujące podejrzenia:
    - duża pojemność I2C i zniekształcenia zboczy,
    - zakłócenia na zasilaniu 5V.

    Dodam, iż układ na 3.3V pracuje bez problemów zaś sam system mikroprocesorowy również. Macie jakieś inne sugestie? robiw

    PS.
    Rezystory podciągające po obu stronach konwertera 4.7K. Zmieniałem na 10K (tak, jak w na schemacie konwertera) ale bez zmian...

    Dodano po 21 [minuty]:

    Źródłowa aplikacja translatora: http://www.nxp.com/documents/application_note/AN10441.pdf

    W odpowiedzi na prośbę Admina (piotrva): schemat to nic nadzwyczajnego: ATmega->Układ na I2C na 3.3V-> konwerter 3.3V/5V->układ I2C na 5V...czyli schemat jak konwertera!

    Co zaś się tyczy obsługi TWI to podstawy podstaw!

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


    robiw
  • #2 13849573
    robiw
    Poziom 26  
    Poniżej oscylogramy magistrali I2C (niebieski to zegar) po stronie 3.3V i 5V:

    3.3V:
    ATmega324 I2C: Brak sygnału ACK z układu 5V przez konwerter BS138
    5V:
    ATmega324 I2C: Brak sygnału ACK z układu 5V przez konwerter BS138

    Zbocza nie wyglądają najlepiej, ale też nie beznadziejnie. Dla 5V trochę za niska amplituda. Co do zasilania 5V: poziom ok.5.3V z tętnieniami na poziomie 280mV i f≈30-50kHz... robiw
  • #3 13850521
    piotrva
    VIP Zasłużony dla elektroda
    Moim zdaniem te zbocza wyglądają beznadziejnie i okropnie... Bardziej to przypomina piłę niż prostokąt...
    Zmniejsz jeszcze częstotliwość pracy magistrali (polecam zacząć od TWBR=255 i potem zwiększać f_scl) - powinno zadziałać.
    Jeśli potrzebujesz wyższej częstotliwości może zainteresuj się jakimś scalonym buforem z automatyczną detekcją kierunku?
    GTL2003 bodajże.
  • #4 13850924
    robiw
    Poziom 26  
    Hej,
    Przyznam szczerze, iż na wiele lat zabawy z mikrokontrolerami po raz pierwszy spotykam się z tego typu problemem. Być może wina leży w pojemności magistrali (szerokość ścieżek itp.), choć na niej są tylko 3 układy. Ewentualnie problem powoduje ten konwerter napięć, choć to układ sprawdzony. Zmniejszę wartość rezystorów podciągających na 3.3k, spowolnię prędkość magistrali (ale na 100kHz bo nie mogę sobie pozwolić na niższe prędkości)... i zobaczymy... Ech...robiw
  • #5 13851038
    Konto nie istnieje
    Poziom 1  
  • #6 13851089
    robiw
    Poziom 26  
    Marek_Skalski napisał:
    robiw napisał:
    Rezystory podciągające po obu stronach konwertera 4.7K. Zmieniałem na 10K

    To na pewno nie była dobra decyzja.

    Wiem, że to nie była dobra decyzja, gdy chcę uzyskać sporą częstotliwość magistrali. Zasugerowałem się aplikacją konwertera...

    robiw napisał:
    Zmniejszę wartość rezystorów podciągających na 3.3k

    Marek_Skalski napisał:

    Cieplej, ale ja sugeruję zmniejszyć wartości do 2k2 lub nawet 1k5 po stronie 3V, o ile drivery potrafią pracować z takim prądem.

    Które drivery? Porty wyjściowe ATmegi?
    Marek_Skalski napisał:

    Zastanawia mnie jeszcze ten dziwny szum na niskim poziomie linii SDA. Może to tylko sonda śmieci, a może powineneś sprawdzić czy masy są prawidłowo połączone?

    A może to śmieci z przetwornicy? Tymczasem zasilam scalak pracujący na 5V przez 78M05 by wykluczyć problem zasilania jako potencjalne źródło braku współpracy...robiw
  • #7 13851642
    Konto nie istnieje
    Poziom 1  
  • #8 13851711
    robiw
    Poziom 26  
    Marek_Skalski napisał:
    0. Napięcie zasilające 5,3V + 0,28V tętnień, to w sumie >5,5V. Układ zasilany tym napięciem może tego nie lubić i będzie odmawiał posługi sporadycznie, a w końcu trwale.

    Dlatego dałem w szereg diodę prostowniczą. Niemniej jednak, w tej chwili układ zasilany jest ze stabilizatora 78M05 aby wykluczyć wpływ zasilania.
    Marek_Skalski napisał:

    1. Nie tylko master (tutaj pewnie Atmega), ale każdy układ podłączony do I2C musi mieć możliwość wysterowania linii ze względu na ACK czy przesyłanie danych. W większości przypadków nie będzie problemu. Atmegi spokojnie pracują z prądem tego rzędu. Pytanie jakie układy masz podłączone do I2C i czy one mogą pracować z większymi prądami wynikającymi z ładowania pojemności linii przez rezystory 1k5..2k2?

    Nie sądzę by jakikolwiek układ I2C miał problem z prądem rzędu 5mA (5V/1k). Dla jednego z układów napisano: Maximum Current into any Input/Output: 50mA.
    Marek_Skalski napisał:

    2. Patrząc na przebiegi po stronie 5V, stała czasowa to ponad 1us, co dla rezystorów 10k, daje pojemność linii rzędu 100pF. A to jest całkiem ok. Napięcie na linii SDA nie osiągnęło jeszcze stabilnego poziomu, a zegar już zatrzaskuje dane. To nie jest ok i jest to konsekwencją dużych wartości rezystorów podciągających linie.


    Co do przebiegów po stronie 5V to przede wszystkim amplituda ich jest zbyt mała. Zapewne jak podciągnę mniejszą wartością rezystancji to przebieg "pójdzie" nieco w górę. Co do zatrzaskiwania danych na SDA to trudno tak naprawdę powiedzieć w jakiej chwili są zatrzaskiwane, gdyż przebieg zegarowy także jest zniekształcony. Myślę, że problem może być z amplitudą przebiegu bo dla tego układu napisano:

    Input low level: MAX: 0.25 × VDD
    Input high level: MIN: 0.7 × VDD

    4.75 V<VDD<5.25 V

    robiw

    Dodano po 1 [minuty]:

    [quote="Marek_Skalski"]Zmniejszę wartość rezystorów podciągających na 3.3k
    Cieplej, ale ja sugeruję zmniejszyć wartości do 2k2 lub nawet 1k5 po stronie 3V, o ile drivery potrafią pracować z takim prądem.[quote]

    Czemu tylko po stronie 3.3V? robiw
  • #9 13851813
    Konto nie istnieje
    Poziom 1  
  • #10 13851846
    michalko12
    Specjalista - Mikrokontrolery
    A próbowałeś odłączyć peryferia od uC na czas pomiarów oscyloskopem? Sonda oscyloskopu nie wprowadza za dużych pojemności?
  • #12 13852791
    robiw
    Poziom 26  
    Tomq napisał:
    Cytat:
    Ogólnie I2C nie jest szczęśliwym pomysłem,

    Dlaczego? Wydawało mi się, że to dość popularny standard.


    Pewnie miał na myśli prędkość magistrali...niemniej jednak, ja nie mam wyboru bo taki interfejs ma scalak na 5V...a on nie ma odpowiednika...robiw

    Dodano po 47 [minuty]:

    Rezystory zmienione na 3.9k po obu stronach konwertera. Częstotliwość magistrali 10k. Amplituda przebiegów i kształt po obu stronach wydają się być OK. Zastanawia przesunięcie w czasie pomiędzy SCL a SDA. Układ odpowiada poprawnie sygnałem ACK kilkadziesiąt razy a później kilkadziesiąt razy nie odpowiada i tak w kółko... czyli nadal nie pracuje poprawnie. Wysyłany jest następujący ciąg:

    Start
    WriteByte(2) -> adres układu na I2C
    WriteByte(5) -> adres rejestru
    WriteByte(11001000) -> wartość rejestru
    Stop

    5V:
    ATmega324 I2C: Brak sygnału ACK z układu 5V przez konwerter BS138

    3.3V:
    ATmega324 I2C: Brak sygnału ACK z układu 5V przez konwerter BS138

    Powiększenie obszaru "piku" low:
    ATmega324 I2C: Brak sygnału ACK z układu 5V przez konwerter BS138

    robiw

    Dodano po 24 [minuty]:

    Niemniej jednak analizator Salae nie ma jakiegokolwiek problemu z interpretacją ramek (niezależnie czy układ odpowiada ACK czy NACK), mimo że w ich "treści" pojawiają się jakieś dziwne piki. Powoli zaczynam się zastanawiać nad zmianą układu i tranzystorów konwertera na nowe...

    Salae:
    ATmega324 I2C: Brak sygnału ACK z układu 5V przez konwerter BS138

    robiw

    Dodano po 1 [godziny] 24 [minuty]:

    PROBLEM WYDAJE SIĘ BYĆ ROZWIĄZANY!

    Wymieniłem scalak na napięciu 5V i wszystko pracuje poprawnie przy f=10kHz! Prawdopodobnie, tak jak wspominał jeden z Kolegów, przetwornica na 5V pracująca dość niestabilnie skutecznie przetestowała Absolute Maximum Ratings scalaka uszkadzając go w taki sposób! W tej chwili zasilany jest z przetwornicy 12V i poprzez LDO 78M05 - rozwiązanie tymczasowe. Jutro przetestuję większe prędkości transmisji, aż do 400kHz przy pull-upach 3.9kΩ po obu stronach konwertera napięć magistrali! Za pomoc dziękuję...robiw
  • Pomocny post
    #13 13853541
    Konto nie istnieje
    Poziom 1  
  • #14 13853589
    robiw
    Poziom 26  
    Marek_Skalski napisał:
    Możesz przynajmniej zdradzić co to za magiczny układ?


    CY8CPLC10. Swoją drogą strasznie delikatny bo w jego DS napisano:

    Absolute Maximum Ratings:
    Supply Voltage on Vdd Relative to Vss: 6.0V
    DC Input Voltage: Vdd + 0.5

    robiw

    PS.
    Sonda oscyloskopu sprawna w 100%. To nie ona wprowadzała tą dodatkowa pojemność. Jutro sprawdzę jak przebiegi @400kHz wyglądają po wymianie tegoż układu...
REKLAMA