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

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

29 Lis 2017 08:27 654 11
  • 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?
  • Poziom 29  
    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 ;)
  • 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:
  • Moderator Mikrokontrolery Projektowanie
    @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.
  • 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.
  • Moderator Mikrokontrolery Projektowanie
    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.
  • 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ń.
  • Poziom 1  
  • Moderator Mikrokontrolery Projektowanie
    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.
  • 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.
  • 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.
  • Poziom 16  
    Powinienem sobie poradzić, dziękuję Kolegom.