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

[Rozwiązano] (ATMEGA328PB) Brak sygnałów SCL/SDA magistrali TWI

dodelow 19 Lut 2025 20:34 345 10
REKLAMA
  • #1 21447256
    dodelow
    Poziom 4  
    Posty: 67
    Ocena: 1
    Cześć,

    Ostatnio zainteresowałem się działaniem magistrali I2C/TWI w MCU Atmega328PB (Arduino Nano). Na razie tylko testuję jak to działa i do linii SCL/SDA podłączam się do analizatora stanów logicznych (podróbka SALEAE) przewodami typu Jump Wire. Gdy napisałem program do komunikacji po stronie mastera i wgrałem go do Atmegi to uzyskałem przebiegi na pinach SCL i SDA jak poniżej:

    Zrzut ekranu przedstawiający przebiegi sygnałów na liniach SCL i SDA z analizatora logicznego.

    Gdy jednak odłączyłem Arduino z płytki breadboard żeby ją przeprogramować (zmieniłem tylko adres slave'a) to po ponownym podłączeniu na żadnej z linii (ani SCL ani SDA) nie zaobserwowałem sygnału. Potem odłączyłem SDA i wtedy zaobserwowałem sygnał zegara na pinie SCL. Gdy jednak podłączyłem podczas pracy MCU analizator ponownie do pinu SCL to znowu sygnał zniknął. Zauważyłem też, że kiedy dokonam odłączenia przewodu analizatora od pinu SDA to żeby sygnał zegara pojawił się na SCL muszę zresetować MCU.
    Co jest powodem, że nie mogę zaobserwować sygnału na pinach? Jak to rozwiązać ?
    Proszę o wyjaśnienie tej nurtującej mnie kwestii.

    Pozdrawiam
  • REKLAMA
  • Pomocny post
    #2 21447290
    tos18
    Poziom 42  
    Posty: 7131
    Pomógł: 1112
    Ocena: 1867
    Co z rezystorami podciągającymi magistralę ?
  • #3 21447374
    dodelow
    Poziom 4  
    Posty: 67
    Ocena: 1
    Nie zastosowałem ich. Jaką wartość mogę dobrać?
  • REKLAMA
  • Pomocny post
    #4 21447378
    bart-projects
    Poziom 30  
    Posty: 836
    Pomógł: 200
    Ocena: 261
    Po pierwsze między tytułem a opisem jest chyba nieścisłość. Arduino Nano używa Atmega328P. Natomist Atmega328PB jest nowsza i ma na przykład dwie magistrale TWI(I2C) jak też dwa USART i SPI. Tam się wtedy rejestry trochę inaczej nazywają (zazwyczaj końcówka 0 i 1).

    Tak jak pisał przedmówca najlepiej użyć podciągania rezystorami, ale od biedy działa nawet włączenie podciągania wewnętrzego procesora.

    Co do jego zawieszania to I2C jest kapryśne. Trzeba pilnować znaków Start i Stop i najlepiej nie nadawać juz niczego gdy układ który ma odpowiedzieć nie odpowiada Ack nawet po wywołaniu swojego adresu.

    Ostatnią radą i moim spostrzeżeniem przy używaniu klona Saleae jest to że zawiesza się kiedy nie zachowa się kolejności podłączania. To znaczy nalezy najpierw podłączyć go do USB a potem dopiero włączyć badany układ. Kiedy zrobi się odwrotnie i Saleae najpierw pociągnie sobie napięcie z badanego układu to po podłączeniu do USB może nie ruszyć i wtedy znaje się że nic nie działa.

    Przy 5V rezystory pomiędzy 10K a 4K7 powinny pasować.
  • REKLAMA
  • #5 21447382
    dodelow
    Poziom 4  
    Posty: 67
    Ocena: 1
    1k ohm będzie wystarczający?
  • #7 21447397
    dodelow
    Poziom 4  
    Posty: 67
    Ocena: 1
    >>21447378 Zapomniałem uściślić, że jest to chiński klon Arduino Nano, boleśnie zderzyłem się z tymi dwoma magistralami TWI, musiałem dopisać 0 w rejestrach TWBR, TWCR, TWDR oraz TWSR.

    Dodano po 2 [minuty]:

    Dzięki za szybką odpowiedź @tos18 oraz @bart-projects zastosuję zaproponowane zmiany i sprawdzę jak zachowuje się magistrala.
  • REKLAMA
  • #9 21448749
    dodelow
    Poziom 4  
    Posty: 67
    Ocena: 1
    Po zastosowaniu rezystorów podciągających 7,5 kohm otrzymałem przebiegi jak poniżej. Nie wiem jednak jak zinterpretować ten stan wysoki przez 16 us na linii SCL. Myślałem, że ten przebieg będzie miał stan wysoki i niski o takich samych okresach.

    Wykres sygnałów z przebiegami logicznymi w kolorach żółtym i czerwonym, z zaznaczonymi okresami czasu i częstotliwościami.
  • Pomocny post
    #10 21448760
    bart-projects
    Poziom 30  
    Posty: 836
    Pomógł: 200
    Ocena: 261
    W Saleae masz analizatory tych przebiegów. Patrzysz na Analyzers i sobie dodajesz I2C no i ustawiasz na ktorych to masz kanałach.
    Potem Ci będzie pokazywał Start, Stop, Ack, Nack albo Frame Error :D no i oczywiście dane które mozesz sobie włączyć w Hex, Ascii itd..

    Zrzut ekranu z ustawieniami analizatora I2C w programie Saleae Logic.
  • #11 21448779
    dodelow
    Poziom 4  
    Posty: 67
    Ocena: 1
    Dzięki za pomoc w rozwiązaniu problemu i rady jak korzystać z analizatora stanów Saleae. Bardzo pomocna jest ta funkcja podkreślająca kolejne fragmenty sygnału (START, ADDRESS, STOP)

Podsumowanie tematu

✨ Użytkownik napotkał problemy z sygnałami SCL/SDA na magistrali TWI w mikrokontrolerze Atmega328PB (Arduino Nano). Po podłączeniu analizatora stanów logicznych Saleae, sygnały zniknęły po odłączeniu i ponownym podłączeniu urządzenia. Użytkownik nie zastosował rezystorów podciągających, co zostało zasugerowane jako potencjalny problem. Po dodaniu rezystorów o wartości 7,5 kΩ, użytkownik uzyskał sygnały, ale miał trudności z interpretacją stanu wysokiego na linii SCL. Wskazówki dotyczące użycia analizatora Saleae, w tym dodawanie analizatorów I2C, pomogły w dalszej diagnostyce.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA