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

[ATTiny2313] [ATTiny2313][C] i2c sniffer - gubienie danych podczas nasłuchiwania I2C

pitrypitry 27 Lut 2017 20:36 1833 2
REKLAMA
  • #1 16311660
    pitrypitry
    Poziom 10  
    Witam,

    Chciałbym nasłuchiwać co się dziej na magistrali I2C, bez ingerencji w przesyłane dane. Informacje które zostaną odebrane z magistrali I2C przesłane zostaną po USART-cie do hyperterminal-a .
    Do budowy tego urządzenia wykorzystałem mikrokontroler ATtiny2313, rezonator kwarcowy 20Mhz oraz transoptor LTV-817C (do izolacji między magistralą I2C, a liniami SDA,SCL mikrokontrolera ATtiny2313).

    Do testów posłużyłem się układ startowy EVB4.3 z którego wykorzystałem układ SN75176BP do transmisji danych po RS485 do terminala, zegar czasu rzeczywistego PCF8583 oraz Atmega32, której zadaniem było odczytywanie co 1 sekundę po magistrali I2C aktualnego czasu i wyświetlanie na wyświetlaczu LCD.

    Postanowiłem wykorzystać sprzętowy USI ATtiny2313 do odbierania danych z magistrali I2C, ale niestety napotkałem na pewne problemy podczas odczytu. Mianowicie część danych, które są przesyłane po magistrali I2C są "gubione" przez mikrokontroler ATtiny2313 i nie jestem pewny gdzie popełniłem błąd (dane przez Atmega32 są poprawnie odczytywane i wyświetlane na LCD).

    Jeżeli chodzi o przesyłanie danych po USART-cie do terminala to nie ma z tym problemu (echo z terminala działa poprawnie):
    8bitów danych, 1bit stopu, prędkość 115200

    Konfiguracja fusbitów mikrokontrolera:
    https://obrazki.elektroda.pl/1790811600_1488220137.png

    Program pisany jest w C w Eclipsie

    Macie jakiś pomysł co robię nie tak, kod poniżej:

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


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

    main.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 16341396
    Eagle
    Poziom 24  
    Kup podróbkę saleae, zdejmij przebiegi na I2C i na RS i dostaniesz odpowiedź co jest nie tak. Na pierwszy rzut oka na jeden przesłany bajt na I2C, przesyłasz 's', daną hex H, data hex L, 'a', 'p' czyli razem 5 bajtów. Przy 100kbps na I2C starasz się przepchać 5 razy tyle przy 115kbps na RS.
  • #3 16487313
    rpal
    Poziom 27  
    zrobiłem takie coś i dość dobrze działa, transmisja po RS232. Jeśli kolega dalej zainteresowany mogę udostępnić wsad i schemat na Attiny2313
REKLAMA