Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATtiny2313(4313) równoczesne użycie SPI (USI) i USART

paluszasty 11 Sie 2017 12:47 885 13
  • #1 11 Sie 2017 12:47
    paluszasty
    Poziom 23  

    Witam kolegów

    Potrzebuje stworzyć układ który skonwertuje dane odebrane przez SPI na RS485. Prędkość nie jest tu istotna max kilkanaście razy na sekundę.
    Sprawa wydaje się prosta, ale chce użyć jakiegoś małego uC żeby nie zajmował dużo miejsca. Preferowana obudowa to DIP ze względu na możliwość łatwej wymiany.

    Patrząc na uC AVR to najlepszy wydaje mi się maluszek ATtiny2313. Ma on interfejs USI który używany był by do odczytu danych po SPI. Wg noty ten uC ma też USARTa na drugim porcie wiec mógł by on wysyłać dane po RS485.

    Czy istnieją jakieś przeciwwskazania użycia równoczesnego USART i USI? Niestety nie mam tego uC pod ręką żeby na szybko to przetestować a nie chce tworzyć kodu niepotrzebnie.

    Alternatywa to ATtiny841 gdzie na pokładzie są dwa USARTy (w sumie ciekawe, 2 USARTy mają dopiero większe uC w obudowach 40 nózkoownych ATmega88 itp maja tylko 1) ale obudowa jest SO więc jest minimalnie większy problem z ewentualną wymianą układu.

  • #2 11 Sie 2017 13:31
    dondu
    Moderator Mikrokontrolery Projektowanie

    USART i USI to dwa niezależne układy.

  • #3 11 Sie 2017 17:21
    R-MIK
    Poziom 37  

    Każdy układ peryferyjny może działać niezależnie. Problemem może być prędkość transmisji i wielkość przesyłanych danych a w związku z tym wielkość pamięci ram na bufor danych. Można bowiem przesyłać 3 razy na sekundę 1KB danych. Jeden z interfejsów będzie pracował z prędkością 1Mb/s, drugi 1200b/s. Gdzieś tą 1KB ramkę trzeba przechować a Tiny2313 nie ma tyle ram.
    Napisz dokładniej co chcesz osiągnąć, do czego ma to służyć.

  • #4 11 Sie 2017 20:15
    paluszasty
    Poziom 23  

    To dobrze że da się te dwa układy niezależnie odpalić, tak mi się wydawało ale nie byłem pewien.

    Jeśli chodzi o zastosowanie to ma to odczytywać dane (w sumie 16bitów) z przetwornika ADC i wysyłać max 10x na sekundą dalej po rs485. Wielkość buforu nie będzie wiec stanowiła problemu. Dane nie muszą być przeliczane przez ATtiny, zajmie się tym master.

    Jedyny problem to odległość ok 70m na otwartej przestrzeni+ściana domu dlatego postanowiłem użyć RS485. Łączność bezprzewodowa odpada, tracę zasięg WiFi w miejscu gdzie ten układ ma pracować.

  • Pomocny post
    #5 11 Sie 2017 20:32
    R-MIK
    Poziom 37  

    paluszasty napisał:
    To dobrze że da się te dwa układy niezależnie odpalić, tak mi się wydawało ale nie byłem pewien.

    Jeśli chodzi o zastosowanie to ma to odczytywać dane (w sumie 16bitów) z przetwornika ADC i wysyłać max 10x na sekundą dalej po rs485.

    To można napisać nawet bez użycia przerwań.

  • #6 11 Sie 2017 20:42
    paluszasty
    Poziom 23  

    Przerwanie przyda się jedno odbiór ramki USART - będzie adres urządzenie + komenda, przejście w tryb nadawania. Można by i pewnie zrobić to w pętli ale jakoś wolę przerwanie jak i tak nie wykorzystam zasobów uC.

    Myślałem jeszcze o innym rozwiązaniu. Użyć transcriverów RS485 na każdej linii SPI, ale 8xMAX485 (po 4 w nadajniku i odbiorniku) wyjdzie zdecydowanie drożej niż 2xMAX485+ATtiny. Zresztą funkcjonalność układu z ATtiny będzie znacznie większa.

  • #7 11 Sie 2017 22:03
    R-MIK
    Poziom 37  

    paluszasty napisał:
    ale 8xMAX485 (po 4 w nadajniku i odbiorniku) wyjdzie zdecydowanie drożej niż 2xMAX485+ATtiny. Zresztą funkcjonalność układu z ATtiny będzie znacznie większa.

    Są po 2 czy 4 nadajniki/odbiorniki RS422w jednym scalaku.

  • Pomocny post
    #8 12 Sie 2017 00:11
    kamyczek
    Poziom 33  

    Zacznij może od poprawienia tematu attiny2313 a nie atmega2313 . Jeśli chcesz użyć kilku układów na magistrali rs485 wystarczy użyć uarta w trybie MPCM jednej pary przewodów (skrętki i przełączania trybu nadawanie odbiór) czujnikom można nadać adresy i je normalnie wywoływać adresem z mastera i odczytywać wartość dla danego adresu . Ja osobiście konwersję zrobił bym na poziomie czujnika i wysyłał gotowe dane bo umożliwia to podmianę i stosowanie różnych czujników i standaryzuje odpowiedź więc można dowolnie zastępować czujniki czy to dallas czy termistor czy termopara . Poza tym umożliwia to monitorowanie odpowiedzi z różnych źródeł przy pomocy różnych odbiorników bez potrzeby instalowania w nich algorytmu kalkulacji wartości .

  • #9 12 Sie 2017 01:58
    paluszasty
    Poziom 23  

    Tytuł już zmieniłem.

    Dokładnie o czymś takim myślałem jak kolega mówi. Pewnie jakiś MODBUS zastosuje lub coś podobnego bez sumy kontrolnej. To okaże się "w praniu".

    Konwersja na poziomie czujnika jest fajnym pomyłem który też rozważałem. Generalnie nie ma z tym problemu to też krótki kod.

    Co prawda myślę o PTt100. I tu pojawia się drobny problem nieliniowości czujnika co w konsekwencji prowadzi do dość skomplikowanych obliczeń w pełnym przedziale temperatur. Jednak w typowych sytuacjach przedział jest na tyle wąski (powiedzmy 100degC) że bez większego problemu można zastosować aproksymacje liniową.

  • #10 12 Sie 2017 04:11
    kamyczek
    Poziom 33  

    PT100 to tani czujnik jednak wymaga "poprawienia" charakterystyki ja bym się zastanowił czy lepiej jest dorobić część analogową do formowania sygnału (żeby osiągnąć jakieś rozsądne parametry trzeba rozciągnąć jego wskazania do poziomu od 0 do vref co poskutkuje rozdzielczością równą rozdzielczości przetwornika A/D (1024) a następnie poprawić nieliniowość przy pomocy obliczeń choć ja bym chyba był skłonny do sporządzenia tabeli i wrzuceniu jej do flasha bo będzie szybciej i wygodniej a objętość obliczeń matematycznych wcale nie musi zająć mniej miejsca w pamięci i tym bardziej nie wykona się szybciej . I tu dochodzimy do momentu w którym trzeba zadać sobie pytanie czy pt100 plus układ ze wzmacniaczem operacyjnym lub kilkoma plus kod będzie tańszy i wygodniejszy od lepszego czujnika z bardziej przyjazną dla nas charakterystyką np. dallasa . Pt100 dużo lepiej się sprawdza w układach analogowych z komparatorem okienkowym ale przy współpracy z adc trzeba go dopasować do przetwornika żeby uzyskać możliwie dużą rozdzielczość nie psując przy tym parametrów .

  • #11 12 Sie 2017 11:20
    paluszasty
    Poziom 23  

    Jeśli chodzi o przetwarzanie sygnału z Pt100 to używam dedykowanego przetwornika ADC - MAX31865. Bardzo fajny układ. J

    eśli chodzi o obliczenia to dla zakresu -50 - 150deg C konieczne jest policzenie temperatury z wielomianu 2 stopnia ale to nie jest duży problem a większym uC. Problemem jest tu raczej wielkość stałych a,b,c.

    Gorzej jak chcemy zrobić to w szerszym zakresie np 0-500degC.
    Ja robiłem taki program do loogera temperatury w piecu laboratoryjnym i musiałem ratować się funkcją sklejaną dla rożnych zakresów. Ale to zupełnie inny projekt, zrealizowany na jednym "dużym" uC.

  • #12 12 Sie 2017 12:43
    kamyczek
    Poziom 33  

    Pytanie podstawowe jaką dokładność wskazania chcesz otrzymać bo od tego zależy moim zdaniem podejście do tematu .

  • #13 13 Sie 2017 13:43
    paluszasty
    Poziom 23  

    W tym projekcie z Rs485 to 0.5 lub nawet 1.0 degC mi wystarczy. Natomiast w logerze do pieca laboratoryjnego interesowała mnie dokładność 0.1degC i tu konieczne było użycie funkcji sklejanej.

  • #14 13 Sie 2017 14:16
    kamyczek
    Poziom 33  

    W takim przypadku wystarczył by przetwornik wbudowany w układ , wzmacniacz operacyjny i tabelka z wynikami . Po co sobie utrudniać jak ma być taka dokładność . Minimalizacja kosztów attiny2313, max485, lm358, stabilizator i złącze . Szkoda się bawić w obliczenia i matematykę a jeśli już to tylko na tyle żeby zmieścić się w tolerancji ...

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME