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(4313) równoczesne użycie SPI (USI) i USART

paluszasty 11 Sie 2017 12:47 1350 13
REKLAMA
  • #1 16636324
    paluszasty
    Poziom 25  
    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.
  • REKLAMA
  • REKLAMA
  • #3 16636852
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #4 16637121
    paluszasty
    Poziom 25  
    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 16637152
    Konto nie istnieje
    Konto nie istnieje  
  • #6 16637171
    paluszasty
    Poziom 25  
    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 16637324
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #8 16637516
    kamyczek
    Poziom 38  
    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 .
  • REKLAMA
  • #9 16637556
    paluszasty
    Poziom 25  
    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 16637569
    kamyczek
    Poziom 38  
    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 16637854
    paluszasty
    Poziom 25  
    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 16638001
    kamyczek
    Poziom 38  
    Pytanie podstawowe jaką dokładność wskazania chcesz otrzymać bo od tego zależy moim zdaniem podejście do tematu .
  • #13 16639839
    paluszasty
    Poziom 25  
    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 16639902
    kamyczek
    Poziom 38  
    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 ...
REKLAMA