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

I2c i 1-Wire na Xmega A4, pod które piny podłączyć?

mas24 29 Lis 2017 08:27 969 11
  • #1 16856145
    mas24
    Poziom 16  
    Witam,

    Przymierzam się do zbudowania zegarka/kalendarza/termometru na Xmega. Moje pytanie brzmi: pod jakie piny do Xmega A4 podłączyć SCL, SDA i 1-wire? Czytałem, że pod UARTa, ale pod które piny konkretnie? Chodzi mi o to, by można było wygodnie korzystać z interfejsu.

    Jaki polecacie układ RTC?
  • #2 16856206
    czareqpl
    Poziom 33  
    Raczej źle czytałeś... Może w przypadku 1-Wire to są sposoby aby robić to uartem ale da się zasadniczo za pomocą dowolnego pinu.

    I2C podłączasz do linii opisanych jako SDA i SCL. Poczytaj troszkę o tych magistralach, pullupach i takich takich ;)
  • #3 16856232
    mas24
    Poziom 16  
    OK, magistralę I2C we wspomnianym procku znalazłem na PC0 i PC1.

    Co do 1-Wire to właśnie na elektrodzie widziałem dyskusje, żeby tą magistralę podpiąć pod UARTa i śmiali się z początkujących, że zrobili na dowolnym pinie.

    Np. tu:
  • #4 16856246
    tmf
    VIP Zasłużony dla elektroda
    @mas24 W nocie procesora masz sekcję w której opisane są alternatywne funkcje pinów. Tam znajdziesz przypisanie pinów do poszczególnych interfejsów. Co do 1-wire - oczywiście tylko UART (lub jak woli kol. BlueDraco - timer). W wątku, który podlinkowałeś masz opis i link do kodów. W UART wykorzystujesz piny TxD i RxD - łączysz je razem i odpalasz kod z załącznika. Przy większej magistrali warto dodać tranzystor i diody zabezpieczające.
  • #5 16856384
    es2
    Poziom 16  
    mas24 napisał:
    Co do 1-Wire to właśnie na elektrodzie widziałem dyskusje, żeby tą magistralę podpiąć pod UARTa i śmiali się z początkujących, że zrobili na dowolnym pinie.

    Na dowolnym pinie, to nie najlepszy pomysł. Na czas nadawania/odbiotu bitu trzeba całkowicie zawiesić przerwania.
    Co do rozwiązania z UART, można także użyć SPI. Wydaje sie, że I2C też by zadziałało. W takich przpadkach tracimy pin zegara.
    Są też konwertery I2C na 1-Wire i Uart na 1-Wire. W pewnych sytuacjach sa przydatne.
  • #6 16856427
    tmf
    VIP Zasłużony dla elektroda
    es2 napisał:
    Co do rozwiązania z UART, można także użyć SPI. Wydaje sie, że I2C też by zadziałało.


    Nie widziałem takich implementacji i raczej ich sens byłby wątpliwy. SPI w wielu MCU ma dosyć sztywne preskalery i byłby problem z timingami, ale jest to teoretyczniue możliwe. Inna wada to brak filtracji dla SPI - interfejsy UART w MCU często mają różne formy sprzętowej eliminacji zakłóceń, zwykle ukady (tak jest np. w XMEGA) wielokrotnie samplują sygnał, a jego stan ustalany jest np. przez majority voting. I2C sprzętowe to już byłby hardcore.
  • #7 16856448
    es2
    Poziom 16  
    tmf napisał:
    nna wada to brak filtracji dla SPI - interfejsy UART w MCU często mają różne formy sprzętowej eliminacji zakłóceń, zwykle ukady (tak jest np. w XMEGA)

    Nie sądzę aby to był jakimkolwiek problemem. Wątpię aby taki DS2484 próbkował kilka razy. Co do preskalera to racja, USART posiada elastyczny podzielnik, SPI, najczęściej mało elastyczny preskaler. Ten sam problem byłby z IIC.
    Właściwie, jak nie ma sie uarta, to warto sięgnąć po DS2484, realizuje on silne podciąganie, pozwalające podłączyć wiecej układów Slave czy użyć dłuższej magistrali z większa prędkością. Można to oczywiście, w ograniczonym zakresie, uzyskac na UART, przełączając pin w tryb wyjścia. DS2482-100 ma osiem kanałów 1-Wire, a zajmuje dwa. Opcja fajna dla uC z małą liczba wyprowadzeń.
  • #8 16856506
    Konto nie istnieje
    Poziom 1  
  • #9 16856519
    tmf
    VIP Zasłużony dla elektroda
    es2 napisał:
    tmf napisał:
    nna wada to brak filtracji dla SPI - interfejsy UART w MCU często mają różne formy sprzętowej eliminacji zakłóceń, zwykle ukady (tak jest np. w XMEGA)


    Nie sądzę aby to był jakimkolwiek problemem. Wątpię aby taki DS2484 próbkował kilka razy.


    Nie chodzi o to ile razy próbkuje układ 1-wire, ale ile razy próbkuje master. W przypadku jednej próbki, możne wystąpić jakiś chwilowe zakłócenie, dla np. 3 próbek, musiałoby się ono utrzymać przez 2/3 czasu zbierania próbek. Jest to istotny czynnik zwiększający pewność transmisji. Może nie warto byłoby aż tak się tym przejmować, lecz mamy to "za darmo", bo jest to wbudowana funkcjonalność UARTa. Na I2C może gdyby się spiąć, udałoby się zaimplementować bezpośrednio 1-wire (nie mówię o wykorzystaniu tego interfejsu do podłączenia układów konwerterów I2C-1-wire). Ale obawiam się, że nie byłoby to proste i wygodne - interfejs ten trzeba zainicować, wysłać start, dopiero potem dane symulujące transmisję 1-wire, a na końcu i tak jest problem, bo nie mamy symultanicznego odbioru stanu magistrali, tak jak to jest w przypadku UART. IMHO realizacja takiego scenariusza byłaby maksymalnie pokrecona, co przy braku jakichkolwiek zalet czyniłoby ją bezsensowną.
    Z kolei mostek I2c DS2482 - np. w farnellu kosztuje 5-6 zł + VAT, czyli tyle co procesor. Jakkolwiek układ fajny, to biorąc pod uwagę, że implementacja w MCU nie kosztuje nic, nie bardzo widzę sens go używać w połączeniu z XMEGA, czy innym MCU dla którego dysponujemy UARTem.
  • #10 16857320
    mas24
    Poziom 16  
    Piny sterujące I2c znalazłem w nocie katalogowej, więc tu temat I2C się kończy. Co do 1-wire, ciekawe jest użycie RxD+TxD z diodą. Rozumiem, że jeśli TxD nadaje, RxD w tym samym czasie odbiera? Przyjrzę się jeszcze kodowi zapodanemu w tamtym wątku.

    Dane będę wyświetlał na matrycach LED 4x(8x8), ale to już nie stanowi problemu, gdyż w książce Kol. tmf jest to świetnie opisane, wystarczy tylko mieć wolny jeden UART.
  • #11 16857391
    es2
    Poziom 16  
    mas24 napisał:
    Piny sterujące I2c znalazłem w nocie katalogowej, więc tu temat I2C się kończy. Co do 1-wire, ciekawe jest użycie RxD+TxD z diodą. Rozumiem, że jeśli TxD nadaje, RxD w tym samym czasie odbiera? Przyjrzę się jeszcze kodowi zapodanemu w tamtym wątku.

    Dane będę wyświetlał na matrycach LED 4x(8x8), ale to już nie stanowi problemu, gdyż w książce Kol. tmf jest to świetnie opisane, wystarczy tylko mieć wolny jeden UART.

    W Atmega czy Tiny trzeba dać diode lub lepiej bramke OC. W Xmega (nie jestem pewny) ale zdaje sie jak w ARM STM (np 103) mozna ustawić tryb OC (OD) dla funkcji alternatywnej.
  • #12 16943553
    mas24
    Poziom 16  
    Powinienem sobie poradzić, dziękuję Kolegom.
REKLAMA