Elektroda.pl
Elektroda.pl
X
Computer ControlsComputer Controls
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Konwerter I2C slave na UART.

n6210 12 Lut 2020 17:55 1734 5
  • Witam.
    W pewnej konstrukcji ARM, z którą przyszło mi pracować, logi wysyłane były przy pomocy interfejsu I2C na adres 0x22 (7bit).
    Zapewne niektórzy znają przejściówki USB-I2C z układem FTDI np.: FT201X
    Konwerter I2C slave na UART.
    i to właśnie te układy pracują na powyższym adresie.
    Jednak koszt takiej przejściówki to ok. 30-40zł + wysyłka, a i czas również naglił,
    przez co postanowiłem wykonać samodzielnie podobną konstrukcję na TTiny85.

    Niestety, w zasobach znalazłem jedynie nieśmiertelną ATTiny13 bez wbudowanego modułu USI.
    Nie poddałem się jednak i postanowiłem spróbować wykonać w pełni programowy I2C slave + UART (gotowy kod),
    a teraz przedstawiam efekt kilku godzin pracy.
    Może się komuś przyda.

    Konwerter I2C slave na UART.

    Kod w C, Makefile, konfiguracja do AVRDude są do pobrania z GITHUB-a: Link do projektu
    Schemat w PDF do podbrania

    Parametry pracy:
    - adres 0x22 (7-bit)
    - prędkość UART 230400 boud 8N1
    - prędkość I2C (maksymalna testowana) 100kbit

    Jako USB<->UART użyłem zwykłej przejściówki FTDI z wprowadzonymi pinami Vcc | TxD | RxD | GND


    Przejściówka sprawuje się bardzo dobrze, pracuje stabilnie, nie gubi danych i co najważniejsze jest super prosta w konstrukcji, przez co nie powinna sprawić trudności nawet początkującemu hobbyście. Dla uproszczenia diody LED można nie montować - wskazuje jedynie aktywność na magistrali I2C. Zachęcam do własnych eksperymentów i modyfikacji kodu i ulepszeń.
    Edit:
    Jako, że w kodzie są pętle bez timeout-a dodałem obsługę watchdog-a by zapewnić reset w razie zawieszenia się stanu magistrali, odłączenia konwertera itd.

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    n6210
    Poziom 20  
    Offline 
    Specjalizuje się w: programowanie
    n6210 napisał 331 postów o ocenie 65, pomógł 35 razy. Mieszka w mieście Bielefeld. Jest z nami od 2008 roku.
  • Computer ControlsComputer Controls
  • Computer ControlsComputer Controls
  • #4
    n6210
    Poziom 20  
    neo_84 napisał:
    n6210 napisał:
    prędkość UART 230400 boud 8N1
    dość szybko i to bez kwarcu zewnętrznego. Przy tej prędkości chyba działa tylko od czasu do czasu... ? ;)

    Z przejściówką FTDI FT232 działa bardzo stabilnie i nie przekłamuje znaków.
    W sumie pisałem :)

    Dodano po 8 [minuty]:

    byrrt napisał:
    Jest taki projekt jak i2c-tiny-usb - gotowiec do ściągnięcia, zaprogramowania i uruchomienia.

    Jedyny projekt jaki znam pod tą nazwą obsługuje jedynie i2c master i wymaga ATTiny45/85, a nie ATTiny13.
    Tu jest link
    A tu drugi w sumie nawet lepszy bo działa ze standardowym modułem z kernela.
    Na dniach przyjdzie mi Digispark to sobie wypróbuje, ale to jednak inne zastosowanie.
    Niemniej postaram się przerobić to na coś podobnego tylko po USB więc nie będzie potrzeby USB->UART.
    Digispark to koszt 5-7zł z wysyłką z Chin więc dalej się opłaci kombinować zamiast FT201X.

    Jak znasz jakiś projekt I2C-slave to UART na Tiny13 to podaj proszę linka.
    Może jest lepszy i komuś się przyda, a sam też chętnie zerknę.
  • #6
    n6210
    Poziom 20  
    djfarad02 napisał:
    n6210 napisał:
    Z przejściówką FTDI FT232 działa bardzo stabilnie i nie przekłamuje znaków.
    W sumie pisałem

    Mogą wystąpić problemy przy pełnym zakresie temperatur pracy bądź z innymi egzemplarzami uC.

    Oczywiście, że mogą jednak bez przesady... to jest konstrukcja przeznaczona do pracy na biurku :)
    Na dziś zlutowane 3 sztuki i wszystkie działają poprawnie.
    Pozdrawiam